> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jylhis.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Keybindings

> The Jotain keybinding namespace, organised by prefix

Jotain follows Emacs conventions: only **global** rebindings live in
[`lisp/init-keys.el`](https://github.com/Jylhis/jotain/blob/main/lisp/init-keys.el);
per-package bindings stay colocated with the package's `use-package` block.
[`which-key`](https://github.com/justbur/emacs-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 g`     | magit-file                | `magit-file-dispatch`                                                             |
| `C-c h`     | consult-history           | `consult-history`                                                                 |
| `C-c i`     | consult-info              | `consult-info`                                                                    |
| `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 r`     | **eglot-refactor** prefix | `r r` rename, `r f` format, `r a` actions, `r o` organize-imports, `r q` quickfix |
| `C-c t`     | toggle-theme              | `auto-dark-toggle-appearance`                                                     |
| `C-c v`     | devenv                    | `devenv` transient — tasks, scripts, processes, env                               |
| `C-c RET`   | gptel-send                | `gptel-send`                                                                      |
| `C-c M-RET` | gptel-menu                | `gptel-menu`                                                                      |
| `C-c M-x`   | consult-mode-command      | `consult-mode-command`                                                            |
| `C-c C-'`   | claude-code-ide           | `claude-code-ide-menu`                                                            |
| `C-c C-<`   | —                         | `mc/mark-all-like-this`                                                           |

## `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 M-g` | magit-dispatch                  | `magit-dispatch`                                                           |
| `C-x j`   | rotate-window-split             | `jotain-toggle-window-split`                                               |
| `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` |

## 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)
* `helpful-mode`: `C-c C-d` → `helpful-at-point`
* `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`

## 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"](https://bicycleforyourmind.com/generaldotel-to-conquer-emacs-keybindings)
makes a persuasive case for adopting [`general.el`](https://github.com/noctuid/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](/inspiration) for the full rationale.
