Skip to content

Custom Keybindings

Switch to Zen Mode

Mutsumi offers three keybinding presets (vim, emacs, arrows). If you want to change individual keys without creating a full preset, use key_overrides in config.toml.

Add a [key_overrides] section to your config.toml:

keybindings = "vim"
[key_overrides]
quit = "ctrl+q"
cursor_down = "ctrl+j"
cursor_up = "ctrl+k"

Overrides are applied on top of the selected preset. Only the specified actions are reassigned; all other keys remain at their preset defaults.

These are all the action names you can override:

ActionDescriptionvim defaultemacs defaultarrows default
cursor_downMove cursor downjctrl+ndown
cursor_upMove cursor upkctrl+pup
cursor_topJump to topgg (multi-key)ctrl+ahome
cursor_bottomJump to bottomGctrl+eend
ActionDescriptionDefault (all presets)
toggle_doneToggle done/pendingspace
new_taskCreate new taskn
edit_taskEdit selected taske
inline_editInline edit titlei
show_detailOpen detail panelenter
close_detailClose detail panelescape
copy_taskCopy tasky
paste_taskPaste belowp
paste_task_abovePaste aboveP (shift+p)
add_childAdd subtaskA (shift+a)
searchOpen search/
sortOpen sort overlays
ActionDescriptionDefault
priority_upIncrease priority+ or =
priority_downDecrease priority- or _
ActionDescriptionvim defaultemacs defaultarrows default
collapse_groupCollapse priority grouphctrl+bleft
expand_groupExpand priority grouplctrl+fright
toggle_foldToggle subtask foldzzz
move_downMove task downJctrl+shift+nshift+down
move_upMove task upKctrl+shift+pshift+up
ActionDescriptionDefault
next_tabNext scope tabtab
prev_tabPrevious scope tabshift+tab
tab_1Switch to Today1
tab_2Switch to Week2
tab_3Switch to Month3
tab_4Switch to Inbox4
ActionDescriptionvim/arrows defaultemacs default
quitQuit Mutsumiqctrl+q
show_helpShow help screen??

Key strings follow Textual’s key notation:

ExampleMeaning
jSingle character key
spaceSpace bar
enterEnter key
escapeEscape key
tabTab key
ctrl+qCtrl + Q
shift+tabShift + Tab
ctrl+shift+nCtrl + Shift + N
upUp arrow
downDown arrow
leftLeft arrow
rightRight arrow
homeHome key
endEnd key
slash/ key
question_mark? key
keybindings = "vim"
[key_overrides]
quit = "ctrl+q"

Example: Arrow keys with vim-style J/K reorder

Section titled “Example: Arrow keys with vim-style J/K reorder”
keybindings = "arrows"
[key_overrides]
move_down = "J"
move_up = "K"

Under the hood, get_keybindings() takes the preset bindings and replaces the key for any action listed in key_overrides:

config.toml
[key_overrides]
quit = "ctrl+q"
# Result: the "q" binding for quit is replaced with "ctrl+q"
# All other bindings remain unchanged

The override mechanism operates at the Textual Binding level. The action name, description, and show behavior are preserved; only the key string is swapped.