Jotain follows Emacs conventions: only global rebindings live in lisp/init-keys.el; 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 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

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.

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

Disabled by default

Key Reason
C-z Accidentally suspending Emacs from a GUI frame is never what you want
C-x C-z Same

Mode-local overrides

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.

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:

Key Action
C-h Searchable completing-read of every applicable action — the discovery entry point
E embark-export — promote the candidate set to a buffer (grep for ripgrep/grep, occur for consult-line, dired for files, ibuffer for buffers)
A embark-act-all — run one action on every current candidate
B embark-become — re-run the input you typed through a different command
i Insert the candidate into the buffer you came from
w Copy the candidate to the kill-ring

Two habits worth forming:

  • Search → edit. consult-ripgrep → C-. E exports to a grep buffer, then C-x C-q (wgrep) makes it editable so you can rewrite every match in place and save across all files at once.
  • Keep the session alive. Acting on a candidate exits the minibuffer by default; call it with a prefix (C-u C-.) to stay in the minibuffer for successive actions — handy for deleting or renaming several files in a row.

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.

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.

Why no leader-key framework?

The article "general.el to conquer Emacs keybindings" makes a persuasive case for adopting general.el 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.

C-x C-f /docs/ · manual · man · info · ☾ theme