Skip to main content
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:

C-x — control namespace

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

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.

Disabled by default

Mode-local overrides

A few major modes rebind C-c leaves locally:
  • dired-mode: C-c C-ewdired-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-oembark-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: Two habits worth forming:
  • Search → edit. consult-ripgrepC-. 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.
Last modified on August 23, 2026