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.
C-c — user namespaceC-x — control namespaceC-c — user namespace ¶Reserved by Emacs convention for user bindings. Jotain claims the following:
| Key | Label | Command |
|---|---|---|
C-c a | org-agenda | org-agenda |
C-c c | org-capture | org-capture |
C-c d | dirvish | dirvish |
C-c D | dirvish-side | dirvish-side |
C-c e | eca | eca |
C-c g | magit-file | magit-file-dispatch |
C-c h | consult-history | consult-history |
C-c i | consult-info | consult-info |
C-c j | jujutsu | majutsu-log |
C-c M-j | jujutsu-dispatch | majutsu-dispatch |
C-c k | consult-kmacro | consult-kmacro |
C-c l | org-store-link | org-store-link |
C-c m | — | consult-man |
C-c n | org-roam prefix | n f find, n i insert, n c capture |
C-c o | combobulate prefix | structural editing dispatch |
C-c q | claude-code-ide | claude-code-ide-menu |
C-c r | eglot-refactor prefix | r r rename, r f format, r a actions, r o organize-imports, r q quickfix |
C-c s | gptel-send | gptel-send |
C-c S | gptel-menu | gptel-menu |
C-c t | toggle-theme | auto-dark-toggle-appearance |
C-c v | devenv | devenv transient — tasks, scripts, processes, env |
C-c M-x | consult-mode-command | consult-mode-command |
C-x — control namespace ¶Built-in Emacs prefix extended with a handful of Jotain additions:
| Key | Label | Command |
|---|---|---|
C-x C-a | dape (debug) prefix | dape-global-map — Debug Adapter Protocol: start, step, breakpoints, REPL |
C-x b | — | consult-buffer |
C-x g | magit-status | magit-status |
C-x G | git-status-file | jotain-switch-git-status-buffer |
C-x M-g | magit-dispatch | magit-dispatch |
C-x j | rotate-window-split | jotain-toggle-window-split |
C-x J | jj-status-file | jotain-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 u | vundo | vundo |
C-x 1 | — | jotain-nav-toggle-delete-other-windows |
C-x P | project (projection) prefix | projection-map — multi-language project commands |
Single-keystroke globals that don’t fit a C-c / C-x namespace — window switching, spell-check, region growth, and multi-cursor.
| Key | Command |
|---|---|
M-o | other-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-c | mc/mark-all-like-this |
C-h . | helpful-at-point (via [remap display-local-help]) |
C-. | embark-act |
C-; | embark-dwim |
C-h B | embark-bindings |
| Key | Reason |
|---|---|
C-z | Accidentally suspending Emacs from a GUI frame is never what you want |
C-x C-z | Same |
A few major modes rebind C-c leaves locally:
dired-mode: C-c C-e → wdired-change-to-wdired-mode (toggle writable dired)
sops-mode: C-c C-c save, C-c C-k cancel, C-c C-d edit
embark exports: C-c C-o → embark-export
org-mode: C-c b is an Org Babel notebook prefix — b run buffer, e run subtree, r restart session and run buffer, s switch to session, k clear results, t tangle. Single blocks stay on C-c C-c, and Org’s own C-c C-v babel map is untouched. See Notebooks with Org Babel.
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.