Keybindings

Every app-level shortcut and its default chords, in the same groups the settings drawer’s editor uses; each row names the action’s config id (the custom_key_binds vocabulary).

The defaults

Action Default chords Action id
Select all Ctrl+Shift+A select_all
Copy Ctrl+Shift+C copy
Copy (primary selection) None - ships unbound copy_primary
Paste Ctrl+Shift+V paste
Paste primary selection Shift+Insert paste_primary
New tab Ctrl+Shift+T new_tab
New tab (home directory) Ctrl+Shift+H new_tab_home
Duplicate tab Ctrl+Shift+D duplicate_tab
Close tab Ctrl+Shift+W close_tab
Rename tab Ctrl+Shift+R rename_tab
Next tab Ctrl+PageDown / Ctrl+Tab next_tab
Previous tab Ctrl+PageUp / Ctrl+Shift+Tab prev_tab
Move tab left Ctrl+Shift+PageUp move_tab_left
Move tab right Ctrl+Shift+PageDown move_tab_right
Activate tab 1-8 Ctrl+Shift+1 … Ctrl+Shift+8 activate_tab_1 … activate_tab_8
Activate last tab Ctrl+Shift+9 activate_last_tab
Zoom in Ctrl+= / Ctrl++ / Ctrl+Shift+= / Ctrl+Shift++ zoom_in
Zoom out Ctrl+- / Ctrl+Shift+- zoom_out
Zoom reset Ctrl+0 zoom_reset
Clear scrollback Ctrl+Shift+K clear_scrollback
Hide the overlay Ctrl+Shift+Q hide
Open settings Ctrl+Shift+I settings
Open the images panel Ctrl+Shift+P images_panel
Toggle the status bar Ctrl+Shift+B toggle_status_bar
Show completions Ctrl+Space show_completions

Every default binds Ctrl+Shift+<key> - the only exceptions are the four sanctioned families: the zoom cluster (Ctrl+=/Ctrl++/Ctrl+-/Ctrl+0), tab cycling (Ctrl+Tab, Ctrl+PageUp/Ctrl+PageDown), Shift+Insert for primary paste, and Ctrl+Space for the completion menu. New defaults follow this standard; a bare Ctrl+<letter> is always the shell’s byte, never the app’s.

The numbered activation binds are cosmic-term’s exact rule: digits 1-8 activate that tab strictly, and 9 always takes the last tab. The cycling pair is browser-style - Ctrl+Tab / Ctrl+Shift+Tab walk the tab list alongside Ctrl+PageUp/PageDown. copy_primary ships unbound because middle-click already pastes the primary selection; it is still bindable like every other action.

The per-profile verbs - New profile tab and Switch profile tab - are deliberately not keybindable: they act on a config-list index, which is not a stable user-facing id, so they live only in the context menus.

Why some bare keys stay free

Several shortcuts sit behind Ctrl+Shift+ because the bare Ctrl+ chord is a byte the shell owns: Ctrl+I is the TAB byte (0x09, tab completion), Ctrl+H the backspace byte (0x08), Ctrl+B readline’s cursor-back, Ctrl+P readline’s previous-history, Ctrl+R reverse history search, and Ctrl+D end-of-file. Swallowing any of them would break the shell it runs in, so the app never binds them. Likewise bare Ctrl+digit stays free - only the Ctrl+=/-/0 zoom cluster and its Shift-held forms bind.

The zoom chords come in Shift-optional pairs because matching is exact on modifiers and typing + holds Shift on US-style layouts: without the Shift-held forms the literal Ctrl++ press would arrive dead. Ctrl+Shift+_ is the one form deliberately left unbound - on those layouts it is how a Shift-held Ctrl+- arrives, and that byte belongs to the shell (0x1F, readline undo).

Customizing

One binding per action, set in the settings drawer’s editor (two-press capture: arm, then press the chord - a chord another action holds is refused with the holder named) or hand-edited in the config file (configuration). A custom binding replaces all of that action’s default chords; removing the entry reverts to the defaults. A committed rebind applies to the very next key press, no restart.