Built-in keymap actions

June 8, 2026 ยท View on GitHub

The runtime ships a fixed set of action names you can pass as a string to hollow.keymap.set(chord, "name", ...). They are defined in src/lua/hollow/actions.lua.

The full list, grouped by intent:

Panes

ActionWhat it does
split_verticalSplit the active pane vertically
split_horizontalSplit the active pane horizontally
split_vertical_in_domainSplit the active pane vertically with a domain picker
split_horizontal_in_domainSplit the active pane horizontally with a domain picker
create_floating_paneCreate a new floating pane
maximize_paneToggle pane maximize (covers the tiled area)
float_paneMake the active pane floating
tile_paneReturn a floating pane to the tiled layout
close_paneClose the active pane

Focus

ActionWhat it does
focus_pane_leftFocus the pane to the left
focus_pane_rightFocus the pane to the right
focus_pane_upFocus the pane above
focus_pane_downFocus the pane below

Move

ActionWhat it does
move_pane_leftMove the active pane left (or nudge a floating pane)
move_pane_rightMove the active pane right
move_pane_upMove the active pane up
move_pane_downMove the active pane down

Resize

ActionWhat it does
resize_pane_leftResize the active pane's left edge left
resize_pane_rightResize the active pane's right edge right
resize_pane_upResize the active pane's top edge up
resize_pane_downResize the active pane's bottom edge down

Tabs

ActionWhat it does
new_tabOpen a new tab
new_tab_in_domainOpen a new tab with a domain picker
close_tabClose the active tab
next_tabFocus the next tab
prev_tabFocus the previous tab
rename_tabRename the active tab

Workspaces

ActionWhat it does
new_workspaceCreate a new workspace
workspace_switcherOpen the workspace switcher picker
create_workspaceCreate a workspace via the input prompt
rename_workspaceRename the active workspace
close_workspaceClose the active workspace
next_workspaceSwitch to the next workspace
prev_workspaceSwitch to the previous workspace

Clipboard

ActionWhat it does
copy_selectionCopy the current selection
paste_clipboardPaste from the clipboard

Scrollback

ActionWhat it does
scrollback_line_upScroll the active pane up one line
scrollback_line_downScroll the active pane down one line
scrollback_page_upScroll the active pane up one page
scrollback_page_downScroll the active pane down one page
scrollback_topScroll the active pane to the top
scrollback_bottomScroll the active pane to the bottom
prompt_jump_prevJump to the previous prompt in scrollback
prompt_jump_nextJump to the next prompt in scrollback

Copy mode

Bind these with { mode = "copy_mode" }. See Copy mode.

ActionWhat it does
copy_modeEnter copy mode
copy_mode_searchOpen the search prompt in copy mode
copy_mode_exitExit copy mode
copy_mode_move_leftMove cursor one cell left
copy_mode_move_rightMove cursor one cell right
copy_mode_move_upMove cursor one line up
copy_mode_move_downMove cursor one line down
copy_mode_line_startMove to line start
copy_mode_line_endMove to line end
copy_mode_page_upMove up one page
copy_mode_page_downMove down one page
copy_mode_topJump to the top
copy_mode_bottomJump to the bottom
copy_mode_begin_selectionBegin a normal selection
copy_mode_begin_block_selectionBegin a block selection
copy_mode_clear_selectionClear the current selection
copy_mode_copy_selectionCopy selection and exit copy mode
copy_mode_search_nextJump to the next search match
copy_mode_search_prevJump to the previous search match

Misc

ActionWhat it does
command_paletteOpen the command palette
reload_configReload configuration
font_size_increaseIncrease font size by 0.5
font_size_decreaseDecrease font size by 0.5
font_size_resetReset font size to the default

Custom actions

There are two ways to define custom actions.

Register a named action

Use hollow.action.register() to add a named action that appears in the command palette and can be bound to a key chord:

hollow.action.register("command_palette", {
  run = function() hollow.ui.command_palette.open() end,
  desc = "Open command palette",
  category = "general",
})

hollow.keymap.set("<leader>p", "command_palette", { desc = "command palette" })

The spec accepts these fields:

FieldTypeDefaultDescription
runfun()requiredFunction to call when the action is triggered
descstring?""Human-readable description shown in the command palette
categorystring?"general"One of "tab", "pane", "workspace", "window", "scroll", "copy_mode", "general", "user"
workspace_targetableboolean?falseIf true, the command palette prompts for a target workspace before running

Bind a Lua function directly

A string action name is just shorthand for a Lua callback. You can also pass a function directly to hollow.keymap.set:

hollow.keymap.set("<leader>ww", function()
  hollow.term.new_workspace({ name = "scratch" })
  hollow.ui.notify.info("Workspace ready", { ttl = 1200 })
end, { desc = "new scratch workspace" })

This style does not register the action in the command palette.

API reference

--- Register a named action (appears in the command palette).
---@param name string
---@param spec HollowActionSpec
hollow.action.register(name, spec)

--- Return all registered actions, sorted by category then name.
---@return HollowPaletteEntry[]
hollow.action.list()

--- Call a named action directly.
hollow.action[name]()

The HollowActionSpec and HollowPaletteEntry types are defined in types/hollow.lua.

See Keybindings for the chord syntax and the modal binding model, and hollow.keymap for the keymap API.