17 Keybindings

Jotain follows Emacs conventions: only global rebindings live in lisp/init-keysel; per-package bindings stay colocated with the package’s use-package block. which-key is enabled by default, so after any prefix key a paged menu of available continuations appears in the echo area. The prefix labels listed below are registered via which-key-add-key-based-replacements in init-keys.el, so they show up in those menus instead of the bare command names.

17.1 C-c — user namespace

Reserved by Emacs convention for user bindings. Jotain claims the following:

KeyLabelCommand
C-c aorg-agendaorg-agenda
C-c corg-captureorg-capture
C-c ddirvishdirvish
C-c Ddirvish-sidedirvish-side
C-c eecaeca
C-c gmagit-filemagit-file-dispatch
C-c hconsult-historyconsult-history
C-c iconsult-infoconsult-info
C-c jjujutsumajutsu-log
C-c M-jjujutsu-dispatchmajutsu-dispatch
C-c kconsult-kmacroconsult-kmacro
C-c lorg-store-linkorg-store-link
C-c m—consult-man
C-c norg-roam prefixn f find, n i insert, n c capture
C-c ocombobulate prefixstructural editing dispatch
C-c qclaude-code-ideclaude-code-ide-menu
C-c reglot-refactor prefixr r rename, r f format, r a actions, r o organize-imports, r q quickfix
C-c sgptel-sendgptel-send
C-c Sgptel-menugptel-menu
C-c ttoggle-themeauto-dark-toggle-appearance
C-c vdevenvdevenv transient — tasks, scripts, processes, env
C-c M-xconsult-mode-commandconsult-mode-command

17.2 C-x — control namespace

Built-in Emacs prefix extended with a handful of Jotain additions:

KeyLabelCommand
C-x C-adape (debug) prefixdape-global-map — Debug Adapter Protocol: start, step, breakpoints, REPL
C-x b—consult-buffer
C-x gmagit-statusmagit-status
C-x Ggit-status-filejotain-switch-git-status-buffer
C-x M-gmagit-dispatchmagit-dispatch
C-x jrotate-window-splitjotain-toggle-window-split
C-x Jjj-status-filejotain-switch-jj-status-buffer
C-x p b—consult-project-buffer
C-x r b—consult-bookmark
C-x t b—consult-buffer-other-tab
C-x uvundovundo
C-x 1—jotain-nav-toggle-delete-other-windows
C-x Pproject (projection) prefixprojection-map — multi-language project commands

17.3 Other global bindings

Single-keystroke globals that don’t fit a C-c / C-x namespace — window switching, spell-check, region growth, and multi-cursor.

KeyCommand
M-oother-window
M-$jinx-correct
C-M-$jinx-languages
C-=expreg-expand
C->mc/mark-next-like-this
C-<mc/mark-previous-like-this
C-S-c C-S-cmc/mark-all-like-this
C-h .helpful-at-point (via [remap display-local-help])
C-.embark-act
C-;embark-dwim
C-h Bembark-bindings

17.4 Disabled by default

KeyReason
C-zAccidentally suspending Emacs from a GUI frame is never what you want
C-x C-zSame

17.5 Mode-local overrides

A few major modes rebind C-c leaves locally:

17.6 Embark action menu

C-. (embark-act) opens a keyboard-driven "right-click" menu of the actions that apply to the thing at point — a minibuffer candidate, a file name, a buffer, a URL, an Elisp symbol, the active region. C-; (embark-dwim) skips the menu and runs the default action. The keys below are pressed after C-., inside the action menu:

KeyAction
C-hSearchable completing-read of every applicable action — the discovery entry point
Eembark-export — promote the candidate set to a buffer (grep for ripgrep/grep, occur for consult-line, dired for files, ibuffer for buffers)
Aembark-act-all — run one action on every current candidate
Bembark-become — re-run the input you typed through a different command
iInsert the candidate into the buffer you came from
wCopy the candidate to the kill-ring

Two habits worth forming:

Because Embark resolves candidate paths through project.el, the full file-action arsenal (w copy path, r rename, d delete, j jump to dired) works directly on the project-relative candidates of project-find-file without a dired detour. embark-become’s file map already offers p for project-find-file, so C-. B p re-runs a plain C-x C-f input through the project finder.

17.7 Window navigation

Shift + arrow keys move focus between split windows, courtesy of the built-in windmove-default-keybindings. M-o cycles through windows linearly; C-x j rotates a two-window layout between horizontal and vertical splits.

17.8 Why no leader-key framework?

The article "generalel to conquer Emacs keybindings" makes a persuasive case for adopting generalel as a unified keybinding layer. Jotain considered and rejected the migration: general.el’s primary differentiator is :states for evil-mode integration, which Jotain does not use, and Emacs 30’s keymap-set plus built-in which-key plus use-package :bind already cover the article’s discoverability and leader-key ergonomics without an extra dependency. The spirit of the article — memorable, categorised, self-documenting prefixes — is realised here through the which-key-add-key-based-replacements table in init-keys.el. See Inspiration & Resources for the full rationale.