>_HEADLINE
The keybinding subset of the port report. Counts only the key-press surface — vim/neovim normal/visual/insert/cmdline keys, the GNU Emacs Key Index, and the Spacemacs SPC tree. ported = the same key does the equivalent thing in zmax.
3113
Cited Keybindings
3050
Ported (98.0%)
59
Partial (1.9%)
4
Absent
~BY SOURCE
Key-press coverage per upstream editor.
| Source | Keybindings | Ported | Partial | Progress |
|---|---|---|---|---|
| emacs | 1127 | 1083 | 40 | |
| jetbrains | 218 | 218 | 0 | |
| neovim | 715 | 698 | 17 | |
| spacemacs | 1053 | 1051 | 2 |
~BY SOURCE / CATEGORY
Broken down by the key mode / index each binding belongs to.
| Source | Category | Keybindings | Ported | Partial | Progress |
|---|---|---|---|---|---|
| emacs | keybinding | 1127 | 1083 | 40 | |
| jetbrains | caret-navigation | 18 | 18 | 0 | |
| jetbrains | code-analysis | 4 | 4 | 0 | |
| jetbrains | code-folding | 8 | 8 | 0 | |
| jetbrains | coding-assistance | 21 | 21 | 0 | |
| jetbrains | diff | 7 | 7 | 0 | |
| jetbrains | editing | 25 | 25 | 0 | |
| jetbrains | multiple-carets | 7 | 7 | 0 | |
| jetbrains | navigate-from-symbol | 10 | 10 | 0 | |
| jetbrains | navigation | 21 | 21 | 0 | |
| jetbrains | refactoring | 13 | 13 | 0 | |
| jetbrains | run-debug | 21 | 21 | 0 | |
| jetbrains | search | 12 | 12 | 0 | |
| jetbrains | selection | 3 | 3 | 0 | |
| jetbrains | tool-windows | 12 | 12 | 0 | |
| jetbrains | vcs | 16 | 16 | 0 | |
| jetbrains | view | 5 | 5 | 0 | |
| jetbrains | window | 15 | 15 | 0 | |
| neovim | cmdline-editing | 53 | 51 | 2 | |
| neovim | insert-mode | 98 | 95 | 3 | |
| neovim | normal-mode | 479 | 469 | 10 | |
| neovim | visual-mode | 85 | 83 | 2 | |
| spacemacs | emacs-prefix | 271 | 269 | 2 | |
| spacemacs | keybinding | 782 | 782 | 0 |
Emacs is 0% because zmax is a modal (vim) editor — Emacs default chords (C-x C-f, …) are intentionally not bound; the commands they invoke are tracked under the port report's emacs command category.
~KEYBINDING DETAIL
Every cited key, grouped by source and category; ported and partial first.
emacs / keybinding (1127 keys · 1083 ported · 40 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| ! (Dired) | Shell Commands in Dired | key:dired:! | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Commands-in-Dired.html#index-_0021-_0028Dired_0029 |
| " (TeX mode) | TeX Editing | tex-insert-quote (Insert; Normal keeps vim's register prefix) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/TeX-Editing.html#index-_0022-_0028TeX-mode_0029 |
| # (Dired) | Flagging Many Files | key:dired:# | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Flagging-Many-Files.html#index-_0023-_0028Dired_0029 |
| # (Kmacro Menu) | Kmacro Menu | # edits the ring position of the macro at point | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Kmacro-Menu.html#index-_0023-_0028Kmacro-Menu_0029 |
| $ (Dired) | Hiding Subdirectories | $ hides the subdir at point (dired-hide-subdir) — same key | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hiding-Subdirectories.html#index-_0024-_0028Dired_0029 |
| % & (Dired) | Flagging Many Files | % & flags the garbage files (build + TeX droppings). Real two-key chord: `%` arms a prefix (ui/dired.rs Prefix::Pct) and the next key runs it; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Flagging-Many-Files.html#index-_0025-_0026-_0028Dired_0029 |
| % (Buffer Menu) | Several Buffers | % = Buffer-menu-toggle-read-only: toggle the buffer's read-only flag | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-_0025-_0028Buffer-Menu_0029 |
| % C (Dired) | Transforming File Names | % C copies each target through a regexp -> replacement. Real two-key chord: `%` arms a prefix (ui/dired.rs Prefix::Pct) and the next key runs it; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Transforming-File-Names.html#index-_0025-C-_0028Dired_0029 |
| % H (Dired) | Transforming File Names | % H hardlinks each target through a regexp -> replacement. Real two-key chord: `%` arms a prefix (ui/dired.rs Prefix::Pct) and the next key runs it; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Transforming-File-Names.html#index-_0025-H-_0028Dired_0029 |
| % R (Dired) | Transforming File Names | % R renames each target through a regexp -> replacement. Real two-key chord: `%` arms a prefix (ui/dired.rs Prefix::Pct) and the next key runs it; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Transforming-File-Names.html#index-_0025-R-_0028Dired_0029 |
| % S (Dired) | Transforming File Names | % S symlinks each target through a regexp -> replacement. Real two-key chord: `%` arms a prefix (ui/dired.rs Prefix::Pct) and the next key runs it; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Transforming-File-Names.html#index-_0025-S-_0028Dired_0029 |
| % Y (Dired) | Transforming File Names | % Y relsymlinks each target through a regexp -> replacement. Real two-key chord: `%` arms a prefix (ui/dired.rs Prefix::Pct) and the next key runs it; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Transforming-File-Names.html#index-_0025-Y-_0028Dired_0029 |
| % d (Dired) | Flagging Many Files | % d flags for deletion by name regexp. Real two-key chord: `%` arms a prefix (ui/dired.rs Prefix::Pct) and the next key runs it; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Flagging-Many-Files.html#index-_0025-d-_0028Dired_0029 |
| % g (Dired) | Marks vs Flags | % g marks files whose CONTENTS match a regexp. Real two-key chord: `%` arms a prefix (ui/dired.rs Prefix::Pct) and the next key runs it; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-_0025-g-_0028Dired_0029 |
| % l (Dired) | Transforming File Names | % l downcases the names on disk. Real two-key chord: `%` arms a prefix (ui/dired.rs Prefix::Pct) and the next key runs it; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Transforming-File-Names.html#index-_0025-l-_0028Dired_0029 |
| % m (Dired) | Marks vs Flags | % m marks by name regexp. Real two-key chord: `%` arms a prefix (ui/dired.rs Prefix::Pct) and the next key runs it; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-_0025-m-_0028Dired_0029 |
| % u (Dired) | Transforming File Names | % u upcases the names on disk. Real two-key chord: `%` arms a prefix (ui/dired.rs Prefix::Pct) and the next key runs it; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Transforming-File-Names.html#index-_0025-u-_0028Dired_0029 |
| ( (Dired) | Misc Dired Features | ( toggles hide-details (dired-hide-details-mode) — same key | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Dired-Features.html#index-_0028-_0028Dired_0029 |
| ( (Package Menu) | Package Menu | ( package-menu-toggle-hiding: show the hidden packages again (package_menu.rs:308). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-_0028-_0028Package-Menu_0029 |
| * ! (Dired) | Marks vs Flags | * ! drops every mark (dired-unmark-all-marks). Real two-key chord: `*` arms a prefix (ui/dired.rs Prefix::Star); the parser can only express the prefix key. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-_002a-_0021-_0028Dired_0029 |
| * % (Dired) | Marks vs Flags | * % marks by name regexp. Real two-key chord: `*` arms a prefix (ui/dired.rs Prefix::Star); the parser can only express the prefix key. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-_002a-_0025-_0028Dired_0029 |
| * * (Dired) | Marks vs Flags | * * marks the executables. Real two-key chord: `*` arms a prefix (ui/dired.rs Prefix::Star); the parser can only express the prefix key. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-_002a-_002a-_0028Dired_0029 |
| * / (Dired) | Marks vs Flags | * / marks the directories. Real two-key chord: `*` arms a prefix (ui/dired.rs Prefix::Star); the parser can only express the prefix key. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-_002a-_002f-_0028Dired_0029 |
| * ? (Dired) | Marks vs Flags | * ? reads a mark character and removes that mark everywhere (RET = all). Real two-key chord: `*` arms a prefix (ui/dired.rs Prefix::Star); the parser can only express the prefix key. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-_002a-_003f-_0028Dired_0029 |
| * @ (Dired) | Marks vs Flags | * @ marks the symlinks. Real two-key chord: `*` arms a prefix (ui/dired.rs Prefix::Star); the parser can only express the prefix key. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-_002a-_0040-_0028Dired_0029 |
| * C-n (Dired) | Marks vs Flags | * C-n moves to the next marked file. Real two-key chord: `*` arms a prefix (ui/dired.rs Prefix::Star); the parser can only express the prefix key. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-_002a-C_002dn-_0028Dired_0029 |
| * C-p (Dired) | Marks vs Flags | * C-p moves to the previous marked file. Real two-key chord: `*` arms a prefix (ui/dired.rs Prefix::Star); the parser can only express the prefix key. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-_002a-C_002dp-_0028Dired_0029 |
| * DEL (Dired) | Marks vs Flags | * DEL moves up and unmarks. Real two-key chord: `*` arms a prefix (ui/dired.rs Prefix::Star); the parser can only express the prefix key. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-_002a-DEL-_0028Dired_0029 |
| * N (Dired) | Marks vs Flags | * N echoes the count and total size of the marked files. Real two-key chord: `*` arms a prefix (ui/dired.rs Prefix::Star); the parser can only express the prefix key. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-_002a-N-_0028Dired_0029 |
| * c (Dired) | Marks vs Flags | * c changes one mark character into another. Real two-key chord: `*` arms a prefix (ui/dired.rs Prefix::Star); the parser can only express the prefix key. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-_002a-c-_0028Dired_0029 |
| * m (Dired) | Marks vs Flags | * m marks the file at point and advances. Real two-key chord: `*` arms a prefix (ui/dired.rs Prefix::Star); the parser can only express the prefix key. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-_002a-m-_0028Dired_0029 |
| * s (Dired) | Marks vs Flags | * s marks every file in this subdirectory. Real two-key chord: `*` arms a prefix (ui/dired.rs Prefix::Star); the parser can only express the prefix key. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-_002a-s-_0028Dired_0029 |
| * t (Dired) | Marks vs Flags | * t toggles every mark. Real two-key chord: `*` arms a prefix (ui/dired.rs Prefix::Star); the parser can only express the prefix key. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-_002a-t-_0028Dired_0029 |
| * u (Dired) | Marks vs Flags | * u unmarks the file at point and advances. Real two-key chord: `*` arms a prefix (ui/dired.rs Prefix::Star); the parser can only express the prefix key. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-_002a-u-_0028Dired_0029 |
| + (Dired) | Misc Dired Features | key:dired:+ | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Dired-Features.html#index-_002b-_0028Dired_0029 |
| + (DocView mode) | DocView Navigation | + doc-view-enlarge (+25 dpi, clamped 25..600). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/DocView-Navigation.html#index-_002b-_0028DocView-mode_0029 |
| - (DocView mode) | DocView Navigation | - doc-view-shrink (-25 dpi, clamped 25..600). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/DocView-Navigation.html#index-_002d-_0028DocView-mode_0029 |
| . (Calendar mode) | Specified Dates | emacs Calendar . -> zmax Calendar mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Specified-Dates.html#index-_002e-_0028Calendar-mode_0029 |
| . (Dired) | Flagging Many Files | `.` flags the excess numbered backups (dired-clean-directory); the old `,` alias stays bound | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Flagging-Many-Files.html#index-_002e-_0028Dired_0029 |
| . (Rmail) | Rmail Scrolling | Rmail . | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Scrolling.html#index-_002e-_0028Rmail_0029 |
| / (Rmail) | Rmail Scrolling | Rmail / | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Scrolling.html#index-_002f-_0028Rmail_0029 |
| / / (Package Menu) | Package Menu | / / package-menu-clear-filter: drop every filter (package_menu.rs:191). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-_002f-_002f-_0028Package-Menu_0029 |
| / N (Package Menu) | Package Menu | / N package-menu-filter-by-name-or-description (package_menu.rs:174). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-_002f-N-_0028Package-Menu_0029 |
| / a (Package Menu) | Package Menu | / a package-menu-filter-by-archive (package_menu.rs:177). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-_002f-a-_0028Package-Menu_0029 |
| / d (Package Menu) | Package Menu | / d package-menu-filter-by-description (package_menu.rs:173). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-_002f-d-_0028Package-Menu_0029 |
| / k (Package Menu) | Package Menu | / k package-menu-filter-by-keyword (package_menu.rs:175). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-_002f-k-_0028Package-Menu_0029 |
| / m (Package Menu) | Package Menu | / m package-menu-filter-marked: show only marked packages (package_menu.rs:181). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-_002f-m-_0028Package-Menu_0029 |
| / n (Package Menu) | Package Menu | / n package-menu-filter-by-name (dispatch_filter_key, package_menu.rs:172). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-_002f-n-_0028Package-Menu_0029 |
| / s (Package Menu) | Package Menu | / s package-menu-filter-by-status (package_menu.rs:176). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-_002f-s-_0028Package-Menu_0029 |
| / u (Package Menu) | Package Menu | / u package-menu-filter-upgradable: show only upgradable packages (package_menu.rs:186). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-_002f-u-_0028Package-Menu_0029 |
| / v (Package Menu) | Package Menu | / v package-menu-filter-by-version (package_menu.rs:178). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-_002f-v-_0028Package-Menu_0029 |
| 1 (Buffer Menu) | Several Buffers | 1 = Buffer-menu-1-window: select buffer filling the frame (Replace) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-1-_0028Buffer-Menu_0029 |
| 2 (Buffer Menu) | Several Buffers | 2 selects this line's buffer AND puts the buffer that was current before the menu opened in the other window (Buffer-menu-2-window), with point in this line's buffer. It used to be a plain other-window split. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-2-_0028Buffer-Menu_0029 |
| :d (Dired) | Operating on Files | :d gpg-decrypts the targets. Real two-key chord: `:` arms a prefix (ui/dired.rs Prefix::Epa); the parser can only express the prefix key. The M-e/M-k/M-z/M-v aliases stay bound. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-_003ad-_0028Dired_0029 |
| :e (Dired) | Operating on Files | :e gpg-encrypts the targets to a prompted recipient. Real two-key chord: `:` arms a prefix (ui/dired.rs Prefix::Epa); the parser can only express the prefix key. The M-e/M-k/M-z/M-v aliases stay bound. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-_003ae-_0028Dired_0029 |
| :s (Dired) | Operating on Files | :s gpg-signs the targets (detached). Real two-key chord: `:` arms a prefix (ui/dired.rs Prefix::Epa); the parser can only express the prefix key. The M-e/M-k/M-z/M-v aliases stay bound. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-_003as-_0028Dired_0029 |
| :v (Dired) | Operating on Files | :v gpg-verifies the targets. Real two-key chord: `:` arms a prefix (ui/dired.rs Prefix::Epa); the parser can only express the prefix key. The M-e/M-k/M-z/M-v aliases stay bound. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-_003av-_0028Dired_0029 |
| < (Calendar mode) | Scroll Calendar | calendar-scroll-right: `<` moves back one month | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Scroll-Calendar.html#index-_003c-_0028Calendar-mode_0029 |
| < (Dired) | Subdirectory Motion | key:dired:< | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Subdirectory-Motion.html#index-_003c-_0028Dired_0029 |
| < (Rmail) | Rmail Motion | Rmail < | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Motion.html#index-_003c-_0028Rmail_0029 |
| = (Dired) | Comparison in Dired | key:dired:= | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Comparison-in-Dired.html#index-_003d-_0028Dired_0029 |
| > (Calendar mode) | Scroll Calendar | calendar-scroll-left: `>` moves forward one month | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Scroll-Calendar.html#index-_003e-_0028Calendar-mode_0029 |
| > (Dired) | Subdirectory Motion | key:dired:> | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Subdirectory-Motion.html#index-_003e-_0028Dired_0029 |
| > (Rmail) | Rmail Motion | Rmail > | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Motion.html#index-_003e-_0028Rmail_0029 |
| ? (Package Menu) | Package Menu | ? package-menu-quick-help: the quick help (package_menu.rs:321). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-_003f-_0028Package-Menu_0029 |
| ? (completion) | Completion Commands | `?` in a completing read (any prompt that is not the `:` line, a search or the `=` expression line — Prompt::is_completing_read) recomputes and shows the candidate list, and says `No completions` when there are none | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Completion-Commands.html#index-_003f-_0028completion_0029 |
| A (Dired) | Operating on Files | A greps the targets for a regexp (dired-do-find-regexp) and shows the hits | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-A-_0028Dired_0029 |
| A k (Gnus Group mode) | Gnus Group Buffer | A k under the group buffer's A prefix lists the killed groups; the arm is in zmax-term/src/ui/gnus.rs and runs the cited command. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Group-Buffer.html#index-A-k-_0028Gnus-Group-mode_0029 |
| A s (Gnus Group mode) | Gnus Group Buffer | A is a prefix in the group buffer (pending_a in zmax-term/src/ui/gnus.rs); A s selects the subscribed-with-unread listing, the same as l. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Group-Buffer.html#index-A-s-_0028Gnus-Group-mode_0029 |
| A u (Gnus Group mode) | Gnus Group Buffer | A u under the group buffer's A prefix selects the all-groups listing, the same as L. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Group-Buffer.html#index-A-u-_0028Gnus-Group-mode_0029 |
| A z (Gnus Group mode) | Gnus Group Buffer | A z under the group buffer's A prefix lists the zombie groups; the arm is in zmax-term/src/ui/gnus.rs and runs the cited command. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Group-Buffer.html#index-A-z-_0028Gnus-Group-mode_0029 |
| BS (MS-DOS) | MS-DOS Keyboard | Backspace deletes the char before point (emacs.rs:130). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/MS_002dDOS-Keyboard.html#index-BS-_0028MS_002dDOS_0029 |
| C (Dired) | Operating on Files | key:dired:C | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-C-_0028Dired_0029 |
| C-/ | Undo | C-/ | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Undo.html#index-C_002d_002f |
| C-0, tab bar | Tab Bars | C-0 switches to the most recently visited tab (tab-recent); pressing it again returns, so it toggles between the two | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002d0_002c-tab-bar |
| C-1, tab bar | Tab Bars | C-1 through C-8 select that numbered tab (`:tab-switch N`) in the emacs keymap preset. Control is the modifier the digits ship on because emacs's M-<digit> is digit-argument, which zmax reads in EditorView::handle_prefix_key | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002d1_002c-tab-bar |
| C-9, tab bar | Tab Bars | C-9 selects the last tab (tab-last), as tab-bar.el binds the 9 key rather than the ninth tab | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002d9_002c-tab-bar |
| C-@ | Setting Mark | set-mark-command | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Setting-Mark.html#index-C_002d_0040 |
| C-END | Moving Point | end-of-buffer -> goto_last_line | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-C_002dEND |
| C-LEFT | Moving Point | left-word -> move_prev_word_start | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-C_002dLEFT |
| C-M-% | Query Replace | query-replace-regexp: prompts for the regexp and the replacement, asking at every match (was isearch_query_replace_regexp) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Query-Replace.html#index-C_002dM_002d_0025 |
| C-M-% (Incremental search) | Special Isearch | C-M-% in isearch -> isearch_query_replace_regexp | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Isearch.html#index-C_002dM_002d_0025-_0028Incremental-search_0029 |
| C-M-, | Looking Up Identifiers | C-M-, xref-go-forward -> jump_forward | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Looking-Up-Identifiers.html#index-C_002dM_002d_002c |
| C-M-. | Looking Up Identifiers | xref-find-apropos -> workspace_symbol_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Looking-Up-Identifiers.html#index-C_002dM_002d_002e |
| C-M-/ | Dynamic Abbrevs | dabbrev-completion -> dabbrev_completion (rebound from the generic `completion` popup) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dynamic-Abbrevs.html#index-C_002dM_002d_002f |
| C-M-@ | Marking Objects | mark-sexp | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marking-Objects.html#index-C_002dM_002d_0040 |
| C-M-S-l | Other Window | recenter-other-window | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Other-Window.html#index-C_002dM_002dS_002dl |
| C-M-S-v | Other Window | scroll-other-window-down | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Other-Window.html#index-C_002dM_002dS_002dv |
| C-M-SPC | Expressions | mark-sexp | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Expressions.html#index-C_002dM_002dSPC |
| C-M-\ | Indentation Commands | indent-region -> indent | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Indentation-Commands.html#index-C_002dM_002d_005c |
| C-M-a | Moving by Defuns | beginning-of-defun | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-by-Defuns.html#index-C_002dM_002da |
| C-M-b | Expressions | backward-sexp | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Expressions.html#index-C_002dM_002db |
| C-M-c | Recursive Edit | C-M-c leaves the innermost recursive editing level; with a kbd-macro-query C-r level it resumes by asking the query again | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Recursive-Edit.html#index-C_002dM_002dc |
| C-M-d | Moving by Parens | down-list | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-by-Parens.html#index-C_002dM_002dd |
| C-M-d (Dired) | Subdirectory Motion | C-M-d moves down the subdirectory tree. The real C-M- key is bound (a raw KeyEvent match on CONTROL|ALT in ui/dired.rs, since the ctrl!/alt! macros cannot express the pair); the cited chord is the M- alias, which the parser can see. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Subdirectory-Motion.html#index-C_002dM_002dd-_0028Dired_0029 |
| C-M-d (Incremental search) | Isearch Yank | C-M-d isearch-del-char: drops the last char of the search string. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Isearch-Yank.html#index-C_002dM_002dd-_0028Incremental-search_0029 |
| C-M-e | Moving by Defuns | end-of-defun | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-by-Defuns.html#index-C_002dM_002de |
| C-M-f | Expressions | forward-sexp | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Expressions.html#index-C_002dM_002df |
| C-M-f (Rmail) | Rmail Make Summary | C-M-f summarizes by sender (rmail-summary-by-senders). The real C-M- key is bound (a raw CONTROL|ALT KeyEvent match in ui/rmail.rs, which the ctrl!/alt! macros cannot express); the cited chord is the single-key alias, which the parser can see. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Make-Summary.html#index-C_002dM_002df-_0028Rmail_0029 |
| C-M-h | Moving by Defuns | mark-defun | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-by-Defuns.html#index-C_002dM_002dh |
| C-M-h (C mode) | Moving by Defuns | c-mark-function | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-by-Defuns.html#index-C_002dM_002dh-_0028C-mode_0029 |
| C-M-i | Symbol Completion | completion-at-point -> completion popup | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Symbol-Completion.html#index-C_002dM_002di |
| C-M-i (customization buffer) | Changing a Variable | C-M-i is the other encoding of the same key and is matched as a raw CONTROL|ALT 'i' KeyEvent in ui/settings.rs, so it runs widget-complete exactly like M-TAB. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Changing-a-Variable.html#index-C_002dM_002di-_0028customization-buffer_0029 |
| C-M-j | Multi-Line Comments | default-indent-new-line | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Multi_002dLine-Comments.html#index-C_002dM_002dj |
| C-M-j (Fortran mode) | ForIndent Commands | fortran-split-line | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/ForIndent-Commands.html#index-C_002dM_002dj-_0028Fortran-mode_0029 |
| C-M-k | Expressions | kill-sexp | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Expressions.html#index-C_002dM_002dk |
| C-M-l | Recentering | C-M-l reposition-window | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Recentering.html#index-C_002dM_002dl |
| C-M-l (Rmail) | Rmail Make Summary | C-M-l summarizes by label (rmail-summary-by-labels). The real C-M- key is bound (a raw CONTROL|ALT KeyEvent match in ui/rmail.rs, which the ctrl!/alt! macros cannot express); the cited chord is the single-key alias, which the parser can see. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Make-Summary.html#index-C_002dM_002dl-_0028Rmail_0029 |
| C-M-l (Shell mode) | Shell Mode | C-M-l scrolls the last output to the top (comint-show-output), the same command C-c C-r runs. The real C-M-l key is bound (a raw CONTROL|ALT KeyEvent match in ui/comint.rs, which the ctrl!/alt! macros cannot express), so the cited chord is the C-c prefix that also reaches it. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Mode.html#index-C_002dM_002dl-_0028Shell-mode_0029 |
| C-M-n | Moving by Parens | forward-list | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-by-Parens.html#index-C_002dM_002dn |
| C-M-n (Dired) | Subdirectory Motion | C-M-n moves to the next inserted subdirectory. The real C-M- key is bound (a raw KeyEvent match on CONTROL|ALT in ui/dired.rs, since the ctrl!/alt! macros cannot express the pair); the cited chord is the M- alias, which the parser can see. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Subdirectory-Motion.html#index-C_002dM_002dn-_0028Dired_0029 |
| C-M-n (Fortran mode) | Fortran Motion | fortran-end-of-block | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Fortran-Motion.html#index-C_002dM_002dn-_0028Fortran-mode_0029 |
| C-M-n (Rmail) | Rmail Labels | C-M-n moves to the next message carrying a prompted label. The real C-M- key is bound (a raw CONTROL|ALT KeyEvent match in ui/rmail.rs, which the ctrl!/alt! macros cannot express); the cited chord is the single-key alias, which the parser can see. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Labels.html#index-C_002dM_002dn-_0028Rmail_0029 |
| C-M-o | Indentation Commands | split-line | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Indentation-Commands.html#index-C_002dM_002do |
| C-M-p | Moving by Parens | backward-list | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-by-Parens.html#index-C_002dM_002dp |
| C-M-p (Dired) | Subdirectory Motion | C-M-p moves to the previous inserted subdirectory. The real C-M- key is bound (a raw KeyEvent match on CONTROL|ALT in ui/dired.rs, since the ctrl!/alt! macros cannot express the pair); the cited chord is the M- alias, which the parser can see. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Subdirectory-Motion.html#index-C_002dM_002dp-_0028Dired_0029 |
| C-M-p (Fortran mode) | Fortran Motion | fortran-beginning-of-block | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Fortran-Motion.html#index-C_002dM_002dp-_0028Fortran-mode_0029 |
| C-M-p (Rmail) | Rmail Labels | C-M-p moves to the previous message carrying a prompted label. The real C-M- key is bound (a raw CONTROL|ALT KeyEvent match in ui/rmail.rs, which the ctrl!/alt! macros cannot express); the cited chord is the single-key alias, which the parser can see. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Labels.html#index-C_002dM_002dp-_0028Rmail_0029 |
| C-M-q | Multi-line Indent | indent-sexp -> prog_indent_sexp | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Multi_002dline-Indent.html#index-C_002dM_002dq |
| C-M-q (C mode) | C Indent | c-indent-exp | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/C-Indent.html#index-C_002dM_002dq-_0028C-mode_0029 |
| C-M-q (Fortran mode) | ForIndent Commands | fortran-indent-subprogram | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/ForIndent-Commands.html#index-C_002dM_002dq-_0028Fortran-mode_0029 |
| C-M-r | Regexp Search | isearch-backward-regexp -> rsearch (regex reverse search) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Regexp-Search.html#index-C_002dM_002dr |
| C-M-r (Rmail) | Rmail Make Summary | C-M-r summarizes by recipient (rmail-summary-by-recipients). The real C-M- key is bound (a raw CONTROL|ALT KeyEvent match in ui/rmail.rs, which the ctrl!/alt! macros cannot express); the cited chord is the single-key alias, which the parser can see. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Make-Summary.html#index-C_002dM_002dr-_0028Rmail_0029 |
| C-M-s | Regexp Search | isearch-forward-regexp -> search (regex search) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Regexp-Search.html#index-C_002dM_002ds |
| C-M-s (Rmail) | Rmail Make Summary | C-M-s summarizes by regexp (rmail-summary-by-regexp). The real C-M- key is bound (a raw CONTROL|ALT KeyEvent match in ui/rmail.rs, which the ctrl!/alt! macros cannot express); the cited chord is the single-key alias, which the parser can see. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Make-Summary.html#index-C_002dM_002ds-_0028Rmail_0029 |
| C-M-t | Expressions | transpose-sexps | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Expressions.html#index-C_002dM_002dt |
| C-M-t (Rmail) | Rmail Make Summary | C-M-t summarizes by subject/topic (rmail-summary-by-topic). The real C-M- key is bound (a raw CONTROL|ALT KeyEvent match in ui/rmail.rs, which the ctrl!/alt! macros cannot express); the cited chord is the single-key alias, which the parser can see. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Make-Summary.html#index-C_002dM_002dt-_0028Rmail_0029 |
| C-M-u | Moving by Parens | backward-up-list | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-by-Parens.html#index-C_002dM_002du |
| C-M-u (Dired) | Subdirectory Motion | C-M-u moves up the subdirectory tree. The real C-M- key is bound (a raw KeyEvent match on CONTROL|ALT in ui/dired.rs, since the ctrl!/alt! macros cannot express the pair); the cited chord is the M- alias, which the parser can see. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Subdirectory-Motion.html#index-C_002dM_002du-_0028Dired_0029 |
| C-M-v | Other Window | scroll-other-window | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Other-Window.html#index-C_002dM_002dv |
| C-M-w | Appending Kills | append-next-kill | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Appending-Kills.html#index-C_002dM_002dw |
| C-M-w (Incremental search) | Isearch Yank | C-M-w isearch-yank-symbol-or-char: extends the search with the next word/symbol (prompt.rs isearch_yank IsearchYank::WordOrChar). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Isearch-Yank.html#index-C_002dM_002dw-_0028Incremental-search_0029 |
| C-M-wheel-down | Text Scale | control+meta with the wheel down runs global-text-scale-adjust in the shrinking direction | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dM_002dwheel_002ddown |
| C-M-wheel-up | Text Scale | control+meta with the wheel runs global-text-scale-adjust with the wheel supplying its increment; wheel-up is the enlarging direction, matching mouse-wheel-scroll-amount's control-meta entry | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dM_002dwheel_002dup |
| C-M-x (Emacs Lisp mode) | Lisp Eval | eval-defun | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Lisp-Eval.html#index-C_002dM_002dx-_0028Emacs-Lisp-mode_0029 |
| C-M-x (Lisp mode) | External Lisp | C-M-x: lisp-eval-defun sends the top-level form at point to the inferior Lisp (run-lisp) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/External-Lisp.html#index-C_002dM_002dx-_0028Lisp-mode_0029 |
| C-M-x (Scheme mode) | External Lisp | C-M-x: lisp-eval-defun sends the top-level form at point to the inferior Lisp (run-lisp) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/External-Lisp.html#index-C_002dM_002dx-_0028Scheme-mode_0029 |
| C-M-y (Incremental search) | Isearch Yank | C-M-y isearch-yank-char: extends the search with the next buffer char (prompt.rs isearch_yank IsearchYank::Char). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Isearch-Yank.html#index-C_002dM_002dy-_0028Incremental-search_0029 |
| C-M-z (Incremental search) | Isearch Yank | C-M-z isearch-yank-until-char: reads a char and extends the search up to it (next_char_handler). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Isearch-Yank.html#index-C_002dM_002dz-_0028Incremental-search_0029 |
| C-RIGHT | Moving Point | right-word -> move_next_word_start | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-C_002dRIGHT |
| C-S-backspace | Killing by Lines | kill-whole-line | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Killing-by-Lines.html#index-C_002dS_002dbackspace |
| C-S-mouse-3 (FFAP) | FFAP | C-S-mouse-3 runs ffap_menu with the click position, which pops a menu of every file/URL mentioned in the buffer (ordered by position, deduplicated) at the pointer; choosing one sets the mark, jumps to that occurrence and visits it. Run from a key the same command offers the list as a picker. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/FFAP.html#index-C_002dS_002dmouse_002d3-_0028FFAP_0029 |
| C-SPC | Setting Mark | C-SPC | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Setting-Mark.html#index-C_002dSPC |
| C-SPC C-SPC | Mark Ring | the first C-SPC pushes point onto the mark ring (emacs_mark::push) and activates it, the second — recognised by set_mark_command as a repeat at the same point in the same buffer — deactivates it, so the pair leaves the mark on the ring without an active region, which is what the Mark Ring node documents | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Mark-Ring.html#index-C_002dSPC-C_002dSPC |
| C-SPC C-SPC, enabling Transient Mark mode temporarily | Disabled Transient Mark | a second C-SPC on the spot where the first one landed activates the mark and sets the temporary transient-mark flag, so the region is shaded for this one region even with transient-mark-mode off; pressing it again with the region already active deactivates the mark instead, and the temporary flag is cleared by deactivate-mark | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Disabled-Transient-Mark.html#index-C_002dSPC-C_002dSPC_002c-enabling-Transient-Mark-mode-temporarily |
| C-TAB | File Name Cache | C-TAB in the minibuffer runs file-cache-minibuffer-complete on the line being typed: it completes the file name from the file-name cache and, repeated, cycles through the directories that name was cached in. Reports [No match] for an uncached name and says so when the cache is empty | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/File-Name-Cache.html#index-C_002dTAB |
| C-\ | Select Input Method | toggle-input-method. Bound in the emacs preset's insert and normal maps; the shipped vim/spacemacs preset leaves C-\ as vim's CTRL-\ CTRL-N prefix, where the command is reached by M-x toggle-input-method instead. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Select-Input-Method.html#index-C_002d_005c |
| C-] | Quitting | C-] is abort_recursive_edit, not keyboard_escape_quit, and zmax does have recursive edits: commands.rs:75262 pops one level from the emacs_misc recursive stack, disposing a parked kbd-macro-query along with it (RecursiveReason::MacroQuery), and reports emacs's own 'Quit' / 'Quit [N recursive edits still open]'. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Quitting.html#index-C_002d_005d |
| C-^ (Incremental Search) | Special Isearch | inside a search C-^ pushes the input-method prompt (isearch-toggle-specified-input-method): pick one of the installed keymap/{name}.vim methods and the search string is typed through it. Outside a search the key keeps vim's c_CTRL-^ ('imsearch' toggle) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Isearch.html#index-C_002d_005e-_0028Incremental-Search_0029 |
| C-_ | Undo | C-_ | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Undo.html#index-C_002d_005f |
| C-_ (Dired) | Marks vs Flags | dired-undo: `_` / C-_ undo the last Dired change (ui/dired.rs) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-C_002d_005f-_0028Dired_0029 |
| C-a | Moving Point | emacs preset: move-beginning-of-line -> goto_line_start | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-C_002da |
| C-a (Calendar mode) | Move to Beginning or End | emacs Calendar C-a -> zmax Calendar mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Move-to-Beginning-or-End.html#index-C_002da-_0028Calendar-mode_0029 |
| C-b | Moving Point | C-b | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-C_002db |
| C-b (Calendar mode) | Calendar Unit Motion | emacs Calendar C-b -> zmax Calendar mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Calendar-Unit-Motion.html#index-C_002db-_0028Calendar-mode_0029 |
| C-b, when using input methods | Input Methods | quail-prev-translation: the previous alternative in the current row, stopping at its start; otherwise C-b is backward-char. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Input-Methods.html#index-C_002db_002c-when-using-input-methods |
| C-c ' (Picture mode) | Insert in Picture | C-c ' sets the drawing direction to NE. Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-_0027-_0028Picture-mode_0029 |
| C-c , J | Semantic | key:normal:C-c , J | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Semantic.html#index-C_002dc-_002c-J |
| C-c , SPC | Semantic | key:normal:C-c , space | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Semantic.html#index-C_002dc-_002c-SPC |
| C-c , j | Semantic | key:normal:C-c , j | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Semantic.html#index-C_002dc-_002c-j |
| C-c , l | Semantic | completion (exact) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Semantic.html#index-C_002dc-_002c-l |
| C-c . (C mode) | Custom C Indent | c-set-style | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Custom-C-Indent.html#index-C_002dc-_002e-_0028C-mode_0029 |
| C-c . (Picture mode) | Insert in Picture | C-c . sets the drawing direction to south. Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-_002e-_0028Picture-mode_0029 |
| C-c . (Shell mode) | Shell Ring | C-c . inserts the last argument of the previous input (comint-insert-previous-argument, `!$`). Real two-key chord: C-c arms the comint job-control prefix in ui/comint.rs; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Ring.html#index-C_002dc-_002e-_0028Shell-mode_0029 |
| C-c / (Picture mode) | Insert in Picture | C-c / sets the drawing direction to SW. Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-_002f-_0028Picture-mode_0029 |
| C-c / (SGML mode) | HTML Mode | sgml-close-tag | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/HTML-Mode.html#index-C_002dc-_002f-_0028SGML-mode_0029 |
| C-c / h (Outline mode) | Outline Visibility | outline-hide-by-heading-regexp: prompts for the regexp and folds every heading whose line matches | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Visibility.html#index-C_002dc-_002f-h-_0028Outline-mode_0029 |
| C-c / s (Outline mode) | Outline Visibility | outline-show-by-heading-regexp: prompts for the regexp and unfolds every heading whose line matches | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Visibility.html#index-C_002dc-_002f-s-_0028Outline-mode_0029 |
| C-c 8 (SGML mode) | HTML Mode | sgml-name-8bit-mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/HTML-Mode.html#index-C_002dc-8-_0028SGML-mode_0029 |
| C-c ; (Fortran mode) | Fortran Comments | fortran-comment-region | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Fortran-Comments.html#index-C_002dc-_003b-_0028Fortran-mode_0029 |
| C-c < (GUD) | Commands of GUD | gud-up: select the stack frame one level up | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Commands-of-GUD.html#index-C_002dc-_003c-_0028GUD_0029 |
| C-c < (Picture mode) | Insert in Picture | C-c < sets the drawing direction to west. Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-_003c-_0028Picture-mode_0029 |
| C-c > (GUD) | Commands of GUD | gud-down: select the stack frame one level down | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Commands-of-GUD.html#index-C_002dc-_003e-_0028GUD_0029 |
| C-c > (Picture mode) | Insert in Picture | C-c > sets the drawing direction to east. Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-_003e-_0028Picture-mode_0029 |
| C-c ? (SGML mode) | HTML Mode | sgml-tag-help | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/HTML-Mode.html#index-C_002dc-_003f-_0028SGML-mode_0029 |
| C-c @ (Outline minor mode) | Outline Minor Mode | C-c @ is the outline-minor-mode prefix and now carries the outline command set | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Minor-Mode.html#index-C_002dc-_0040-_0028Outline-minor-mode_0029 |
| C-c @ C-M-h | Hideshow | hs-hide-all -> fold_close_all | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html#index-C_002dc-_0040-C_002dM_002dh |
| C-c @ C-M-s | Hideshow | hs-show-all -> fold_open_all | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html#index-C_002dc-_0040-C_002dM_002ds |
| C-c @ C-c | Hideshow | emacs C-c @ C-c (Hideshow) -> fold_toggle | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html#index-C_002dc-_0040-C_002dc |
| C-c @ C-h | Hideshow | emacs C-c @ C-h (Hideshow) -> fold_close | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html#index-C_002dc-_0040-C_002dh |
| C-c @ C-l | Hideshow | hs-hide-level (was fold_close_recursive) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html#index-C_002dc-_0040-C_002dl |
| C-c @ C-r | Hideshow | hs-show-block -> fold_open | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html#index-C_002dc-_0040-C_002dr |
| C-c @ C-s | Hideshow | emacs C-c @ C-s (Hideshow) -> fold_open | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html#index-C_002dc-_0040-C_002ds |
| C-c C-DEL (C Mode) | Hungry Delete | c-hungry-delete-backwards | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hungry-Delete.html#index-C_002dc-C_002dDEL-_0028C-Mode_0029 |
| C-c C-Delete (C Mode) | Hungry Delete | c-hungry-delete-forward | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hungry-Delete.html#index-C_002dc-C_002dDelete-_0028C-Mode_0029 |
| C-c C-\ (C mode) | Other C Commands | c-backslash-region | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Other-C-Commands.html#index-C_002dc-C_002d_005c-_0028C-mode_0029 |
| C-c C-\ (Shell mode) | Shell Mode | C-c C-\ sends SIGQUIT to the child (comint-quit-subjob). Real two-key chord: C-c arms the comint job-control prefix in ui/comint.rs; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Mode.html#index-C_002dc-C_002d_005c-_0028Shell-mode_0029 |
| C-c C-a (C mode) | Electric C | c-toggle-auto-newline | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Electric-C.html#index-C_002dc-C_002da-_0028C-mode_0029 |
| C-c C-a (F90 mode) | Fortran Motion | f90-previous-block | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Fortran-Motion.html#index-C_002dc-C_002da-_0028F90-mode_0029 |
| C-c C-a (Log Edit mode) | Log Buffer | C-c C-a: log-edit-insert-changelog (same handler) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Log-Buffer.html#index-C_002dc-C_002da-_0028Log-Edit-mode_0029 |
| C-c C-a (Message mode) | Mail Misc | mml-attach-file: inserts the MML attachment tag for a chosen file | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Mail-Misc.html#index-C_002dc-C_002da-_0028Message-mode_0029 |
| C-c C-a (Outline mode) | Outline Visibility | outline-show-all | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Visibility.html#index-C_002dc-C_002da-_0028Outline-mode_0029 |
| C-c C-a (SGML mode) | HTML Mode | sgml-attributes | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/HTML-Mode.html#index-C_002dc-C_002da-_0028SGML-mode_0029 |
| C-c C-a (Shell mode) | Shell Mode | C-c C-a moves to the process mark / beginning of line (comint-bol-or-process-mark). Real two-key chord: C-c arms the comint job-control prefix in ui/comint.rs; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Mode.html#index-C_002dc-C_002da-_0028Shell-mode_0029 |
| C-c C-b (Help mode) | Help Mode | C-c C-b: a real two-key chord calling help-go-back (the manual's synonym of l) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Mode.html#index-C_002dc-C_002db-_0028Help-mode_0029 |
| C-c C-b (Message mode) | Header Editing | message-goto-body | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Header-Editing.html#index-C_002dc-C_002db-_0028Message-mode_0029 |
| C-c C-b (Outline mode) | Outline Motion | outline-backward-same-level | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Motion.html#index-C_002dc-C_002db-_0028Outline-mode_0029 |
| C-c C-b (Picture mode) | Insert in Picture | C-c C-b steps point against the drawing direction (picture-motion-reverse). Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-C_002db-_0028Picture-mode_0029 |
| C-c C-b (SGML mode) | HTML Mode | sgml-skip-tag-backward | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/HTML-Mode.html#index-C_002dc-C_002db-_0028SGML-mode_0029 |
| C-c C-b (Shell mode) | Shell Mode | C-c C-b moves point back over one `;`/`|`/`&`-separated shell command (shell-backward-command). Real two-key chord: C-c arms the comint job-control prefix in ui/comint.rs; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Mode.html#index-C_002dc-C_002db-_0028Shell-mode_0029 |
| C-c C-b (TeX mode) | TeX Print | tex-buffer | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/TeX-Print.html#index-C_002dc-C_002db-_0028TeX-mode_0029 |
| C-c C-c (C mode) | Comment Commands | C-c C-c in C/C++ buffers runs comment-region: it inserts the line comment token at the first non-blank of every line the region covers, mark active or not | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Comment-Commands.html#index-C_002dc-C_002dc-_0028C-mode_0029 |
| C-c C-c (Edit Abbrevs) | Editing Abbrevs | edit-abbrevs now puts the major mode `edit-abbrevs` on the buffer it opens, and that mode binds C-c C-c to define-abbrevs — which redefines the abbrevs from the text in the buffer | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Editing-Abbrevs.html#index-C_002dc-C_002dc-_0028Edit-Abbrevs_0029 |
| C-c C-c (Edit Tab Stops) | Tab Stops | edit-tab-stops now opens Emacs's ruler buffer (a colon at every stop over the tens/units rulers and the `To install changes, type C-c C-c` line) in major mode edit-tab-stops; C-c C-c reads the colon columns off the first line and installs them as the tab stops | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Stops.html#index-C_002dc-C_002dc-_0028Edit-Tab-Stops_0029 |
| C-c C-c (Log Edit mode) | Log Buffer | C-c C-c: log-edit-done - handled on its real chord by the commit-message buffer (ui/magit.rs MagitCommit::handle_event) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Log-Buffer.html#index-C_002dc-C_002dc-_0028Log-Edit-mode_0029 |
| C-c C-c (Message mode) | Mail Sending | message-send-and-exit; the `mail` language IS emacs message-mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Mail-Sending.html#index-C_002dc-C_002dc-_0028Message-mode_0029 |
| C-c C-c (Outline mode) | Outline Visibility | outline-hide-entry | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Visibility.html#index-C_002dc-C_002dc-_0028Outline-mode_0029 |
| C-c C-c (Shell mode) | Shell Mode | C-c C-c sends SIGINT to the child (comint-interrupt-subjob). Real two-key chord: C-c arms the comint job-control prefix in ui/comint.rs; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Mode.html#index-C_002dc-C_002dc-_0028Shell-mode_0029 |
| C-c C-c (TeX mode) | TeX Print | tex-compile | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/TeX-Print.html#index-C_002dc-C_002dc-_0028TeX-mode_0029 |
| C-c C-c (customization buffer) | Changing a Variable | C-c C-c in the customization buffer is Custom-set: a real two-key chord (C-c arms a prefix in ui/settings.rs, as an emacs prefix key does) that sets the edited setting for the current session without writing config.toml. The [Apply] button runs the same command. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Changing-a-Variable.html#index-C_002dc-C_002dc-_0028customization-buffer_0029 |
| C-c C-d (C Mode) | Hungry Delete | c-hungry-delete-forward | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hungry-Delete.html#index-C_002dc-C_002dd-_0028C-Mode_0029 |
| C-c C-d (Fortran mode) | ForIndent Commands | fortran-join-line | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/ForIndent-Commands.html#index-C_002dc-C_002dd-_0028Fortran-mode_0029 |
| C-c C-d (GUD) | Commands of GUD | gud-remove on its `C-c` key, in the `emacs` keymap preset (keymap/emacs.rs), which had no other claim on C-c C-d. dap_remove_breakpoint clears the breakpoint on the cursor line unconditionally (never sets one) and re-sends DAP setBreakpoints. In the shipped spacemacs preset C-c C-d is zmax's debug-launch, which is why the whole GUD map lives there on the C-x C-a alias (C-x C-a C-d). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Commands-of-GUD.html#index-C_002dc-C_002dd-_0028GUD_0029 |
| C-c C-d (Log Edit mode) | Log Buffer | C-c C-d: log-edit-show-diff (same handler) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Log-Buffer.html#index-C_002dc-C_002dd-_0028Log-Edit-mode_0029 |
| C-c C-d (Org Mode) | Org Organizer | org-deadline: prompts for a date and writes the DEADLINE: line under the heading | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Org-Organizer.html#index-C_002dc-C_002dd-_0028Org-Mode_0029 |
| C-c C-d (Outline mode) | Outline Visibility | outline-hide-subtree | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Visibility.html#index-C_002dc-C_002dd-_0028Outline-mode_0029 |
| C-c C-d (Picture mode) | Basic Picture | C-c C-d deletes the character under point and slides the rest of the row left (picture-delete-char). Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Picture.html#index-C_002dc-C_002dd-_0028Picture-mode_0029 |
| C-c C-d (SGML mode) | HTML Mode | sgml-delete-tag | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/HTML-Mode.html#index-C_002dc-C_002dd-_0028SGML-mode_0029 |
| C-c C-e (C mode) | Other C Commands | c-macro-expand | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Other-C-Commands.html#index-C_002dc-C_002de-_0028C-mode_0029 |
| C-c C-e (F90 mode) | Fortran Motion | f90-next-block | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Fortran-Motion.html#index-C_002dc-C_002de-_0028F90-mode_0029 |
| C-c C-e (LaTeX mode) | LaTeX Editing | latex-close-block | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/LaTeX-Editing.html#index-C_002dc-C_002de-_0028LaTeX-mode_0029 |
| C-c C-e (Org mode) | Org Authoring | C-c C-e in Org mode -> :org-export (also bound in the org major-mode overlay) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Org-Authoring.html#index-C_002dc-C_002de-_0028Org-mode_0029 |
| C-c C-e (Outline mode) | Outline Visibility | outline-show-entry | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Visibility.html#index-C_002dc-C_002de-_0028Outline-mode_0029 |
| C-c C-e (Shell mode) | Shell Mode | C-c C-e scrolls to the end of the output (comint-show-maximum-output). Real two-key chord: C-c arms the comint job-control prefix in ui/comint.rs; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Mode.html#index-C_002dc-C_002de-_0028Shell-mode_0029 |
| C-c C-f (GUD) | Commands of GUD | GUD gud-finish -> dap_step_out | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Commands-of-GUD.html#index-C_002dc-C_002df-_0028GUD_0029 |
| C-c C-f (Help mode) | Help Mode | C-c C-f: the same chord calling help-go-forward | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Mode.html#index-C_002dc-C_002df-_0028Help-mode_0029 |
| C-c C-f (Log Edit mode) | Log Buffer | C-c C-f: log-edit-show-files (same handler) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Log-Buffer.html#index-C_002dc-C_002df-_0028Log-Edit-mode_0029 |
| C-c C-f (Outline mode) | Outline Motion | outline-forward-same-level | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Motion.html#index-C_002dc-C_002df-_0028Outline-mode_0029 |
| C-c C-f (Picture mode) | Insert in Picture | C-c C-f steps point ALONG the drawing direction (picture-motion). Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-C_002df-_0028Picture-mode_0029 |
| C-c C-f (SGML mode) | HTML Mode | sgml-skip-tag-forward | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/HTML-Mode.html#index-C_002dc-C_002df-_0028SGML-mode_0029 |
| C-c C-f (Shell mode) | Shell Mode | C-c C-f moves point forward over one shell command (shell-forward-command). Real two-key chord: C-c arms the comint job-control prefix in ui/comint.rs; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Mode.html#index-C_002dc-C_002df-_0028Shell-mode_0029 |
| C-c C-f (TeX mode) | TeX Print | tex-file | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/TeX-Print.html#index-C_002dc-C_002df-_0028TeX-mode_0029 |
| C-c C-f C-b (Message mode) | Header Editing | message-goto-bcc | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Header-Editing.html#index-C_002dc-C_002df-C_002db-_0028Message-mode_0029 |
| C-c C-f C-c (Message mode) | Header Editing | message-goto-cc | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Header-Editing.html#index-C_002dc-C_002df-C_002dc-_0028Message-mode_0029 |
| C-c C-f C-f (Message mode) | Header Editing | message-goto-followup-to: go to the Mail-Followup-To header, creating it if the draft has none | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Header-Editing.html#index-C_002dc-C_002df-C_002df-_0028Message-mode_0029 |
| C-c C-f C-r (Message mode) | Header Editing | message-goto-reply-to: go to the Reply-To header, creating it if the draft has none | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Header-Editing.html#index-C_002dc-C_002df-C_002dr-_0028Message-mode_0029 |
| C-c C-f C-s (Message mode) | Header Editing | message-goto-subject | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Header-Editing.html#index-C_002dc-C_002df-C_002ds-_0028Message-mode_0029 |
| C-c C-f C-t (Message mode) | Header Editing | message-goto-to | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Header-Editing.html#index-C_002dc-C_002df-C_002dt-_0028Message-mode_0029 |
| C-c C-f C-w (Message mode) | Header Editing | message-goto-fcc: go to the Fcc header (the file the sent message is copied to), creating it if the draft has none | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Header-Editing.html#index-C_002dc-C_002df-C_002dw-_0028Message-mode_0029 |
| C-c C-i (GUD) | Commands of GUD | gud-stepi: step one machine instruction | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Commands-of-GUD.html#index-C_002dc-C_002di-_0028GUD_0029 |
| C-c C-i (Outline mode) | Outline Visibility | outline-show-children | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Visibility.html#index-C_002dc-C_002di-_0028Outline-mode_0029 |
| C-c C-j (Term mode) | Term Mode | C-c C-j: term-line-mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Term-Mode.html#index-C_002dc-C_002dj-_0028Term-mode_0029 |
| C-c C-k (Outline mode) | Outline Visibility | outline-show-branches | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Visibility.html#index-C_002dc-C_002dk-_0028Outline-mode_0029 |
| C-c C-k (Picture mode) | Rectangles in Picture | C-c C-k clears the mark->point rectangle and SAVES it for yanking (picture-clear-rectangle). Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles-in-Picture.html#index-C_002dc-C_002dk-_0028Picture-mode_0029 |
| C-c C-k (TeX mode) | TeX Print | C-c C-k in a LaTeX buffer kills the running TeX subprocess with SIGQUIT (tex-kill-job) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/TeX-Print.html#index-C_002dc-C_002dk-_0028TeX-mode_0029 |
| C-c C-k (Term mode) | Term Mode | C-c C-k: term-char-mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Term-Mode.html#index-C_002dc-C_002dk-_0028Term-mode_0029 |
| C-c C-l (C mode) | Electric C | c-toggle-electric-state | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Electric-C.html#index-C_002dc-C_002dl-_0028C-mode_0029 |
| C-c C-l (Calendar mode) | General Calendar | C-c C-l redraws the calendar, re-reading the diary file (calendar-redraw). Real two-key chord: C-c arms Prefix::CtrlC | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/General-Calendar.html#index-C_002dc-C_002dl-_0028Calendar-mode_0029 |
| C-c C-l (GUD) | Commands of GUD | gud-refresh: redraw and scroll the debugger output to the newest line | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Commands-of-GUD.html#index-C_002dc-C_002dl-_0028GUD_0029 |
| C-c C-l (Outline mode) | Outline Visibility | outline-hide-leaves | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Visibility.html#index-C_002dc-C_002dl-_0028Outline-mode_0029 |
| C-c C-l (Shell mode) | Shell Ring | C-c C-l lists the input history in the buffer (comint-dynamic-list-input-ring). Real two-key chord: C-c arms the comint job-control prefix in ui/comint.rs; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Ring.html#index-C_002dc-C_002dl-_0028Shell-mode_0029 |
| C-c C-l (TeX mode) | TeX Print | tex-recenter-output-buffer | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/TeX-Print.html#index-C_002dc-C_002dl-_0028TeX-mode_0029 |
| C-c C-n (C mode) | Motion in C | c-forward-conditional | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Motion-in-C.html#index-C_002dc-C_002dn-_0028C-mode_0029 |
| C-c C-n (Fortran mode) | Fortran Motion | fortran-next-statement | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Fortran-Motion.html#index-C_002dc-C_002dn-_0028Fortran-mode_0029 |
| C-c C-n (GUD) | Commands of GUD | GUD gud-next -> dap_next | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Commands-of-GUD.html#index-C_002dc-C_002dn-_0028GUD_0029 |
| C-c C-n (Outline mode) | Outline Motion | outline-next-visible-heading, on outline-mode's real key | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Motion.html#index-C_002dc-C_002dn-_0028Outline-mode_0029 |
| C-c C-n (Rmail) | Rmail Motion | C-c C-n moves to the next message with the same subject (rmail-next/previous-same-subject). Real two-key chord: C-c now arms rmail-mode's prefix (it used to quit; `q`/Esc quit). N/P stay bound as the aliases. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Motion.html#index-C_002dc-C_002dn-_0028Rmail_0029 |
| C-c C-n (SGML mode) | HTML Mode | sgml-name-char | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/HTML-Mode.html#index-C_002dc-C_002dn-_0028SGML-mode_0029 |
| C-c C-n (Shell mode) | Shell History Copying | C-c C-n moves to the next prompt (comint-next-prompt). Real two-key chord: C-c arms the comint job-control prefix in ui/comint.rs; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-History-Copying.html#index-C_002dc-C_002dn-_0028Shell-mode_0029 |
| C-c C-o (LaTeX mode) | LaTeX Editing | latex-insert-block | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/LaTeX-Editing.html#index-C_002dc-C_002do-_0028LaTeX-mode_0029 |
| C-c C-o (Outline mode) | Outline Visibility | outline-hide-other | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Visibility.html#index-C_002dc-C_002do-_0028Outline-mode_0029 |
| C-c C-o (Shell mode) | Shell Mode | C-c C-o deletes the last command's output (comint-delete-output). Real two-key chord: C-c arms the comint job-control prefix in ui/comint.rs; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Mode.html#index-C_002dc-C_002do-_0028Shell-mode_0029 |
| C-c C-p (C mode) | Motion in C | c-backward-conditional | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Motion-in-C.html#index-C_002dc-C_002dp-_0028C-mode_0029 |
| C-c C-p (Fortran mode) | Fortran Motion | fortran-previous-statement | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Fortran-Motion.html#index-C_002dc-C_002dp-_0028Fortran-mode_0029 |
| C-c C-p (GUD) | Commands of GUD | gud-print: print the expression at point | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Commands-of-GUD.html#index-C_002dc-C_002dp-_0028GUD_0029 |
| C-c C-p (Outline mode) | Outline Motion | outline-previous-visible-heading | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Motion.html#index-C_002dc-C_002dp-_0028Outline-mode_0029 |
| C-c C-p (Rmail) | Rmail Motion | C-c C-p moves to the previous message with the same subject (rmail-next/previous-same-subject). Real two-key chord: C-c now arms rmail-mode's prefix (it used to quit; `q`/Esc quit). N/P stay bound as the aliases. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Motion.html#index-C_002dc-C_002dp-_0028Rmail_0029 |
| C-c C-p (Shell mode) | Shell History Copying | C-c C-p moves to the previous prompt (comint-previous-prompt). Real two-key chord: C-c arms the comint job-control prefix in ui/comint.rs; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-History-Copying.html#index-C_002dc-C_002dp-_0028Shell-mode_0029 |
| C-c C-p (TeX mode) | TeX Print | tex-print | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/TeX-Print.html#index-C_002dc-C_002dp-_0028TeX-mode_0029 |
| C-c C-q (C mode) | C Indent | c-indent-defun | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/C-Indent.html#index-C_002dc-C_002dq-_0028C-mode_0029 |
| C-c C-q (Message mode) | Citing Mail | message-fill-yanked-message -> mail_fill_yanked_message: refills the cited paragraphs, keeping each quote level | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Citing-Mail.html#index-C_002dc-C_002dq-_0028Message-mode_0029 |
| C-c C-q (Outline mode) | Outline Visibility | outline-hide-sublevels | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Visibility.html#index-C_002dc-C_002dq-_0028Outline-mode_0029 |
| C-c C-q (Term mode) | Term Mode | C-c C-q: term-pager-toggle | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Term-Mode.html#index-C_002dc-C_002dq-_0028Term-mode_0029 |
| C-c C-r (Fortran mode) | Fortran Columns | fortran-column-ruler | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Fortran-Columns.html#index-C_002dc-C_002dr-_0028Fortran-mode_0029 |
| C-c C-r (Shell mode) | Shell Mode | C-c C-r scrolls the last output to the top (comint-show-output). Real two-key chord: C-c arms the comint job-control prefix in ui/comint.rs; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Mode.html#index-C_002dc-C_002dr-_0028Shell-mode_0029 |
| C-c C-r (TeX mode) | TeX Print | tex-region | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/TeX-Print.html#index-C_002dc-C_002dr-_0028TeX-mode_0029 |
| C-c C-s (C mode) | Other C Commands | c-show-syntactic-information | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Other-C-Commands.html#index-C_002dc-C_002ds-_0028C-mode_0029 |
| C-c C-s (GUD) | Commands of GUD | GUD gud-step -> dap_step_in | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Commands-of-GUD.html#index-C_002dc-C_002ds-_0028GUD_0029 |
| C-c C-s (Message mode) | Mail Sending | message-send | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Mail-Sending.html#index-C_002dc-C_002ds-_0028Message-mode_0029 |
| C-c C-s (Org Mode) | Org Organizer | org-schedule: prompts for a date and writes the SCHEDULED: line under the heading | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Org-Organizer.html#index-C_002dc-C_002ds-_0028Org-Mode_0029 |
| C-c C-s (Outline mode) | Outline Visibility | outline-show-subtree | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Visibility.html#index-C_002dc-C_002ds-_0028Outline-mode_0029 |
| C-c C-s (Shell mode) | Shell Mode | C-c C-s writes the last command's output to a prompted file (comint-write-output). Real two-key chord: C-c arms the comint job-control prefix in ui/comint.rs; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Mode.html#index-C_002dc-C_002ds-_0028Shell-mode_0029 |
| C-c C-t (Org Mode) | Org Organizer | org-todo | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Org-Organizer.html#index-C_002dc-C_002dt-_0028Org-Mode_0029 |
| C-c C-t (Outline mode) | Outline Visibility | outline-hide-body | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Visibility.html#index-C_002dc-C_002dt-_0028Outline-mode_0029 |
| C-c C-t (SGML mode) | HTML Mode | sgml-tag | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/HTML-Mode.html#index-C_002dc-C_002dt-_0028SGML-mode_0029 |
| C-c C-u (C mode) | Motion in C | c-up-conditional | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Motion-in-C.html#index-C_002dc-C_002du-_0028C-mode_0029 |
| C-c C-u (GUD) | Commands of GUD | GUD gud-until -> dap_run_to_cursor | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Commands-of-GUD.html#index-C_002dc-C_002du-_0028GUD_0029 |
| C-c C-u (Outline mode) | Outline Motion | outline-up-heading | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Outline-Motion.html#index-C_002dc-C_002du-_0028Outline-mode_0029 |
| C-c C-u (Shell mode) | Shell Mode | C-c C-u kills the input line (comint-kill-input). Real two-key chord: C-c arms the comint job-control prefix in ui/comint.rs; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Mode.html#index-C_002dc-C_002du-_0028Shell-mode_0029 |
| C-c C-v (SGML mode) | HTML Mode | sgml-validate | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/HTML-Mode.html#index-C_002dc-C_002dv-_0028SGML-mode_0029 |
| C-c C-v (TeX mode) | TeX Print | tex-view | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/TeX-Print.html#index-C_002dc-C_002dv-_0028TeX-mode_0029 |
| C-c C-w (Fortran mode) | Fortran Columns | C-c C-w: fortran-window-create-momentarily (mark column 72 until the next key) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Fortran-Columns.html#index-C_002dc-C_002dw-_0028Fortran-mode_0029 |
| C-c C-w (Log Edit mode) | Log Buffer | C-c C-w: log-edit-generate-changelog-from-diff (same handler) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Log-Buffer.html#index-C_002dc-C_002dw-_0028Log-Edit-mode_0029 |
| C-c C-w (Message mode) | Mail Signature | message-insert-signature | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Mail-Signature.html#index-C_002dc-C_002dw-_0028Message-mode_0029 |
| C-c C-w (Picture mode) | Rectangles in Picture | C-c C-w r clears the rectangle into register `r` (picture-clear-rectangle-to-register). Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles-in-Picture.html#index-C_002dc-C_002dw-_0028Picture-mode_0029 |
| C-c C-w (Shell mode) | Shell Mode | C-c C-w kills the word before point on the input line (backward-kill-word). Real two-key chord: C-c arms the comint job-control prefix in ui/comint.rs; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Mode.html#index-C_002dc-C_002dw-_0028Shell-mode_0029 |
| C-c C-x | Foldout | foldout-exit-fold: widen back out of the zoomed subtree, point back on its heading | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Foldout.html#index-C_002dc-C_002dx |
| C-c C-x (Picture mode) | Rectangles in Picture | C-c C-x r overlays the rectangle saved in register `r` (picture-yank-rectangle-from-register). Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles-in-Picture.html#index-C_002dc-C_002dx-_0028Picture-mode_0029 |
| C-c C-x (Shell mode) | Shell Ring | C-c C-x inserts the input that followed the one last recalled (comint-get-next-from-history). Real two-key chord: C-c arms the comint job-control prefix in ui/comint.rs; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Ring.html#index-C_002dc-C_002dx-_0028Shell-mode_0029 |
| C-c C-y (Message mode) | Citing Mail | message-yank-original: cites the message being replied to behind message-yank-prefix | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Citing-Mail.html#index-C_002dc-C_002dy-_0028Message-mode_0029 |
| C-c C-y (Picture mode) | Rectangles in Picture | C-c C-y overlays the saved rectangle at point, overwriting what it covers (picture-yank-rectangle). Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles-in-Picture.html#index-C_002dc-C_002dy-_0028Picture-mode_0029 |
| C-c C-z | Foldout | foldout-zoom-subtree: narrow the buffer to the subtree at point | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Foldout.html#index-C_002dc-C_002dz |
| C-c C-z (Shell mode) | Shell Mode | C-c C-z sends SIGTSTP to the child (comint-stop-subjob). Real two-key chord: C-c arms the comint job-control prefix in ui/comint.rs; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Mode.html#index-C_002dc-C_002dz-_0028Shell-mode_0029 |
| C-c DEL (C Mode) | Hungry Delete | c-hungry-delete-backwards | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hungry-Delete.html#index-C_002dc-DEL-_0028C-Mode_0029 |
| C-c DOWN (Picture mode) | Insert in Picture | C-c DOWN sets the drawing direction to south. Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-DOWN-_0028Picture-mode_0029 |
| C-c Delete (C Mode) | Hungry Delete | c-hungry-delete-forward | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hungry-Delete.html#index-C_002dc-Delete-_0028C-Mode_0029 |
| C-c End (Picture mode) | Insert in Picture | C-c End sets the drawing direction to SW. Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-End-_0028Picture-mode_0029 |
| C-c Home (Picture mode) | Insert in Picture | C-c Home sets the drawing direction to NW. Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-Home-_0028Picture-mode_0029 |
| C-c LEFT (Picture mode) | Insert in Picture | C-c LEFT sets the drawing direction to west. Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-LEFT-_0028Picture-mode_0029 |
| C-c PageDown (Picture mode) | Insert in Picture | C-c PageDown sets the drawing direction to SE. Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-PageDown-_0028Picture-mode_0029 |
| C-c PageUp (Picture mode) | Insert in Picture | C-c PageUp sets the drawing direction to NE. Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-PageUp-_0028Picture-mode_0029 |
| C-c RET (Goto Address mode) | Goto Address mode | C-c RET: goto-address-at-point - open the URL or e-mail at point in the browser | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Goto-Address-mode.html#index-C_002dc-RET-_0028Goto-Address-mode_0029 |
| C-c RET (Shell mode) | Shell History Copying | C-c RET copies the old input at point onto the input line (comint-copy-old-input). Real two-key chord: C-c arms the comint job-control prefix in ui/comint.rs; the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-History-Copying.html#index-C_002dc-RET-_0028Shell-mode_0029 |
| C-c RIGHT (Picture mode) | Insert in Picture | C-c RIGHT sets the drawing direction to east. Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-RIGHT-_0028Picture-mode_0029 |
| C-c TAB (Picture mode) | Tabs in Picture | C-c TAB sets the tab stops from the words on the current row (picture-set-tab-stops). Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tabs-in-Picture.html#index-C_002dc-TAB-_0028Picture-mode_0029 |
| C-c TAB (SGML mode) | HTML Mode | C-c TAB: sgml-tags-invisible - hide the markup, show only the text | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/HTML-Mode.html#index-C_002dc-TAB-_0028SGML-mode_0029 |
| C-c TAB (TeX mode) | TeX Print | tex-bibtex-file | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/TeX-Print.html#index-C_002dc-TAB-_0028TeX-mode_0029 |
| C-c UP (Picture mode) | Insert in Picture | C-c UP sets the drawing direction to north. Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-UP-_0028Picture-mode_0029 |
| C-c [ (Enriched mode) | Enriched Indentation | set-left-margin | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Enriched-Indentation.html#index-C_002dc-_005b-_0028Enriched-mode_0029 |
| C-c [ (Org Mode) | Org Organizer | C-c [ in an Org buffer runs org-agenda-file-to-front, which adds the current file to the front of the agenda file list | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Org-Organizer.html#index-C_002dc-_005b-_0028Org-Mode_0029 |
| C-c \ (Picture mode) | Insert in Picture | C-c \ sets the drawing direction to SE. Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-_005c-_0028Picture-mode_0029 |
| C-c ] (Enriched mode) | Enriched Indentation | set-right-margin | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Enriched-Indentation.html#index-C_002dc-_005d-_0028Enriched-mode_0029 |
| C-c ^ (Picture mode) | Insert in Picture | C-c ^ sets the drawing direction to north. Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-_005e-_0028Picture-mode_0029 |
| C-c ` (Picture mode) | Insert in Picture | C-c ` sets the drawing direction to NW. Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-_0060-_0028Picture-mode_0029 |
| C-c next (Picture mode) | Insert in Picture | C-c next sets the drawing direction to SE. Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-next-_0028Picture-mode_0029 |
| C-c prior (Picture mode) | Insert in Picture | C-c prior sets the drawing direction to NE. Real two-key chord: C-c arms a prefix in ui/picture.rs (C-c C-c exits picture mode, as in Emacs); the report parser can only express the prefix key as a chord. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Insert-in-Picture.html#index-C_002dc-prior-_0028Picture-mode_0029 |
| C-c { (TeX mode) | TeX Editing | tex-insert-braces | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/TeX-Editing.html#index-C_002dc-_007b-_0028TeX-mode_0029 |
| C-c } (TeX mode) | TeX Editing | up-list | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/TeX-Editing.html#index-C_002dc-_007d-_0028TeX-mode_0029 |
| C-d (Buffer Menu) | Several Buffers | C-d = Buffer-menu-delete-backwards: flag D and move up | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-C_002dd-_0028Buffer-Menu_0029 |
| C-d (Rmail) | Rmail Deletion | Rmail C-d | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Deletion.html#index-C_002dd-_0028Rmail_0029 |
| C-d (Shell mode) | Shell Mode | key:comint:C-d | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Mode.html#index-C_002dd-_0028Shell-mode_0029 |
| C-e | Moving Point | C-e | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-C_002de |
| C-e (Calendar mode) | Move to Beginning or End | emacs Calendar C-e -> zmax Calendar mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Move-to-Beginning-or-End.html#index-C_002de-_0028Calendar-mode_0029 |
| C-f | Moving Point | C-f | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-C_002df |
| C-f (Calendar mode) | Calendar Unit Motion | emacs Calendar C-f -> zmax Calendar mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Calendar-Unit-Motion.html#index-C_002df-_0028Calendar-mode_0029 |
| C-f, when using input methods | Input Methods | quail-next-translation: while a Chinese method is showing a row of alternatives, C-f moves to the next one, replacing the character in the buffer and re-drawing the echo-area row with it highlighted; it stops at the end of the list. The translation keymap is consulted before the ordinary keymap (emacs's overriding-terminal-local-map), so C-f is forward-char again the moment the translation region closes. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Input-Methods.html#index-C_002df_002c-when-using-input-methods |
| C-g | Quitting | C-g | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Quitting.html#index-C_002dg |
| C-g (MS-DOS) | MS-DOS Keyboard | C-g keyboard-quit -> collapse_selection (emacs.rs:126). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/MS_002dDOS-Keyboard.html#index-C_002dg-_0028MS_002dDOS_0029 |
| C-g C-g (Incremental Search) | Basic Isearch | isearch-abort in two stages, as the manual describes: a failing search rubs back to the characters that last matched and stays in the search, a successful one goes back to where the search started and quits — so C-g C-g is what leaves a failing search (Prompt::isearch_abort) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Isearch.html#index-C_002dg-C_002dg-_0028Incremental-Search_0029 |
| C-h | Help | Under `keymap = "emacs"`, C-h is now the help-command prefix in Insert, Normal and Select instead of a second spelling of backspace. New `add_help_map()` at zmax-term/src/keymap/emacs.rs:114-151 lays down the `C-h *` slice of spacemacs::CXCH_FULL (C-h a, C-h d, C-h 4 i, C-h 4 s, the C-h C-* GNU-doc keys) with `add_chord`, then merges `spacemacs::ch_prefix()` on top so the curated bindings win on collision — the same precedence spacemacs::default() uses. Applied to all three modes at emacs.rs:490-494 (emacs is modeless; a live region does not disable help). The `"backspace" | "C-h" => delete_char_backward` arm at emacs.rs:173 is now `"backspace" => delete_char_backward` (emacs.rs:211-217) with a comment that C-h-as-DEL is the `(keyboard-translate ?\C-h ?\C-?)` opt-in, not the stock binding. To share the map, spacemacs.rs:192 `ch_prefix()` and spacemacs.rs:267 `CXCH_FULL` became pub(super) (no behaviour change to the spacemacs preset). Inherited downstream, unasked-for: keymap/nano.rs:90 rebinds C-h to delete_char_backward itself so nano is unaffected, while keymap/micro.rs (merges over emacs::default, never binds C-h; port/data/micro.json has no plain CtrlH row) now inherits the help prefix on C-h and F1 — neither file is in my lane. Measurement caveat, not a code gap: scripts/gen_port_report.py parses emacs.rs only via `keymap!({...})` bodies and (chord,label,cmd) tuples (gen_port_report.py:230-242), so this runtime graft is invisible to it — `key:emacs:C-h k` will not resolve until that parser learns `add_help_map`. I did not touch the report script. Upstream: emacs-mirror/emacs master lisp/help.el:62-127 — `(defvar-keymap help-map ...)` and `(define-key global-map (char-to-string help-char) 'help-command)` / `(fset 'help-command help-map)` | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help.html#index-C_002dh |
| C-h . | Help Echo | display-local-help -> hover | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Echo.html#index-C_002dh-_002e |
| C-h 4 i | Misc Help | `C-h 4 i` is info_search_other_window, emacs's `info-other-window`: with no prefix it goes straight to the Info directory node `(dir)Top` (emacs reads a file name only under a prefix argument, info.el:780-787) and with a prefix it prompts 'Info file name: '; either way display_other_window focuses an existing non-focused view and splits only when this is the sole window. The node now lands in an Info-*mode* buffer rather than a plain scratch dump, which was the recorded gap: info.el's reading keys are live in it, keyed on the major mode in keymap/major_mode.rs - `n`/`p`/`u` walk the node's own Next/Prev/Up pointers (read off the `File: …, Node: …` header the way `Info-extract-pointer` reads them), `l` walks the history `Info-history-back` keeps per buffer, `d` opens the directory of manuals, `t` this manual's Top node, and `RET` follows the menu entry or cross-reference at point. `SPC h i` and the apropos picker open the same kind of buffer. Recorded divergence: nodes are rendered by shelling out to `info`, so each move re-renders rather than re-displaying a cached *info* buffer. Pinned by `commands::info_mode_tests::*` and `tests/test/emacs_keys.rs::c_h_4_i_opens_an_info_mode_buffer`. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Help.html#index-C_002dh-4-i |
| C-h 4 s | Name Help | The CXCH_FULL row is now `("C-h 4 s", "Other window", "help_find_source")` at zmax-term/src/keymap/spacemacs.rs:360 (was `"help"`), so C-h 4 s visits the source of whatever the *Help* panel describes instead of re-opening the help browser. Reaches the emacs preset too, via the CXCH_FULL C-h slice add_help_map grafts (emacs.rs:133-141). The command's None branch already says "Source file for the current help item is not defined" (commands.rs:60097-60099), matching help-find-source's own failure. Upstream: lisp/help.el:118 `"4 s" #'help-find-source`; description at lisp/help.el:425 "Show the source for what's being described in *Help*" | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Name-Help.html#index-C_002dh-4-s |
| C-h C | Coding Systems | emacs C-h C (Coding Systems) -> describe_coding_system | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Coding-Systems.html#index-C_002dh-C |
| C-h C-\ | Select Input Method | describe-input-method — the package's documentation and full key table. C-h I runs the same command. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Select-Input-Method.html#index-C_002dh-C_002d_005c |
| C-h C-c | Help Files | key:normal:C-h C-c | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002dc |
| C-h C-d | Help Files | key:normal:C-h C-d | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002dd |
| C-h C-e | Help Files | view-external-packages (rebound from package_search) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002de |
| C-h C-f | Help Files | emacs C-h C-f (Help Files) -> browse_faq | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002df |
| C-h C-h | Help | emacs C-h C-h (Help) -> help | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help.html#index-C_002dh-C_002dh |
| C-h C-h (Incremental Search) | Special Isearch | C-h is the isearch help prefix; C-h C-h (and C-h ?, C-h F1) shows the isearch-help-map options, with b/k/m/q for describe-bindings, describe-key, describe-mode and quit | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Isearch.html#index-C_002dh-C_002dh-_0028Incremental-Search_0029 |
| C-h C-m | Help Files | view-order-manuals (rebound from the generic help browser) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002dm |
| C-h C-n | Help Files | emacs C-h C-n (Help Files) -> browse_news | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002dn |
| C-h C-o | Help Files | describe-distribution (rebound from the generic help browser) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002do |
| C-h C-p | Help Files | view-emacs-problems (exact) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002dp |
| C-h C-q | Misc Help | help-quick-toggle (was the help browser) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Help.html#index-C_002dh-C_002dq |
| C-h C-t | Help Files | view-emacs-todo (rebound from the generic help browser) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002dt |
| C-h C-w | Help Files | key:normal:C-h C-w | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002dw |
| C-h F | Name Help | Info-goto-emacs-command-node: the manual node documenting a command. `C-h F` was bound to the help browser, which is `C-h r`'s job; it is bound to info_goto_emacs_command_node now (keymap/spacemacs.rs). The command is a picker over every command whose report is help_report_manual_node (zmax-term/src/commands.rs), which searches the emacs manual's command index the way Info-goto-emacs-command-node does -- `info -o - --index-search=<command> emacs`, with zmax's `_` spelling translated back to emacs's `-` -- and reports emacs's own "Couldn't find documentation for X" when the command has no node. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Name-Help.html#index-C_002dh-F |
| C-h I | Select Input Method | C-h I is describe_input_method, and zmax does have input methods now. describe_input_method (zmax-term/src/commands.rs:64788) defaults to the buffer's current method, completes over the INPUT_METHODS table, errors 'No input method is currently activated' when there is none, and renders quail-help's content: the method's documentation, the KEYS WHILE CHOOSING A TRANSLATION block for methods with candidates, and the full KEY SEQUENCE table. The rest of the family is present too (set_input_method on C-x RET C-\, toggle_input_method, list_input_methods, activate_transient_input_method). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Select-Input-Method.html#index-C_002dh-I |
| C-h K | Key Help | Info-goto-emacs-key-command-node: emacs reads a key, resolves its binding and hands the command to Info-goto-emacs-command-node. `C-h K` was bound to the help browser; it now runs info_goto_emacs_key_command_node (zmax-term/src/commands.rs), the same picker searched by key sequence instead of by name, with the manual-node lookup as its report. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Key-Help.html#index-C_002dh-K |
| C-h L | Language Environments | emacs C-h L (Language Environments) -> describe_language_environment | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Language-Environments.html#index-C_002dh-L |
| C-h P | Package Keywords | `ch_prefix()` now binds `"P" => describe_package` (zmax-term/src/keymap/spacemacs.rs:230), so C-h P prompts for a package and shows its report instead of running the language search. Same reach as C-h p: spacemacs preset in all three modes, emacs preset via add_help_map. Upstream: lisp/help.el:111 `"P" #'describe-package` | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Keywords.html#index-C_002dh-P |
| C-h a | Apropos | C-h a: apropos-command - pattern search over the command set (was describe_command, which describes one chosen command, i.e. C-h f) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Apropos.html#index-C_002dh-a |
| C-h b | Misc Help | emacs C-h b (Misc Help) -> describe_bindings | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Help.html#index-C_002dh-b |
| C-h c | Key Help | describe-key-briefly -> describe_key_briefly (rebound from describe_key) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Key-Help.html#index-C_002dh-c |
| C-h d | Apropos | C-h d: apropos-documentation - pattern search over every doc string | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Apropos.html#index-C_002dh-d |
| C-h e | Misc Help | key:normal:C-h e | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Help.html#index-C_002dh-e |
| C-h f | Name Help | describe-function: doc and key bindings of a chosen command (was describe_command, which is C-h x) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Name-Help.html#index-C_002dh-f |
| C-h g | Help Files | key:normal:C-h g | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-g |
| C-h h | International Chars | key:normal:C-h h | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/International-Chars.html#index-C_002dh-h |
| C-h i | Misc Help | emacs's `info` reads a file name only under a prefix argument (`(interactive (list (if current-prefix-arg (read-file-name "Info file name: " nil nil t)) ...))`), so a bare `C-h i` goes straight to the Info DIRECTORY node -- the menu of every installed manual. `C-h i` ran the apropos picker, which is a different command (info-apropos) and one that cannot reach a manual whose text does not happen to mention what you typed. It runs `info` now: `(dir)Top` with no prefix, the file/node prompt with one, rendered in the Info-mode buffer where n/p/u walk the node pointers and RET follows a menu item. The apropos picker keeps its own name and spacemacs's own `SPC h i`. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Help.html#index-C_002dh-i |
| C-h k | Key Help | emacs C-h k (Key Help) -> describe_key | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Key-Help.html#index-C_002dh-k |
| C-h l | Misc Help | emacs C-h l (Misc Help) -> view_lossage | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Help.html#index-C_002dh-l |
| C-h m | Misc Help | emacs C-h m (Misc Help) -> describe_current_modes | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Help.html#index-C_002dh-m |
| C-h o | Name Help | describe-symbol -> describe_symbol (rebound from describe_command) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Name-Help.html#index-C_002dh-o |
| C-h p | Package Keywords | `ch_prefix()` now binds `"p" => finder_by_keyword` (zmax-term/src/keymap/spacemacs.rs:229), replacing package_search, which lists the configured *languages* (commands.rs:18141) rather than packages by topic keyword. Live in the spacemacs preset (Normal/Select/Insert) and in the emacs preset through add_help_map. package_search stays reachable by name via M-x / the command palette. Upstream: lisp/help.el:110 `"p" #'finder-by-keyword` | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Keywords.html#index-C_002dh-p |
| C-h s | Misc Help | info-lookup-symbol: "Display the definition of SYMBOL, as found in the relevant manual" -- the Info manual registered for the buffer's MAJOR MODE. `C-h S` ran the man-page apropos picker, which is a different corpus entirely. INFO_LOOKUP_MANUALS (zmax-term/src/commands.rs) is emacs's own info-lookup-alist for the `symbol` topic, read out of info-look.el's info-lookup-maybe-add-help calls -- c to (libc, termcap), emacs-lisp to (emacs, elisp, cl), sh to (bash, coreutils, diff, sed, gawk), awk to gawk, perl to perl5, and the rest -- keyed by zmax's major mode, which is the buffer's language. The manuals are searched in the order emacs lists them, so the first index holding the symbol answers, as its :doc-spec list does; the symbol at point is the prompt's default; and a mode emacs registers nothing for reports "don't know where to look" rather than quietly searching something else. The table's order and its freedom from duplicates are unit tested. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Help.html#index-C_002dh-s |
| C-h t | Basic | C-h t help-with-tutorial -> :tutor (was the generic help browser) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic.html#index-C_002dh-t |
| C-h w | Key Help | emacs C-h w (Key Help) -> where_is | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Key-Help.html#index-C_002dh-w |
| C-h x | Name Help | emacs C-h x (Name Help) -> describe_command | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Name-Help.html#index-C_002dh-x |
| C-j | Inserting Text | C-j | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Inserting-Text.html#index-C_002dj |
| C-j (Lisp Interaction mode) | Lisp Interaction | Re-pointed: the old token key:major-elisp:C-j no longer resolves. There is a dedicated `lisp-interaction` major mode now: keymap/major_mode.rs:209 binds `C-j` in it to eval_print_last_sexp, with the comment that lisp-interaction-mode-map binds it ALONE, while major_mode.rs:202 keeps C-M-x (eval-defun) on both elisp and lisp-interaction — evaluate the sexp before point and insert its value into the buffer, which is exactly emacs's Lisp Interaction mode binding, and distinct from plain elisp buffers. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Lisp-Interaction.html#index-C_002dj-_0028Lisp-Interaction-mode_0029 |
| C-j (MS-DOS) | MS-DOS Keyboard | C-j inserts a newline (emacs.rs:149). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/MS_002dDOS-Keyboard.html#index-C_002dj-_0028MS_002dDOS_0029 |
| C-j (TeX mode) | TeX Editing | tex-terminate-paragraph | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/TeX-Editing.html#index-C_002dj-_0028TeX-mode_0029 |
| C-j (and major modes) | Major Modes | Emacs indexes C-j under Major Modes because its binding is major-mode dependent. zmax models a major mode as the document's language and overlays per-language keys (zmax-term/src/keymap/major_mode.rs); C-j in lisp-interaction is eval_print_last_sexp. Retargeted from the stale key:major-elisp:C-j, which stopped resolving when the binding moved to the major-lisp-interaction mode (major_mode.rs:209). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Major-Modes.html#index-C_002dj-_0028and-major-modes_0029 |
| C-k | Killing by Lines | C-k | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Killing-by-Lines.html#index-C_002dk |
| C-k (Gnus Group mode) | Gnus Group Buffer | C-k in the Gnus group buffer kills the group on the current line, which then drops out of the l and L listings and out of ~/.newsrc; the arm is in zmax-term/src/ui/gnus.rs and runs the cited command. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Group-Buffer.html#index-C_002dk-_0028Gnus-Group-mode_0029 |
| C-l | Recentering | C-l | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Recentering.html#index-C_002dl |
| C-mouse-1 | Menu Mouse Clicks | Control + a left press in the editor body opens the buffer menu (the buffer picker) through mouse_buffer_menu, as emacs's C-down-mouse-1 does. Under the vim/spacemacs presets the chord keeps vim's <C-LeftMouse> go-to-tag meaning, so this is the emacs/default preset behaviour. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Menu-Mouse-Clicks.html#index-C_002dmouse_002d1 |
| C-mouse-2 | Menu Mouse Clicks | Control + a middle press opens the Text Properties menu (faces and colors) through facemenu, which is what facemenu.el binds C-down-mouse-2 to; the matching release is consumed so it does not also paste. Non-vim presets only, where the middle button is not vim's paste. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Menu-Mouse-Clicks.html#index-C_002dmouse_002d2 |
| C-mouse-2 (mode line) | Split Window | C-mouse-2 on a window's mode line splits that window into two side-by-side windows and then moves the new boundary to the clicked column (mouse-split-window-horizontally). The press and release must land on the same mode line. Previously this ran hsplit, which stacked the windows instead. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Split-Window.html#index-C_002dmouse_002d2-_0028mode-line_0029 |
| C-mouse-2 (scroll bar) | Split Window | C-mouse-2 on the vertical scroll bar splits the window and puts the divider on the row that was clicked, so the top window keeps the lines above it — the manual's "the line of splitting goes through the place where you click" | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Split-Window.html#index-C_002dmouse_002d2-_0028scroll-bar_0029 |
| C-mouse-3 | Menu Mouse Clicks | With the menu bar turned off, C-mouse-3 pops up the whole menu-bar tree (every menu, not just the mode-specific ones), which is what the emacs manual specifies for a hidden menu bar. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Menu-Mouse-Clicks.html#index-C_002dmouse_002d3 |
| C-mouse-3 (when menu bar is disabled) | Menu Bars | with menu-bar-mode off, C-mouse-3 pops the menu bar's own tree up as a menu, so the menus stay reachable without a row. With the row showing, the binding is left alone, as in emacs | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Menu-Bars.html#index-C_002dmouse_002d3-_0028when-menu-bar-is-disabled_0029 |
| C-n | Moving Point | C-n | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-C_002dn |
| C-n (Calendar mode) | Calendar Unit Motion | emacs Calendar C-n -> zmax Calendar mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Calendar-Unit-Motion.html#index-C_002dn-_0028Calendar-mode_0029 |
| C-n (Dired) | Dired Navigation | emacs Dired C-n -> zmax Dired mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Navigation.html#index-C_002dn-_0028Dired_0029 |
| C-n, when using input methods | Input Methods | quail-next-translation-block: the next row of ten alternatives, keeping the position within the row; the echo area's (i/j) counter follows. Refused on the last row. Otherwise C-n is the ordinary binding. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Input-Methods.html#index-C_002dn_002c-when-using-input-methods |
| C-o | Blank Lines | emacs preset: open-line -> picture_open_line (splits the line at point, leaving the cursor before the break) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Blank-Lines.html#index-C_002do |
| C-o (Buffer Menu) | Several Buffers | key:bufmenu:C-o | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-C_002do-_0028Buffer-Menu_0029 |
| C-o (Dired) | Dired Visiting | key:dired:C-o | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Visiting.html#index-C_002do-_0028Dired_0029 |
| C-o (Occur mode) | Other Repeating Search | occur-mode-display-occurrence: C-o sets the source selection to the occurrence while leaving the *Occur* list open. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Other-Repeating-Search.html#index-C_002do-_0028Occur-mode_0029 |
| C-o (Rmail) | Rmail Output | C-o appends the message, as displayed, to a prompted file (rmail-output-as-seen); `O` stays bound as the alias | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Output.html#index-C_002do-_0028Rmail_0029 |
| C-p | Moving Point | C-p | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-C_002dp |
| C-p (Calendar mode) | Calendar Unit Motion | emacs Calendar C-p -> zmax Calendar mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Calendar-Unit-Motion.html#index-C_002dp-_0028Calendar-mode_0029 |
| C-p (Dired) | Dired Navigation | emacs Dired C-p -> zmax Dired mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Navigation.html#index-C_002dp-_0028Dired_0029 |
| C-p, when using input methods | Input Methods | quail-prev-translation-block: the previous row of ten, refused on the first row. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Input-Methods.html#index-C_002dp_002c-when-using-input-methods |
| C-q | Inserting Text | quoted-insert: the next key is inserted literally (C-q TAB inserts a tab, C-q C-l a form feed) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Inserting-Text.html#index-C_002dq |
| C-r | Basic Isearch | The note called it "a backward search prompt, not an incremental one". It is incremental: rsearch goes through searcher, which opens raw_regex_prompt with the isearch flag set (zmax-term/src/commands.rs), and that is what Prompt::with_isearch arms -- the same state machine `C-s` uses, running backward. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Isearch.html#index-C_002dr |
| C-s | Basic Isearch | C-s | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Isearch.html#index-C_002ds |
| C-t | Transpose | emacs preset: transpose-chars | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Transpose.html#index-C_002dt |
| C-t d (Image-Dired) | Image-Dired | C-t d shows the marked images. Real two-key chord: C-t arms a prefix (Prefix::Image), which also carries C-t i / C-t x / C-t c / C-t e | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Image_002dDired.html#index-C_002dt-d-_0028Image_002dDired_0029 |
| C-u | Arguments | universal-argument: C-u starts a prefix argument (bare C-u = 4, each further C-u multiplies by 4, digits replace it). Bound in the emacs preset, where C-u is emacs's key; in the shipped spacemacs/vim default C-u keeps vim's half-page-up | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Arguments.html#index-C_002du |
| C-u C-/ | Undo | undo with a universal argument is selective undo: it walks the document history back until the region's text differs, winds the history forward again so nothing outside the region moves, and puts just the region back to the older text — the effect of undoing the most recent change inside the region | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Undo.html#index-C_002du-C_002d_002f |
| C-u C-SPC | Mark Ring | C-u C-SPC pops the mark ring: set_mark_command asks cx.prefix_arg() and runs pop_to_mark when an argument is present, instead of setting a mark | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Mark-Ring.html#index-C_002du-C_002dSPC |
| C-u C-c C-w (Fortran mode) | Fortran Columns | C-c C-w reads the universal argument: without one it is fortran-window-create-momentarily (the column-72 marker is taken down by the next key), with one it is fortran-window-create — the marker stays up and you carry on editing with it | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Fortran-Columns.html#index-C_002du-C_002dc-C_002dw-_0028Fortran-mode_0029 |
| C-u C-x C-x | Disabled Transient Mark | C-u C-x C-x exchanges point and mark WITHOUT reactivating the region: flip_selections asks cx.prefix_arg() and leaves Select mode when one is present | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Disabled-Transient-Mark.html#index-C_002du-C_002dx-C_002dx |
| C-u C-x v = | Old Revisions | git_diff now reads cx.prefix_arg() — Emacs's (interactive "P") — exactly as vc.el's `historic` argument works: with a prefix argument it prompts `vc-diff — older revision:` then `Newer revision (default: current source):` and shows `git diff OLD [NEW] -- <file>` for the current file; without one it opens the side-by-side buffer-vs-HEAD viewer. The prefix argument comes from `C-u` in the emacs preset (universal_argument) or `SPC u` in the spacemacs default. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Old-Revisions.html#index-C_002du-C_002dx-v-_003d |
| C-u C-x v D | Old Revisions | The tree-wide half of the same mechanism: vc_root_diff with a prefix argument hands over to vc-root-version-diff, prompting for the two revisions and running `git diff OLD [NEW]` over the whole tree; without one it diffs the working tree against HEAD. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Old-Revisions.html#index-C_002du-C_002dx-v-D |
| C-u M-; | Comment Commands | C-u M-; kills the comment on the line (comment-dwim with an argument): toggle_comments asks cx.prefix_arg() and runs comment_kill when one is present | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Comment-Commands.html#index-C_002du-M_002d_003b |
| C-u TAB | Multi-line Indent | emacs C-u TAB (indent-for-tab-command with a numeric argument). indent_sexp_rigidly (commands.rs) already reindented the current line with the tree-sitter indent and shifted every other line of the parenthetical grouping starting on it by that same delta, leaving lines that start inside a string alone; it was registered but unreachable from a key. smart_tab now tests cx.prefix_arg() before indent-line-function and dispatches to it, so TAB under a prefix argument is the grouping shifter whatever function plain TAB would run — matching the Multi-line Indent manual node: 'TAB with a numeric argument reindents the current line as usual, then reindents by the same amount all the lines in the parenthetical grouping starting on the current line.' TAB reaches smart_tab through the emacs preset's tab -> emmet_expand, which falls back to it. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Multi_002dline-Indent.html#index-C_002du-TAB |
| C-v | Moving Point | C-v | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-C_002dv |
| C-v (Calendar mode) | Scroll Calendar | key:calendar:C-v | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Scroll-Calendar.html#index-C_002dv-_0028Calendar-mode_0029 |
| C-w | Other Kill Commands | emacs preset: kill-region -> delete_selection | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Other-Kill-Commands.html#index-C_002dw |
| C-x # | Invoking emacsclient | C-x #: server-edit - release the waiting client (was the command_palette fallback; there is an emacs server now) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Invoking-emacsclient.html#index-C_002dx-_0023 |
| C-x $ | Selective Display | set-selective-display (was fold_close_all) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Selective-Display.html#index-C_002dx-_0024 |
| C-x ' | expand-abbrev — expand the abbrev before point | emacs C-x ' (expand-abbrev — expand the abbrev before point) -> expand_abbrev | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Expanding-Abbrevs.html |
| C-x ( | Basic Keyboard Macro | The note pre-dated the split. `C-x (` is kmacro_start_macro and `C-x )` is kmacro_end_macro in the shipped preset (keymap/spacemacs.rs, which replaced the single record_macro toggle that used to serve both), and `C-u C-x (` appends to the last macro as emacs's prefix arg does. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Keyboard-Macro.html#index-C_002dx-_0028 |
| C-x ) | Basic Keyboard Macro | kmacro-end-macro: ends the definition, erroring when no macro is being recorded (was the record_macro toggle). C-x ( stays the toggle: there is no kmacro-start-macro port | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Keyboard-Macro.html#index-C_002dx-_0029 |
| C-x * | calc-dispatch — Calc calculator dispatch prefix | emacs C-x * (calc-dispatch) -> zmax calc opens the RPN Calc stack calculator | ported | https://www.gnu.org/software/emacs/manual/html_node/calc/Starting-Calc.html |
| C-x + | Change Window | emacs C-x + (Change Window) -> resize_view_equalize | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Window.html#index-C_002dx-_002b |
| C-x - | Change Window | shrink-window-if-larger-than-buffer: fits the window height to its buffer's text (was resize_view_shorter, one step) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Window.html#index-C_002dx-_002d |
| C-x . | Fill Prefix | C-x . set-fill-prefix (was command_palette) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Fill-Prefix.html#index-C_002dx-_002e |
| C-x 0 | Change Window | emacs C-x 0 (Change Window) -> wclose | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Window.html#index-C_002dx-0 |
| C-x 1 | Change Window | emacs C-x 1 (Change Window) -> wonly | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Window.html#index-C_002dx-1 |
| C-x 2 | Split Window | emacs C-x 2 (Split Window) -> hsplit | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Split-Window.html#index-C_002dx-2 |
| C-x 3 | Split Window | emacs C-x 3 (Split Window) -> vsplit | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Split-Window.html#index-C_002dx-3 |
| C-x 4 | Pop Up Window | C-x 4 (other-window prefix); C-x 4 4 maps other-window-prefix. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Pop-Up-Window.html#index-C_002dx-4 |
| C-x 4 . | Looking Up Identifiers | xref-find-definitions-other-window | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Looking-Up-Identifiers.html#index-C_002dx-4-_002e |
| C-x 4 0 | Change Window | kill-buffer-and-window -> delete_window_and_buffer (was wclose, which left the buffer alive) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Window.html#index-C_002dx-4-0 |
| C-x 4 4 | Pop Up Window | C-x 4 4: other-window-prefix - redirect the NEXT command's buffer display into another window (was hsplit) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Pop-Up-Window.html#index-C_002dx-4-4 |
| C-x 4 C-o | Pop Up Window | C-x 4 C-o: display-buffer - show a buffer in another window WITHOUT selecting it (was buffer_picker, which switches to it) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Pop-Up-Window.html#index-C_002dx-4-C_002do |
| C-x 4 a | Change Log Commands | add-change-log-entry-other-window (was command_palette) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Log-Commands.html#index-C_002dx-4-a |
| C-x 4 b | Select Buffer | switch-to-buffer-other-window: splits and shows the chosen buffer in the OTHER window (was buffer_picker, which is C-x b) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Select-Buffer.html#index-C_002dx-4-b |
| C-x 4 c | Indirect Buffers | emacs C-x 4 c (Indirect Buffers) -> clone_indirect_buffer | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Indirect-Buffers.html#index-C_002dx-4-c |
| C-x 4 f (FFAP) | FFAP | After M-x ffap-bindings, C-x 4 f visits the file named at point in another window: an existing other window is reused, and only a sole window is split. The guess is read in the window point is in. With no file name at point the chord falls back to the ordinary find-file-other-window picker, matching emacs's ffap commands prompting when the guess is empty. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/FFAP.html#index-C_002dx-4-f-_0028FFAP_0029 |
| C-x 4 m | Sending Mail | compose-mail-other-window opens the draft in ANOTHER window. The note said it used the current one; it did split, but unconditionally (`hsplit-new`), so composing from a two-window layout left three. "Other window" is emacs's display-buffer-use-some-window, not "a new window": an existing other window is reused and one is split off only when this is the sole window, which is the rule find-file-other-window's own docstring states ("creates a new window or reuses an existing one"). It goes through display_other_window now, the same helper the other `C-x 4` commands use. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Sending-Mail.html#index-C_002dx-4-m |
| C-x 5 | Creating Frames | the C-x 5 frame prefix: 2 make-frame-command, 0 delete-frame, 1 delete-other-frames, o other-frame, b switch-to-buffer-other-frame, d dired-other-frame, f find-file-other-frame, r find-file-read-only-other-frame, u undelete-frame. Present in the vim/spacemacs default preset already; added to the emacs preset by this batch | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Creating-Frames.html#index-C_002dx-5 |
| C-x 5 . | Looking Up Identifiers | zmax has frames now, so this really does jump in another one: xref_find_definitions_other_frame (zmax-term/src/commands.rs:49372) arms `pending_display = DisplayTarget::Frame` and then runs the ordinary definition jump with Action::Replace, which Editor::switch redirects into a new frame. The frame surface exists (make_frame_command C-x 5 2, clone_frame C-x 5 c, delete_frame C-x 5 0, other_frame C-x 5 o, Editor::new_frame with its own window tree). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Looking-Up-Identifiers.html#index-C_002dx-5-_002e |
| C-x 5 0 | Frame Commands | C-x 5 0: delete-frame - zmax has real frames now | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Frame-Commands.html#index-C_002dx-5-0 |
| C-x 5 1 | Frame Commands | C-x 5 1: delete-other-frames | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Frame-Commands.html#index-C_002dx-5-1 |
| C-x 5 2 | Creating Frames | C-x 5 2: make-frame-command | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Creating-Frames.html#index-C_002dx-5-2 |
| C-x 5 5 | Creating Frames | C-x 5 5: other-frame-prefix | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Creating-Frames.html#index-C_002dx-5-5 |
| C-x 5 b | Select Buffer | C-x 5 b: switch-to-buffer-other-frame | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Select-Buffer.html#index-C_002dx-5-b |
| C-x 5 c | Creating Frames | C-x 5 c: clone-frame | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Creating-Frames.html#index-C_002dx-5-c |
| C-x 5 d | Dired Enter | C-x 5 d: dired-other-frame | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Enter.html#index-C_002dx-5-d |
| C-x 5 f | Visiting | C-x 5 f: find-file-other-frame | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Visiting.html#index-C_002dx-5-f |
| C-x 5 f (FFAP) | FFAP | After M-x ffap-bindings, C-x 5 f makes a frame and visits the file named at point in it (ffap-other-frame); with nothing at point it stays the ordinary find-file-other-frame picker. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/FFAP.html#index-C_002dx-5-f-_0028FFAP_0029 |
| C-x 5 m | Sending Mail | compose-mail-other-frame: the draft opens in a new frame (was :compose-mail in the current window; zmax has frames now) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Sending-Mail.html#index-C_002dx-5-m |
| C-x 5 o | Frame Commands | C-x 5 o: other-frame | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Frame-Commands.html#index-C_002dx-5-o |
| C-x 5 r | Creating Frames | C-x 5 r: find-file-read-only-other-frame | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Creating-Frames.html#index-C_002dx-5-r |
| C-x 5 u | Frame Commands | C-x 5 u: undelete-frame (needs undelete-frame-mode on, exactly as in Emacs) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Frame-Commands.html#index-C_002dx-5-u |
| C-x 6 1 | Two-Column | 2C-merge | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Two_002dColumn.html#index-C_002dx-6-1 |
| C-x 6 2 | Two-Column | 2C-two-columns | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Two_002dColumn.html#index-C_002dx-6-2 |
| C-x 6 RET | Two-Column | 2C-newline | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Two_002dColumn.html#index-C_002dx-6-RET |
| C-x 6 b | Two-Column | 2C-associate-buffer | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Two_002dColumn.html#index-C_002dx-6-b |
| C-x 6 d | Two-Column | 2C-dissociate | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Two_002dColumn.html#index-C_002dx-6-d |
| C-x 6 s | Two-Column | 2C-split | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Two_002dColumn.html#index-C_002dx-6-s |
| C-x 8 RET | Input Methods | emacs C-x 8 RET (Input Methods) -> unicode_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Input-Methods.html#index-C_002dx-8-RET |
| C-x 8 RET (Incremental Search) | Special Isearch | `C-x 8 RET` adds a character to the search string by its Unicode name. The key sequence is wired into the search prompt now. isearch-mode-map keeps `C-x 8` -- emacs's insert-char prefix -- live inside a search; zmax's prompt uses `C-x` as the minibuffer completion prefix, so the `8` leg is opened only while a search is running and everything else under `C-x` is untouched (Prompt::pending_ctrl_x_8, zmax-term/src/ui/prompt.rs). Both chords are listed in ISEARCH_BINDINGS and their prefixes in ISEARCH_PREFIXES, so isearch-describe-bindings shows them and isearch-describe-key goes on reading after `C-x 8`. The name lookup is the Unicode Character Database (zmax-core/src/unicode_names), not the digraph table it used to be, so LATIN SMALL LETTER A WITH DIAERESIS resolves as well as the `a:` mnemonic. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Isearch.html#index-C_002dx-8-RET-_0028Incremental-Search_0029 |
| C-x 8 e | Input Methods | The old evidence (key:normal:C-x 8 e) no longer resolves because C-x 8 e is a prefix now, which is the point: the emoji map is there — `C-x 8 e e`/`i`/`l`/`s` -> emoji_list (a picker over the 3773-entry EMOJI table, commands.rs:39034-42808, inserting through a real undoable Transaction), `C-x 8 e d` -> emoji_describe, `C-x 8 e r` -> emoji_recent (commands.rs:45204, over the list emoji_add_recent fills on each insert). `C-x 8 RET` remains the general unicode picker. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Input-Methods.html#index-C_002dx-8-e |
| C-x 8 e RET (Incremental Search) | Special Isearch | `C-x 8 e RET` adds an emoji to the search string by name. The key sequence is wired into the search prompt now. isearch-mode-map keeps `C-x 8` -- emacs's insert-char prefix -- live inside a search; zmax's prompt uses `C-x` as the minibuffer completion prefix, so the `8` leg is opened only while a search is running and everything else under `C-x` is untouched (Prompt::pending_ctrl_x_8, zmax-term/src/ui/prompt.rs). Both chords are listed in ISEARCH_BINDINGS and their prefixes in ISEARCH_PREFIXES, so isearch-describe-bindings shows them and isearch-describe-key goes on reading after `C-x 8`. The name database behind it is zmax's 3773-entry emoji table (glyph, name, group, subgroup), offered as a completing read on the name column the way emacs's emoji--read-emoji does, and the prefix argument repeats the insertion as isearch.el's `(interactive "p")` does. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Isearch.html#index-C_002dx-8-e-RET-_0028Incremental-Search_0029 |
| C-x ; | Options for Comments | comment-set-column is ported, not a command_palette fallback: comment_set_column (zmax-term/src/commands.rs:38024) reproduces newcomment.el's cond — with no prefix it stores the cursor's display column in COMMENT_COLUMN and echoes emacs's own 'Comment column set to %d'; with a prefix it runs comment-search-backward (the nearest comment starting above this line, commands.rs:38040-38055), takes its column and then comment-indents this line to it. The negative-prefix comment-kill branch is not reachable (zmax has no negative prefix argument). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Options-for-Comments.html#index-C_002dx-_003b |
| C-x < | Horizontal Scrolling | scroll-left -> scroll_half_column_right (view moves right) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Horizontal-Scrolling.html#index-C_002dx-_003c |
| C-x = | Position Info | emacs C-x = (Position Info) -> file_info | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Position-Info.html#index-C_002dx-_003d |
| C-x =, and international characters | International Chars | key:normal:C-x = | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/International-Chars.html#index-C_002dx-_003d_002c-and-international-characters |
| C-x > | Horizontal Scrolling | scroll-right -> scroll_half_column_left | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Horizontal-Scrolling.html#index-C_002dx-_003e |
| C-x C-+ | Text Scale | text-scale-adjust (increase) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dx-C_002d_002b |
| C-x C-- | Text Scale | text-scale-adjust (decrease) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dx-C_002d_002d |
| C-x C-0 | Text Scale | text-scale-adjust (reset) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dx-C_002d0 |
| C-x C-; | Comment Commands | emacs C-x C-; (Comment Commands) -> toggle_comments | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Comment-Commands.html#index-C_002dx-C_002d_003b |
| C-x C-= | Text Scale | text-scale-adjust (increase) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dx-C_002d_003d |
| C-x C-M-+ | Text Scale | text-scale-adjust (increase) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dx-C_002dM_002d_002b |
| C-x C-M-- | Text Scale | text-scale-adjust (decrease) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dx-C_002dM_002d_002d |
| C-x C-M-0 | Text Scale | text-scale-adjust (reset) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dx-C_002dM_002d0 |
| C-x C-M-= | Text Scale | text-scale-adjust (increase) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dx-C_002dM_002d_003d |
| C-x C-SPC | Global Mark Ring | pop-global-mark -> pop_to_mark (mark ring) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Global-Mark-Ring.html#index-C_002dx-C_002dSPC |
| C-x C-a (GUD) | Commands of GUD | C-x C-a (GUD prefix), 15 chords routed to the DAP commands: C-s step-in, C-n next, C-r continue, C-d remove-breakpoint, C-b break. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Commands-of-GUD.html#index-C_002dx-C_002da-_0028GUD_0029 |
| C-x C-a C-b | Commands of GUD | C-x C-a C-b is dap_set_breakpoint now, not the toggle: commands.rs:70950 reads the cursor line, returns early when a breakpoint is already there (commands.rs:70964-70970) and otherwise sets one — gud-break's `break %f:%l`, which sets and never clears. The clearing half is C-x C-a C-d -> dap_remove_breakpoint. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Commands-of-GUD.html#index-C_002dx-C_002da-C_002db |
| C-x C-a C-j (GUD) | Commands of GUD | gud-jump: set the debugger's execution point to the current source line | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Commands-of-GUD.html#index-C_002dx-C_002da-C_002dj-_0028GUD_0029 |
| C-x C-a C-w (GUD) | Watch Expressions | gud-watch: watch the expression at point | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Watch-Expressions.html#index-C_002dx-C_002da-C_002dw-_0028GUD_0029 |
| C-x C-b | List Buffers | list-buffers: the Buffer Menu, with its own select/mark/delete/save keys (was buffer_picker, which is C-x b's fuzzy switcher) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/List-Buffers.html#index-C_002dx-C_002db |
| C-x C-c | Exiting | emacs C-x C-c (Exiting) -> write-quit-all | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Exiting.html#index-C_002dx-C_002dc |
| C-x C-c (customization buffer) | Changing a Variable | the manual's index anchor at this node is `C-x C-c (customization buffer)` while the prose it marks reads "The command C-x C-s (Custom-save) is like using the [Save for Future Sessions] button" (custom.texi has @kindex C-x C-c next to @kindex C-c C-c for that paragraph). Both keys are live in zmax's customization buffer: C-x C-s runs Custom-save, and C-x C-c leaves the buffer through the custom-prompt-customize-unsaved-options query, which is what C-x C-c does in emacs with that hook installed. Real two-key chords, armed by the C-x prefix in ui/settings.rs. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Changing-a-Variable.html#index-C_002dx-C_002dc-_0028customization-buffer_0029 |
| C-x C-d | Directories | emacs C-x C-d (Directories) -> file_picker_in_current_directory | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Directories.html#index-C_002dx-C_002dd |
| C-x C-e | Lisp Eval | emacs C-x C-e (Lisp Eval) -> eval_elisp_line | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Lisp-Eval.html#index-C_002dx-C_002de |
| C-x C-f | Visiting | emacs C-x C-f (Visiting) -> file_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Visiting.html#index-C_002dx-C_002df |
| C-x C-f (FFAP) | FFAP | M-x ffap-bindings sets Editor::ffap_bindings, and file_picker (the command C-x C-f runs) then hands over to find-file-at-point — the same command remap emacs installs, so every key bound to find-file changes with it. Filenames, ~ expansion, URLs and a trailing :LINE are all recognised by the guesser; with nothing at point the picker opens as before. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/FFAP.html#index-C_002dx-C_002df-_0028FFAP_0029 |
| C-x C-j | Dired Enter | dired-jump: Dired on the current buffer's directory (was a file picker seeded with that directory) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Enter.html#index-C_002dx-C_002dj |
| C-x C-k C-a | Keyboard Macro Counter | emacs C-x C-k C-a (Keyboard Macro Counter) -> kmacro_add_counter | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Counter.html#index-C_002dx-C_002dk-C_002da |
| C-x C-k C-c | Keyboard Macro Counter | kmacro-set-counter | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Counter.html#index-C_002dx-C_002dk-C_002dc |
| C-x C-k C-e | Edit Keyboard Macro | kmacro-edit-macro (edit the last macro) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Edit-Keyboard-Macro.html#index-C_002dx-C_002dk-C_002de |
| C-x C-k C-f | Keyboard Macro Counter | kmacro-set-format | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Counter.html#index-C_002dx-C_002dk-C_002df |
| C-x C-k C-i | Keyboard Macro Counter | emacs C-x C-k C-i (Keyboard Macro Counter) -> kmacro_insert_counter | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Counter.html#index-C_002dx-C_002dk-C_002di |
| C-x C-k C-k | Keyboard Macro Ring | kmacro-end-or-call-macro-repeat | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Ring.html#index-C_002dx-C_002dk-C_002dk |
| C-x C-k C-n | Keyboard Macro Ring | emacs C-x C-k C-n (Keyboard Macro Ring) -> kmacro_ring_next | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Ring.html#index-C_002dx-C_002dk-C_002dn |
| C-x C-k C-p | Keyboard Macro Ring | emacs C-x C-k C-p (Keyboard Macro Ring) -> kmacro_ring_prev | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Ring.html#index-C_002dx-C_002dk-C_002dp |
| C-x C-k RET | Edit Keyboard Macro | kmacro-edit-macro (edit the last macro) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Edit-Keyboard-Macro.html#index-C_002dx-C_002dk-RET |
| C-x C-k SPC | Keyboard Macro Step-Edit | Same as emacs.keybinding.c_x_c_k_spc: the stepper is real and the whole kmacro-step-edit-map is honoured. Both remaining divergences are closed - TAB (act-repeat) continues on the *command* now, resolving each pending key through the live keymap and comparing command identity the way emacs does (it binds C-n and <down> both to next-line), and recording trims the whole terminator chord, so `C-x ( x x C-x )` records the two keys emacs records rather than three with a trailing <C-x>. Pinned by `tests/test/spacemacs_states.rs::kmacro_step_edit_tab_repeats_on_the_command_not_the_key` and `::kmacro_recording_drops_the_whole_terminator_chord`. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Step_002dEdit.html#index-C_002dx-C_002dk-SPC |
| C-x C-k b | Save Keyboard Macro | It binds live now: kmacro_bind_to_key (zmax-term/src/commands.rs:52939) reads the next key, builds the `@<macro>` command form, parses it first so an unreplayable macro never reaches the config, and installs it through keymap_write over KEYMAP_GLOBAL_MODES — so the key replays the last macro from the very next press, and the binding is persisted. The old note ('reports the config binding instead of binding it live') is stale. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Save-Keyboard-Macro.html#index-C_002dx-C_002dk-b |
| C-x C-k d | Basic Keyboard Macro | emacs C-x C-k d (Basic Keyboard Macro) -> kmacro_ring_delete | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Keyboard-Macro.html#index-C_002dx-C_002dk-d |
| C-x C-k e | Edit Keyboard Macro | `C-x C-k e` prompts for which macro to edit (last / lossage / a named macro or register) and opens emacs's `*Edit Macro*` buffer on it - edmacro.el's own template (the `;; Keyboard Macro Editor.` header, `;; Original keys:`, `Command:`/`Key:` and the `Macro:` section), in `edmacro` major mode. That is where edmacro's map lives, keyed on the mode in keymap/major_mode.rs: `C-c C-c` (edmacro-finish-edit) compiles what the buffer now says and makes it the last macro, `C-c C-q` inserts a literal key's written name, `C-c C-r` sets the macro from the region's lines. It used to be a one-line minibuffer editor, which left the last two commands with no buffer to run in. Pinned by `tests/test/spacemacs_states.rs::edit_kbd_macro_opens_the_edit_macro_buffer` and `::edmacro_finish_edit_installs_the_edited_macro`. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Edit-Keyboard-Macro.html#index-C_002dx-C_002dk-e |
| C-x C-k l | Edit Keyboard Macro | kmacro-edit-lossage | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Edit-Keyboard-Macro.html#index-C_002dx-C_002dk-l |
| C-x C-k n | Save Keyboard Macro | kmacro-name-last-macro | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Save-Keyboard-Macro.html#index-C_002dx-C_002dk-n |
| C-x C-k r | Basic Keyboard Macro | apply-macro-to-region-lines | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Keyboard-Macro.html#index-C_002dx-C_002dk-r |
| C-x C-k x | Keyboard Macro Registers | emacs C-x C-k x (Keyboard Macro Registers) -> kmacro_to_register | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Registers.html#index-C_002dx-C_002dk-x |
| C-x C-l | Case | emacs C-x C-l (Case) -> switch_to_lowercase | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Case.html#index-C_002dx-C_002dl |
| C-x C-n | Moving Point | C-x C-n set-goal-column (was command_palette) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-C_002dx-C_002dn |
| C-x C-o | Blank Lines | delete-blank-lines | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Blank-Lines.html#index-C_002dx-C_002do |
| C-x C-p | Pages | mark-page (rebound from select_all) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Pages.html#index-C_002dx-C_002dp |
| C-x C-q | Misc Buffer | emacs C-x C-q (Misc Buffer) -> toggle_readonly | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Buffer.html#index-C_002dx-C_002dq |
| C-x C-r | Visiting | The note pre-dated the command. `C-x C-r` is find_file_read_only in both the spacemacs and emacs presets, and the file really opens read-only: emacs_mouse::find_file_read_only prompts emacs's "Find file read-only: ", opens the path and sets Document::readonly, reporting "<path> (read-only)". | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Visiting.html#index-C_002dx-C_002dr |
| C-x C-r (FFAP) | FFAP | C-x C-r now runs find-file-read-only (a new command: pick a file, and the buffer arrives with doc.readonly set) instead of the plain picker; with ffap-bindings installed it hands over to ffap-read-only, visiting the file named at point read-only. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/FFAP.html#index-C_002dx-C_002dr-_0028FFAP_0029 |
| C-x C-s | Save Commands | emacs C-x C-s (Save Commands) -> write | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Save-Commands.html#index-C_002dx-C_002ds |
| C-x C-s (Custom Themes buffer) | Custom Themes | C-x C-s in the Color Scheme page (zmax's *Custom Themes* buffer) is custom-theme-save: it writes the enabled theme into config.toml as `theme = "<name>"`, preserving every other key, so future sessions start with it. Picking a theme from the list now enables it for the current session only and is marked '*' until saved; the [Save Theme Settings] button runs the same thing. Real two-key chord, armed by the C-x prefix in ui/theme_editor.rs. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Custom-Themes.html#index-C_002dx-C_002ds-_0028Custom-Themes-buffer_0029 |
| C-x C-t | Transpose | transpose-lines | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Transpose.html#index-C_002dx-C_002dt |
| C-x C-t (Kmacro Menu) | Kmacro Menu | C-x C-t transposes the macro with the one above (a real two-key chord; the parser exposes single keys, so the prefix and the t alias are cited) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Kmacro-Menu.html#index-C_002dx-C_002dt-_0028Kmacro-Menu_0029 |
| C-x C-u | Case | emacs C-x C-u (Case) -> switch_to_uppercase | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Case.html#index-C_002dx-C_002du |
| C-x C-v | Visiting | find-alternate-file: the chosen file REPLACES this buffer, closing it (was file_picker, which opens alongside) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Visiting.html#index-C_002dx-C_002dv |
| C-x C-v (FFAP) | FFAP | After M-x ffap-bindings, C-x C-v visits the file named at point in place of this buffer and kills the buffer it replaced (find-alternate-file's distinguishing behaviour); a buffer with unsaved changes is kept and reported instead. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/FFAP.html#index-C_002dx-C_002dv-_0028FFAP_0029 |
| C-x C-w | Save Commands | emacs preset: write-file -> :write | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Save-Commands.html#index-C_002dx-C_002dw |
| C-x C-x | Setting Mark | emacs C-x C-x (Setting Mark) -> flip_selections | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Setting-Mark.html#index-C_002dx-C_002dx |
| C-x C-x, in rectangle-mark-mode | Rectangles | C-x C-x in rectangle-mark-mode: opposite corner | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html#index-C_002dx-C_002dx_002c-in-rectangle_002dmark_002dmode |
| C-x C-z | External Lisp | emacs C-x C-z (External Lisp) -> suspend | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/External-Lisp.html#index-C_002dx-C_002dz |
| C-x DEL | Sentences | backward-kill-sentence | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Sentences.html#index-C_002dx-DEL |
| C-x DOWN (completion) | Completion Commands | minibuffer-complete-defaults | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Completion-Commands.html#index-C_002dx-DOWN-_0028completion_0029 |
| C-x ESC ESC | Repetition | emacs C-x ESC ESC (Repetition) -> command_history_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Repetition.html#index-C_002dx-ESC-ESC |
| C-x LEFT | Select Buffer | emacs C-x LEFT (Select Buffer) -> goto_previous_buffer | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Select-Buffer.html#index-C_002dx-LEFT |
| C-x RET | International Chars | C-x RET (coding-system prefix); C-x RET c maps universal-coding-system-argument. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/International-Chars.html#index-C_002dx-RET |
| C-x RET C-\ | Select Input Method | set-input-method, grafted onto the existing C-x RET coding-system map rather than replacing it. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Select-Input-Method.html#index-C_002dx-RET-C_002d_005c |
| C-x RET F | File Name Coding | set-file-name-coding-system (was the command_palette fallback) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/File-Name-Coding.html#index-C_002dx-RET-F |
| C-x RET X | Communication Coding | set-next-selection-coding-system (was the command_palette fallback) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Communication-Coding.html#index-C_002dx-RET-X |
| C-x RET c | Text Coding | universal-coding-system-argument: the next command reads/writes in the chosen coding system (was the command_palette fallback) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Coding.html#index-C_002dx-RET-c |
| C-x RET f | Text Coding | set-buffer-file-coding-system (was the command_palette fallback; test expectation corrected) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Coding.html#index-C_002dx-RET-f |
| C-x RET k | Terminal Coding | set-keyboard-coding-system (was the command_palette fallback) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Terminal-Coding.html#index-C_002dx-RET-k |
| C-x RET p | Communication Coding | set-buffer-process-coding-system (was the command_palette fallback) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Communication-Coding.html#index-C_002dx-RET-p |
| C-x RET r | Text Coding | revert-buffer-with-coding-system (was command_palette) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Coding.html#index-C_002dx-RET-r |
| C-x RET t | Terminal Coding | set-terminal-coding-system (was the command_palette fallback) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Terminal-Coding.html#index-C_002dx-RET-t |
| C-x RET x | Communication Coding | set-selection-coding-system (was the command_palette fallback) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Communication-Coding.html#index-C_002dx-RET-x |
| C-x RIGHT | Select Buffer | emacs C-x RIGHT (Select Buffer) -> goto_next_buffer | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Select-Buffer.html#index-C_002dx-RIGHT |
| C-x SPC | rectangle-mark-mode — toggle a rectangular region | rectangle-mark-mode: makes the region rectangular so the rectangle commands act on the block (was visual_block_mode, vim's mode switch) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html |
| C-x TAB | Indentation Commands | C-x TAB: indent-rigidly - shift the region N columns as a block (was `indent`, which re-indents each line by the language's rules) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Indentation-Commands.html#index-C_002dx-TAB |
| C-x TAB (Enriched mode) | Enriched Indentation | increase-left-margin | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Enriched-Indentation.html#index-C_002dx-TAB-_0028Enriched-mode_0029 |
| C-x UP (completion) | Completion Commands | minibuffer-complete-history | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Completion-Commands.html#index-C_002dx-UP-_0028completion_0029 |
| C-x [ | Pages | backward-page (rebound from page_up, which scrolls a screenful) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Pages.html#index-C_002dx-_005b |
| C-x [ (Calendar mode) | Calendar Unit Motion | C-x [ moves back one year (calendar-backward-year). Real two-key chord: C-x arms Prefix::CtrlX (which also carries C-x ], C-x <, C-x > and C-x C-x) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Calendar-Unit-Motion.html#index-C_002dx-_005b-_0028Calendar-mode_0029 |
| C-x [ (DocView mode) | DocView Navigation | C-x [ doc-view-previous-page. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/DocView-Navigation.html#index-C_002dx-_005b-_0028DocView-mode_0029 |
| C-x \ | Select Input Method | activate-transient-input-method: the method translates one chunk and then switches itself off again, restoring the previous method. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Select-Input-Method.html#index-C_002dx-_005c |
| C-x ] | Pages | forward-page (rebound from page_down) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Pages.html#index-C_002dx-_005d |
| C-x ] (Calendar mode) | Calendar Unit Motion | C-x ] moves forward one year (calendar-forward-year) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Calendar-Unit-Motion.html#index-C_002dx-_005d-_0028Calendar-mode_0029 |
| C-x ] (DocView mode) | DocView Navigation | C-x ] doc-view-next-page. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/DocView-Navigation.html#index-C_002dx-_005d-_0028DocView-mode_0029 |
| C-x ^ | Change Window | emacs C-x ^ (Change Window) -> resize_view_taller | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Window.html#index-C_002dx-_005e |
| C-x ` | Compilation Mode | emacs C-x ` (Compilation Mode) -> run_next_error | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Compilation-Mode.html#index-C_002dx-_0060 |
| C-x a g | Defining Abbrevs | emacs C-x a g (Defining Abbrevs) -> define_abbrev | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Defining-Abbrevs.html#index-C_002dx-a-g |
| C-x a i g | Defining Abbrevs | inverse-add-global-abbrev | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Defining-Abbrevs.html#index-C_002dx-a-i-g |
| C-x b | Select Buffer | emacs C-x b (Select Buffer) -> buffer_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Select-Buffer.html#index-C_002dx-b |
| C-x d | Dired Enter | dired: the Dired directory editor itself (was file_picker_in_current_directory, a fuzzy picker) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Enter.html#index-C_002dx-d |
| C-x d (FFAP) | FFAP | After M-x ffap-bindings, C-x d opens Dired on the file/directory name at point (dired-at-point) instead of on the workspace root; with nothing at point the ordinary Dired opens. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/FFAP.html#index-C_002dx-d-_0028FFAP_0029 |
| C-x e | Basic Keyboard Macro | kmacro-end-and-call-macro | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Keyboard-Macro.html#index-C_002dx-e |
| C-x f | Fill Commands | set-fill-column, 0 args = the cursor column (rebound from toggle_fill_column) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Fill-Commands.html#index-C_002dx-f |
| C-x h | Marking Objects | emacs C-x h (Marking Objects) -> select_all | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marking-Objects.html#index-C_002dx-h |
| C-x i | Misc File Ops | C-x i insert-file (prompts for the file) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-File-Ops.html#index-C_002dx-i |
| C-x k | Kill Buffer | emacs C-x k (Kill Buffer) -> buffer-close | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Kill-Buffer.html#index-C_002dx-k |
| C-x l | Pages | count-lines-page (rebound from document_stats) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Pages.html#index-C_002dx-l |
| C-x m | Sending Mail | C-x m compose-mail (was command_palette) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Sending-Mail.html#index-C_002dx-m |
| C-x n d | Narrowing | emacs C-x n d (Narrowing) -> narrow_to_function | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Narrowing.html#index-C_002dx-n-d |
| C-x n n | Narrowing | emacs C-x n n (Narrowing) -> narrow_to_region | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Narrowing.html#index-C_002dx-n-n |
| C-x n p | Narrowing | emacs C-x n p (Narrowing) -> narrow_to_page | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Narrowing.html#index-C_002dx-n-p |
| C-x n w | Narrowing | emacs C-x n w (Narrowing) -> widen | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Narrowing.html#index-C_002dx-n-w |
| C-x o | Other Window | emacs C-x o (Other Window) -> rotate_view | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Other-Window.html#index-C_002dx-o |
| C-x q | Keyboard Macro Query | kbd-macro-query is ported, not a command_palette fallback: kbd_macro_query (zmax-term/src/commands.rs:75314) does nothing but record itself while a macro is being defined (as the manual describes) and, while one is running, parks the replay (emacs_misc::macro_query_raise) and asks. kbd_macro_query_ask (commands.rs:75332) reads the manual's four answers — SPC/y continue, DEL/n skip the rest of this repetition, RET/q cancel the remaining repetitions, C-r enter a recursive edit — re-asking on anything else, and kbd_macro_resume (commands.rs:75362) picks the parked macro back up. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Query.html#index-C_002dx-q |
| C-x r + | Number Registers | emacs C-x r + (Number Registers) -> increment_register | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Number-Registers.html#index-C_002dx-r-_002b |
| C-x r M | Bookmarks | bookmark-set-no-overwrite | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Bookmarks.html#index-C_002dx-r-M |
| C-x r M-w | Rectangles | emacs C-x r M-w (Rectangles) -> copy_rectangle_as_kill | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html#index-C_002dx-r-M_002dw |
| C-x r N | Rectangles | `C-x r N` runs `:rectangle-number-lines` now (keymap/spacemacs.rs, keymap/emacs.rs): the numbers go in at the rectangle's left edge with emacs's START/FORMAT arguments. The chord ran `:number-lines`, which numbers whole lines - the one table row each map was missing. Pinned by `tests/test/spacemacs_states.rs::c_x_r_n_numbers_at_the_rectangle_edge`, which marks a rectangle two columns in and asserts the first two columns of every line survive. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html#index-C_002dx-r-N |
| C-x r SPC | Position Registers | emacs C-x r SPC (Position Registers) -> point_to_register | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Position-Registers.html#index-C_002dx-r-SPC |
| C-x r b | Bookmarks | emacs C-x r b (Bookmarks) -> bookmark_jump | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Bookmarks.html#index-C_002dx-r-b |
| C-x r c | Rectangles | emacs C-x r c (Rectangles) -> clear_rectangle | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html#index-C_002dx-r-c |
| C-x r d | Rectangles | emacs C-x r d (Rectangles) -> delete_rectangle | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html#index-C_002dx-r-d |
| C-x r f | Configuration Registers | frameset-to-register: zmax runs in one terminal frame, so the frameset is that frame's window configuration, restored by C-x r j | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Configuration-Registers.html#index-C_002dx-r-f |
| C-x r i | Text Registers | emacs C-x r i (Text Registers) -> emacs_insert_register | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Registers.html#index-C_002dx-r-i |
| C-x r j | Position Registers | emacs C-x r j (Position Registers) -> jump_to_register | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Position-Registers.html#index-C_002dx-r-j |
| C-x r k | Rectangles | emacs C-x r k (Rectangles) -> kill_rectangle | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html#index-C_002dx-r-k |
| C-x r l | Bookmarks | list-bookmarks | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Bookmarks.html#index-C_002dx-r-l |
| C-x r m | Bookmarks | emacs C-x r m (Bookmarks) -> bookmark_set | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Bookmarks.html#index-C_002dx-r-m |
| C-x r n | Number Registers | emacs C-x r n (Number Registers) -> number_to_register | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Number-Registers.html#index-C_002dx-r-n |
| C-x r o | Rectangles | open-rectangle (was clear_rectangle, which blanks instead of shifting text right) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html#index-C_002dx-r-o |
| C-x r r | Rectangle Registers | copy-rectangle-to-register (rebound from copy_rectangle_as_kill) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangle-Registers.html#index-C_002dx-r-r |
| C-x r s | Text Registers | copy-to-register (rebound from point_to_register, which is C-x r SPC) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Registers.html#index-C_002dx-r-s |
| C-x r t | Rectangles | string-rectangle | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html#index-C_002dx-r-t |
| C-x r w | Configuration Registers | window-configuration-to-register: restored by jump-to-register (C-x r j) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Configuration-Registers.html#index-C_002dx-r-w |
| C-x r y | Rectangles | emacs C-x r y (Rectangles) -> yank_rectangle | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html#index-C_002dx-r-y |
| C-x s | Save Commands | emacs C-x s (Save Commands) -> write-all | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Save-Commands.html#index-C_002dx-s |
| C-x t | Tab Bars | C-x t is Emacs's tab-prefix-map -- a prefix, never a command, so it has no chord of its own to cite. zmax has the map populated (C-x t 0 close_tab, 1 tab_only, 2 new_tab, b switch_to_buffer_other_tab, f find_file_other_tab, m :tabmove, o goto_next_tabpage); cited via C-x t 2. keymap/spacemacs.rs keeps it a prefix on purpose -- giving it a command drops every chord underneath. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t |
| C-x t 0 | Tab Bars | emacs C-x t 0 (Tab Bars) -> close_tab | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-0 |
| C-x t 1 | Tab Bars | emacs C-x t 1 (Tab Bars) -> tab_only | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-1 |
| C-x t 2 | Tab Bars | emacs C-x t 2 (Tab Bars) -> new_tab | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-2 |
| C-x t C-f (FFAP) | FFAP | C-x t C-f is now bound (alongside C-x t f) to find-file-other-tab; with ffap-bindings installed it hands over to ffap-other-tab, which opens a new tab and visits the file named at point in it. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/FFAP.html#index-C_002dx-t-C_002df-_0028FFAP_0029 |
| C-x t RET | Tab Bars | tab-switch: prompts for the tab by name (or 1-based number) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-RET |
| C-x t b | Tab Bars | switch-to-buffer-other-tab: the chosen buffer opens in a NEW TAB (was buffer_picker in the current tab) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-b |
| C-x t d | Tab Bars | dired.el:1219 binds `C-x t d` to dired-other-tab. It was bound in the spacemacs preset only; the emacs preset's `C-x t` node had f/C-f/b/m but no `d`, so under `:keymap emacs` the chord fell through the node and the command was unreachable. Added to that node. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-d |
| C-x t f | Tab Bars | find-file-other-tab: the chosen file opens in a NEW TAB (was file_picker in the current tab) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-f |
| C-x t m | Tab Bars | Re-pointed off :tabmove, which moves to the last position. tab_move_right (zmax-term/src/commands.rs:30932) is tab-bar.el's rule verbatim: `(cx.editor.current_tab() + count) % tabs`, i.e. move the current tab ARG positions to the right with wrap, ARG from the prefix/count with a bare press meaning 1 (emacs's `(interactive "p")`). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-m |
| C-x t o | Tab Bars | emacs C-x t o (Tab Bars) -> goto_next_tabpage | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-o |
| C-x t r | Tab Bars | tab-rename (was command_palette) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-r |
| C-x t t | Tab Bars | C-x t t: other-tab-prefix - redirect the NEXT command's buffer display into a new tab (was goto_next_tabpage, which is C-x t o) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-t |
| C-x u | Undo | emacs C-x u (Undo) -> undo | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Undo.html#index-C_002dx-u |
| C-x v ! | Editing VC Commands | `C-x v !` is `vc-edit-next-command`: it arms the next VC command to be shown in the minibuffer for editing before it runs, so a flag can be added (`--force-with-lease`, another remote) on the way. `vc_edit_next_command` (commands.rs) sets a one-shot flag that `git_async` - the entry point every network VC command goes through - takes as it fires, opening the assembled `git ...` line in the prompt and running the edited line instead. The chord ran `git_status`, a different command. Pinned by `tests/test/spacemacs_states.rs::c_x_v_bang_arms_the_next_vc_command`, which arms it and shows the following push going to the prompt rather than out to git. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Editing-VC-Commands.html#index-C_002dx-v-_0021 |
| C-x v + | Pulling / Pushing | emacs C-x v + (Pulling / Pushing) -> git_pull | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Pulling-_002f-Pushing.html#index-C_002dx-v-_002b |
| C-x v = | Old Revisions | emacs C-x v = (Old Revisions) -> git_diff | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Old-Revisions.html#index-C_002dx-v-_003d |
| C-x v D | Old Revisions | vc-root-diff (rebound from git_diff, which diffs the current file) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Old-Revisions.html#index-C_002dx-v-D |
| C-x v G | VC Ignore | vc-ignore (rebound from the git_file_dispatch menu) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Ignore.html#index-C_002dx-v-G |
| C-x v I | VC Change Log | vc-log-incoming (rebound from git_repo_log_picker) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Change-Log.html#index-C_002dx-v-I |
| C-x v L | VC Change Log | emacs C-x v L (VC Change Log) -> git_repo_log_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Change-Log.html#index-C_002dx-v-L |
| C-x v O | VC Change Log | vc-log-outgoing (rebound from git_repo_log_picker) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Change-Log.html#index-C_002dx-v-O |
| C-x v P | Pulling / Pushing | emacs C-x v P (Pulling / Pushing) -> git_push | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Pulling-_002f-Pushing.html#index-C_002dx-v-P |
| C-x v a | Change Logs and VC | vc-update-change-log (rebound from git_file_log_picker) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Logs-and-VC.html#index-C_002dx-v-a |
| C-x v b c | Creating Branches | vc-create-branch (rebound from git_branch_picker) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Creating-Branches.html#index-C_002dx-v-b-c |
| C-x v b l | VC Change Log | vc-print-branch-log (rebound from git_repo_log_picker) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Change-Log.html#index-C_002dx-v-b-l |
| C-x v b s | Switching Branches | emacs C-x v b s (Switching Branches) -> git_branch_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Switching-Branches.html#index-C_002dx-v-b-s |
| C-x v d | VC Directory Mode | emacs C-x v d (VC Directory Mode) -> git_status | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Directory-Mode.html#index-C_002dx-v-d |
| C-x v g | Old Revisions | emacs C-x v g (Old Revisions) -> git_blame_line | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Old-Revisions.html#index-C_002dx-v-g |
| C-x v h | VC Change Log | vc-region-history (rebound from git_file_log_picker) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Change-Log.html#index-C_002dx-v-h |
| C-x v i | Registering | vc-register (rebound from the git_file_dispatch menu) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Registering.html#index-C_002dx-v-i |
| C-x v l | VC Change Log | emacs C-x v l (VC Change Log) -> git_file_log_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Change-Log.html#index-C_002dx-v-l |
| C-x v r | Revision Tags | vc-retrieve-tag (rebound from git_branch_picker) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Revision-Tags.html#index-C_002dx-v-r |
| C-x v s | Revision Tags | vc-create-tag (rebound from git_branch_picker) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Revision-Tags.html#index-C_002dx-v-s |
| C-x v u | VC Undo | vc-revert (rebound from the git_file_dispatch menu) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Undo.html#index-C_002dx-v-u |
| C-x v v | Basic VC Editing | emacs C-x v v (Basic VC Editing) -> git_status | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-VC-Editing.html#index-C_002dx-v-v |
| C-x v ~ | Old Revisions | emacs C-x v ~ (Old Revisions) -> view_file_at_rev | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Old-Revisions.html#index-C_002dx-v-_007e |
| C-x w . | Highlight Interactively | highlight-symbol-at-point (rebound from toggle_auto_highlight) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-C_002dx-w-_002e |
| C-x w b | Highlight Interactively | hi-lock-write-interactive-patterns (rebound from toggle_auto_highlight) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-C_002dx-w-b |
| C-x w d | Displaying Buffers | `C-x w d` is toggle_window_dedication, a real tri-state on the view: it drops any dedication first and applies the strong flag only when turning it on, echoing emacs's 'Window is {no longer|now|now strongly} dedicated to buffer %s' verbatim; a strongly dedicated window refuses a buffer switch and a weakly dedicated one causes display-buffer-style redirection into an existing other window. The prefix mapping matches emacs now: `(if (consp flag) t ...)` means only a *raw* `C-u` dedicates strongly, while a numeric prefix (or a leading count, the spacemacs/vim keymaps having no `C-u` prefix command) is a non-nil non-t FLAG - which `toggle-window-dedicated-flag`'s own docstring, read out of emacs 31.1, says gives "the same kind of non-strong dedication" as its default value `interactive`. It was the other way round: any leading count dedicated strongly and a bare `C-u` weakly. That docstring also settles the old note's second point: `interactive` is not a third dedication state, it is an ordinary non-strong one. Pinned by `tests/test/emacs_keys.rs::c_x_w_d_dedicates_strongly_only_for_a_raw_prefix`. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Displaying-Buffers.html#index-C_002dx-w-d |
| C-x w h | Highlight Interactively | highlight-regexp (prompts for the regexp; was the select_regex stand-in) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-C_002dx-w-h |
| C-x w i | Highlight Interactively | hi-lock-find-patterns (rebound from select_regex) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-C_002dx-w-i |
| C-x w l | Highlight Interactively | highlight-lines-matching-regexp | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-C_002dx-w-l |
| C-x w p | Highlight Interactively | highlight-phrase | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-C_002dx-w-p |
| C-x w r | Highlight Interactively | unhighlight-regexp (rebound from clear_search_highlight) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-C_002dx-w-r |
| C-x x g | Reverting | revert-buffer-quick: reverts from the file with no confirmation (was :reload, the vim :e! verb) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Reverting.html#index-C_002dx-x-g |
| C-x x i | Misc Buffer | insert-buffer: insert another buffer's text at point | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Buffer.html#index-C_002dx-x-i |
| C-x x r | Misc Buffer | rename-buffer: prompts for the new buffer name | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Buffer.html#index-C_002dx-x-r |
| C-x x t | Line Truncation | emacs C-x x t (Line Truncation) -> toggle_soft_wrap | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Line-Truncation.html#index-C_002dx-x-t |
| C-x x u | Misc Buffer | rename-uniquely (was command_palette) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Buffer.html#index-C_002dx-x-u |
| C-x z | Repeating | `C-x z` is emacs `repeat`: it runs the *last command* again, whatever that was. `repeat_last_command` (commands.rs) replays the command the key dispatcher recorded in LAST_COMMAND — every dispatched command except the repeat itself, so `C-x z z z` keeps repeating the command that came before it. It then arms `repeat`'s own transient map through `emacs_repeat::arm_command_repeat`, which is not gated on `repeat-mode` (emacs installs that map from the command, mode or no mode), so a bare `z` repeats again. The chord used to run `repeat_last_motion`, which could only repeat a motion - an edit before it was not repeatable at all. Pinned by `tests/test/spacemacs_states.rs::c_x_z_repeats_the_last_command`: `x` then `C-x z` then `z` deletes three characters. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Repeating.html#index-C_002dx-z |
| C-x } | Change Window | emacs C-x } (Change Window) -> resize_view_wider | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Window.html#index-C_002dx-_007d |
| C-y | Yanking | emacs preset: yank -> yank_from_kill_ring | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Yanking.html#index-C_002dy |
| C-z | Exiting | emacs C-z (Exiting) -> suspend | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Exiting.html#index-C_002dz |
| C-z (X windows) | Frame Commands | C-z runs iconify-or-deiconify-frame in the emacs keymap preset, which sends the XTWINOPS iconify (CSI 2t) and de-iconify (CSI 1t) requests to the terminal emulator. This is the windowed C-z; the tty C-z that suspends the process stays on the vim/spacemacs default preset's C-z | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Frame-Commands.html#index-C_002dz-_0028X-windows_0029 |
| D (Dired) | Operating on Files | emacs Dired D -> zmax Dired mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-D-_0028Dired_0029 |
| D (GDB Breakpoints buffer) | Breakpoints Buffer | `D` in the GDB Breakpoints buffer (crate::ui::gdb::GdbBreakpoints, opened by :gdb-breakpoints-buffer) deletes the breakpoint on the cursor row from Editor::breakpoints and re-sends DAP setBreakpoints; on a row disabled by SPC it drops the parked breakpoint instead. The buffer is a modal Component, so the key is not expressible as a keymap entry — the evidence is the command that opens it and the equivalent cursor-line command. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Breakpoints-Buffer.html#index-D-_0028GDB-Breakpoints-buffer_0029 |
| D (GDB speedbar) | Watch Expressions | `D` on a row of the watch-expression buffer (crate::ui::gdb::GdbWatch, opened by :gdb-watch-buffer) is gdb-var-delete: it stops watching that expression and the list redraws without it. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Watch-Expressions.html#index-D-_0028GDB-speedbar_0029 |
| DEL (Buffer Menu) | Several Buffers | DEL (Backspace) = Buffer-menu-backup-unmark: move up and clear mark | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-DEL-_0028Buffer-Menu_0029 |
| DEL (Dired) | Dired Deletion | emacs Dired DEL -> zmax Dired mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Deletion.html#index-DEL-_0028Dired_0029 |
| DEL (DocView mode) | DocView Navigation | DEL doc-view-scroll-down-or-previous-page; see SPC. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/DocView-Navigation.html#index-DEL-_0028DocView-mode_0029 |
| DEL (Gnus Group mode) | Gnus Group Buffer | DEL in the Gnus group buffer is the same previous-unread-group motion as p; both Backspace and Delete are matched in zmax-term/src/ui/gnus.rs. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Group-Buffer.html#index-DEL-_0028Gnus-Group-mode_0029 |
| DEL (Gnus Summary mode) | Gnus Summary Buffer | DEL in the Gnus summary buffer scrolls the article backwards; Backspace and Delete are both matched in zmax-term/src/ui/gnus.rs. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Summary-Buffer.html#index-DEL-_0028Gnus-Summary-mode_0029 |
| DEL (Incremental search) | Basic Isearch | isearch-delete-char: drops the last char and the search backs up | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Isearch.html#index-DEL-_0028Incremental-search_0029 |
| DEL (MS-DOS) | MS-DOS Keyboard | DEL deletes the char after point (emacs.rs:129). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/MS_002dDOS-Keyboard.html#index-DEL-_0028MS_002dDOS_0029 |
| DEL (Rmail) | Rmail Scrolling | Rmail DEL | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Scrolling.html#index-DEL-_0028Rmail_0029 |
| DEL (View mode) | View Mode | View-scroll-page-backward | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/View-Mode.html#index-DEL-_0028View-mode_0029 |
| DEL (and major modes) | Major Modes | major modes redefine DEL: backward-delete-char-untabify in a C/C++ buffer (the base map's delete_char_backward everywhere else) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Major-Modes.html#index-DEL-_0028and-major-modes_0029 |
| DEL (programming modes) | Program Modes | DEL is backward-delete-char-untabify: a tab is first expanded to spaces, so DEL deletes one column of indentation. Bound in the C/C++ overlay (cc-mode reaches it through c-backspace-function); Insert only | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Program-Modes.html#index-DEL-_0028programming-modes_0029 |
| DOWN | Moving Point | emacs DOWN (Moving Point) -> move_visual_line_down | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-DOWN |
| DOWN (minibuffer history) | Minibuffer History | next-history-element | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Minibuffer-History.html#index-DOWN-_0028minibuffer-history_0029 |
| Down-mouse-3 | Menu Mouse Clicks | With context-menu-mode on, pressing the right button over text pops the context menu at the click through context-menu-open — the same command S-F10 runs. With the mode off nothing pops up, and under vim's mousemodel=extend the right button extends the region instead. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Menu-Mouse-Clicks.html#index-Down_002dmouse_002d3 |
| E (Dired) | Operating on Files | E opens the targets with the OS opener (dired-do-open) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-E-_0028Dired_0029 |
| END | Moving Point | emacs END (Moving Point) -> goto_line_end | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-END |
| ESC ESC ESC | Quitting | ESC ESC ESC -> keyboard_escape_quit | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Quitting.html#index-ESC-ESC-ESC |
| ESC ESC ESC (Incremental Search) | Basic Isearch | ESC ESC ESC: keyboard-escape-quit, which is what aborts an isearch | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Isearch.html#index-ESC-ESC-ESC-_0028Incremental-Search_0029 |
| F1 | Help | `F1` is help-command: add_help_map builds the `C-h` node, clones it and inserts it under F1 in Insert, Normal and Select (zmax-term/src/keymap/emacs.rs), so F1 k = C-h k and so on -- the same map, not a copy of a different one. The residual the note recorded is fixed too: the which-key popup was gated on the first pending key being one of space/C-x/C-c/C-h, so a prefix opened with F1 raised no popup. F1 is in that set now (zmax-term/src/ui/editor.rs). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help.html#index-F1 |
| F10 | Menu Bar | menu-bar-open on F10 in the emacs keymap; the vim base keeps F10 on the debugger's step-over | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Menu-Bar.html#index-F10 |
| F11 | Frame Commands | F11 runs toggle-frame-fullscreen in the emacs keymap preset (in the vim/spacemacs default F11 stays the debugger's step-in) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Frame-Commands.html#index-F11 |
| F2 1 | Two-Column | 2C-merge | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Two_002dColumn.html#index-F2-1 |
| F2 2 | Two-Column | 2C-two-columns | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Two_002dColumn.html#index-F2-2 |
| F2 RET | Two-Column | 2C-newline | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Two_002dColumn.html#index-F2-RET |
| F2 b | Two-Column | 2C-associate-buffer | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Two_002dColumn.html#index-F2-b |
| F2 d | Two-Column | 2C-dissociate | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Two_002dColumn.html#index-F2-d |
| F2 s | Two-Column | 2C-split | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Two_002dColumn.html#index-F2-s |
| F3 | Basic Keyboard Macro | kmacro-start-macro-or-insert-counter | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Keyboard-Macro.html#index-F3 |
| F4 | Basic Keyboard Macro | key:normal:F4 | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Keyboard-Macro.html#index-F4 |
| G (Dired) | Operating on Files | G chgrps the targets (dired-do-chgrp) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-G-_0028Dired_0029 |
| H (Calendar mode) | Writing Calendar Files | H m / H y write a browsable HTML calendar of the month / year (holidays marked) to ~/calendar-*.html (cal-html). Real two-key chord: H arms Prefix::Html | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Writing-Calendar-Files.html#index-H-_0028Calendar-mode_0029 |
| H (Dired) | Operating on Files | key:dired:H | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-H-_0028Dired_0029 |
| H (Package Menu) | Package Menu | H package-menu-hide-package: hide the package (package_menu.rs:303). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-H-_0028Package-Menu_0029 |
| HOME | Moving Point | emacs HOME (Moving Point) -> goto_line_start | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-HOME |
| I (Buffer Menu) | Several Buffers | Buffer-menu-toggle-internal: `I` toggles the internal buffers (ui/bufmenu.rs) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-I-_0028Buffer-Menu_0029 |
| INSERT | Minor Modes | key:insert:ins | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Minor-Modes.html#index-INSERT |
| L (Gnus Group mode) | Gnus Group Buffer | L in the Gnus group buffer lists all subscribed and unsubscribed groups (never killed or zombie); the arm is in zmax-term/src/ui/gnus.rs and runs the cited command. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Group-Buffer.html#index-L-_0028Gnus-Group-mode_0029 |
| LEFT | Moving Point | emacs LEFT (Moving Point) -> move_char_left | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-LEFT |
| LEFT, and bidirectional text | Bidirectional Editing | key:normal:left | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Bidirectional-Editing.html#index-LEFT_002c-and-bidirectional-text |
| M (Calendar mode) | Lunar Phases | M lists the month's principal moon phases (calendar-lunar-phases) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Lunar-Phases.html#index-M-_0028Calendar-mode_0029 |
| M (Dired) | Operating on Files | key:dired:M | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-M-_0028Dired_0029 |
| M-! | Single Shell | "Execute string COMMAND in inferior shell; display output, if any. With prefix argument, insert the COMMAND's output at point" (simple.el:4583-4585). M-! inserted unconditionally; it runs shell_command now, which displays the output and only inserts it under a count -- zmax's prefix arg. The new ShellBehavior::Show routes the run's output to show_shell_command_output instead of into the buffer, reproducing simple.el:4597-4601: a result short enough for the echo area goes to the status line, anything longer opens the buffer emacs calls *Shell Command Output*, and an empty result reports "(Shell command succeeded with no output)". The buffer is not the command's input, so nothing is piped in. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Single-Shell.html#index-M_002d_0021 |
| M-$ | Spelling | ispell-word | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Spelling.html#index-M_002d_0024 |
| M-$ (Dired) | Hiding Subdirectories | M-$ hides all subdirs (dired-hide-all) — same key | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hiding-Subdirectories.html#index-M_002d_0024-_0028Dired_0029 |
| M-% | Query Replace | query-replace: prompts for both sides and asks at every match (was isearch_query_replace, which reuses the last search pattern) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Query-Replace.html#index-M_002d_0025 |
| M-% (Incremental search) | Special Isearch | M-% in isearch -> isearch_query_replace | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Isearch.html#index-M_002d_0025-_0028Incremental-search_0029 |
| M-& | Single Shell | M-& -> async_shell_command | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Single-Shell.html#index-M_002d_0026 |
| M-' | Expanding Abbrevs | A-' -> expand_abbrev | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Expanding-Abbrevs.html#index-M_002d_0027 |
| M-, | Looking Up Identifiers | `M-,` in the emacs preset is xref_pop_marker_stack now, not jump_backward. There is a real xref marker ring now, and it is deliberately NOT the jumplist: vim's jumplist records every jump -- searches, `G`, `%`, a window change -- so popping it after a definition lookup lands wherever the last unrelated jump happened to be, which is the divergence the old note recorded. XREF_MARKERS (zmax-term/src/commands.rs) is a ring only xref pushes to, bounded at emacs's xref-marker-ring-length of 16 with the oldest falling off, and every xref entry point pushes the invocation point as it jumps: goto_impl's single-location arm, its picker's selection callback -- pushed there rather than when the picker opens, so a cancelled pick leaves the ring alone -- and the etags/ggtags path, which is what xref-etags-mode makes `M-.` resolve through. Popping skips markers into buffers that have since been closed, as emacs's markers into a killed buffer are dead, and an empty ring reports "At start of xref history". Unit tested for the bound and the LIFO order. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Looking-Up-Identifiers.html#index-M_002d_002c |
| M-- | Arguments | negative-argument: M-- makes the prefix argument negative (-1 on its own, digits after it build a negative number). Consumed by EditorView::handle_prefix_key, like the digit keys | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Arguments.html#index-M_002d_002d |
| M-- M-c | Fixing Case | `M-- M-c` is the negative argument plus the ordinary `capitalize-word` chord, which is how emacs gets it: `M--` is `negative-argument` and `capitalize-word` is `(interactive "p")`, so a negative ARG makes it work on the word *before* point. zmax read the pair as one keymap chord (an `A-minus` node holding these three commands), which meant the argument never reached any other command - `M-- C-x C-e` had nowhere to put it. `M--` now arms the prefix argument in `handle_prefix_key`, as `M-<digit>` does, and the word-case commands read it themselves, leaving point where it was as `(upcase-word -1)` does in emacs. Pinned by `tests/test/emacs_keys.rs::negative_argument_makes_the_word_case_commands_work_backwards`. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Fixing-Case.html#index-M_002d_002d-M_002dc |
| M-- M-l | Fixing Case | `M-- M-l` is the negative argument plus the ordinary `downcase-word` chord, which is how emacs gets it: `M--` is `negative-argument` and `downcase-word` is `(interactive "p")`, so a negative ARG makes it work on the word *before* point. zmax read the pair as one keymap chord (an `A-minus` node holding these three commands), which meant the argument never reached any other command - `M-- C-x C-e` had nowhere to put it. `M--` now arms the prefix argument in `handle_prefix_key`, as `M-<digit>` does, and the word-case commands read it themselves, leaving point where it was as `(upcase-word -1)` does in emacs. Pinned by `tests/test/emacs_keys.rs::negative_argument_makes_the_word_case_commands_work_backwards`. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Fixing-Case.html#index-M_002d_002d-M_002dl |
| M-- M-u | Fixing Case | `M-- M-u` is the negative argument plus the ordinary `upcase-word` chord, which is how emacs gets it: `M--` is `negative-argument` and `upcase-word` is `(interactive "p")`, so a negative ARG makes it work on the word *before* point. zmax read the pair as one keymap chord (an `A-minus` node holding these three commands), which meant the argument never reached any other command - `M-- C-x C-e` had nowhere to put it. `M--` now arms the prefix argument in `handle_prefix_key`, as `M-<digit>` does, and the word-case commands read it themselves, leaving point where it was as `(upcase-word -1)` does in emacs. Pinned by `tests/test/emacs_keys.rs::negative_argument_makes_the_word_case_commands_work_backwards`. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Fixing-Case.html#index-M_002d_002d-M_002du |
| M-. | Looking Up Identifiers | xref-find-definitions | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Looking-Up-Identifiers.html#index-M_002d_002e |
| M-/ | Dynamic Abbrevs | dabbrev-expand: expands the word before point from the words in the buffer, cycling on a repeat press (was the LSP completion popup) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dynamic-Abbrevs.html#index-M_002d_002f |
| M-0, tab bar | Tab Bars | with `:tab-bar-select-tab-modifiers meta`, M-0 runs tab-recent | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-M_002d0_002c-tab-bar |
| M-1 | Arguments | digit-argument: M-1..M-9 / M-0 read a numeric prefix argument. The digit is in the keystroke, so EditorView::handle_prefix_key folds it in directly (no keymap leaf can carry it); the command is what M-x digit-argument runs | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Arguments.html#index-M_002d1 |
| M-1, tab bar | Tab Bars | `:tab-bar-select-tab-modifiers meta` installs M-1 … M-8 as tab-select in normal, select and insert modes, exactly as customizing the variable defines those keys in emacs. It takes the previous modifier's digits back off first, and `nil` removes them; while meta is chosen M-<digit> stops being digit-argument, as it does in emacs | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-M_002d1_002c-tab-bar |
| M-9, tab bar | Tab Bars | with `:tab-bar-select-tab-modifiers meta`, M-9 runs tab-last | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-M_002d9_002c-tab-bar |
| M-: | Lisp Eval | M-: eval-expression (prompts for the form) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Lisp-Eval.html#index-M_002d_003a |
| M-; | Comment Commands | M-; | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Comment-Commands.html#index-M_002d_003b |
| M-< | Moving Point | M-< | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-M_002d_003c |
| M-< (Calendar mode) | Move to Beginning or End | calendar-beginning-of-year | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Move-to-Beginning-or-End.html#index-M_002d_003c-_0028Calendar-mode_0029 |
| M-< (DocView mode) | DocView Navigation | M-< doc-view-first-page. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/DocView-Navigation.html#index-M_002d_003c-_0028DocView-mode_0029 |
| M-= | Position Info | count-words-region -> count_selection | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Position-Info.html#index-M_002d_003d |
| M-= (Calendar mode) | Counting Days | M-= reports the inclusive day count of the region (calendar-count-days-region); C-SPC / C-@ set the mark | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Counting-Days.html#index-M_002d_003d-_0028Calendar-mode_0029 |
| M-> | Moving Point | M-> | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-M_002d_003e |
| M-> (Calendar mode) | Move to Beginning or End | calendar-end-of-year | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Move-to-Beginning-or-End.html#index-M_002d_003e-_0028Calendar-mode_0029 |
| M-> (DocView mode) | DocView Navigation | M-> doc-view-last-page. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/DocView-Navigation.html#index-M_002d_003e-_0028DocView-mode_0029 |
| M-? | Identifier Search | xref-find-references | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Identifier-Search.html#index-M_002d_003f |
| M-? (Nroff mode) | Nroff Mode | nroff-count-text-lines | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Nroff-Mode.html#index-M_002d_003f-_0028Nroff-mode_0029 |
| M-? (Shell mode) | Shell Mode | M-? lists, in the buffer, the file names that complete the one before point (comint-dynamic-list-filename-completions). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Mode.html#index-M_002d_003f-_0028Shell-mode_0029 |
| M-@ | Marking Objects | mark-word | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marking-Objects.html#index-M_002d_0040 |
| M-DEL | Words | M-DEL | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Words.html#index-M_002dDEL |
| M-DEL (Buffer Menu) | Several Buffers | M-DEL reads the mark character to remove and drops only that mark from every buffer — RET removes them all (Buffer-menu-unmark-all-buffers). `U` still clears everything unconditionally. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-M_002dDEL-_0028Buffer-Menu_0029 |
| M-DEL (Dired) | Marks vs Flags | M-DEL now reads the mark character to remove and drops only that mark (* = the marks, D = the deletion flags, RET = all), instead of unconditionally clearing everything | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-M_002dDEL-_0028Dired_0029 |
| M-DOWN | Completion Commands | M-DOWN in the minibuffer moves to the next completion candidate and puts it on the line (minibuffer-completion-auto-choose defaults to t, which is what selecting does here); with no candidates it says so | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Completion-Commands.html#index-M_002dDOWN |
| M-DOWN (Org Mode) | Org Mode | org-metadown | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Org-Mode.html#index-M_002dDOWN-_0028Org-Mode_0029 |
| M-Drag-mouse-1 | Secondary Selection | Alt + dragging the left button sets the secondary selection from the anchor M-mouse-1 dropped to the pointer, painting it with the secondary-selection face and leaving point and the primary region untouched. Non-vim presets only (Alt+click adds a cursor under vim/spacemacs). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Secondary-Selection.html#index-M_002dDrag_002dmouse_002d1 |
| M-F10 | Frame Commands | M-F10 runs toggle-frame-maximized in the emacs keymap preset | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Frame-Commands.html#index-M_002dF10 |
| M-G (Dired) | Subdirectory Motion | dired-goto-subdir: M-G prompts 'Goto subdir:' (ui/dired.rs) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Subdirectory-Motion.html#index-M_002dG-_0028Dired_0029 |
| M-LEFT | Moving Point | left-word -> move_prev_word_start | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-M_002dLEFT |
| M-LEFT (Org Mode) | Org Mode | org-metaleft (promote) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Org-Mode.html#index-M_002dLEFT-_0028Org-Mode_0029 |
| M-RET | Completion Commands | M-RET takes the candidate the list is on (the first when none is selected), splices it into the line and accepts the minibuffer with it | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Completion-Commands.html#index-M_002dRET |
| M-RIGHT | Moving Point | right-word -> move_next_word_start | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-M_002dRIGHT |
| M-RIGHT (Org Mode) | Org Mode | org-metaright (demote) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Org-Mode.html#index-M_002dRIGHT-_0028Org-Mode_0029 |
| M-S (Enriched mode) | Enriched Justification | set-justification-center (M-S is emacs's second key for it) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Enriched-Justification.html#index-M_002dS-_0028Enriched-mode_0029 |
| M-S-x | M-x | M-S-x is the same chord as M-X (a terminal delivers shifted `x` as `X`). "Query user for a command relevant for the current mode, and then execute it" -- emacs filters M-x by read-extended-command-predicate, which for M-X keeps the commands whose interactive form names the buffer's modes. Both chords ran the unfiltered palette. execute_extended_command_for_buffer (zmax-term/src/commands.rs) narrows it: zmax's equivalent of "a command this major mode declares" is the mode's own keymap overlay -- keymap::major_mode IS emacs's major-mode map here -- so the filter is every command that overlay binds across Normal, Select and Insert, walked to any depth so a command behind a prefix like `C-c C-t` is included and not just the leaves directly under the root. The palette reports how many commands the mode declares. A buffer whose major mode declares nothing falls back to the full list rather than offering an empty picker, which is what emacs's own predicate does. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/M_002dx.html#index-M_002dS_002dx |
| M-SPC | Deletion | emacs preset: just-one-space | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Deletion.html#index-M_002dSPC |
| M-TAB | Symbol Completion | completion-at-point -> completion popup | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Symbol-Completion.html#index-M_002dTAB |
| M-TAB (Incremental search) | Special Isearch | isearch-complete from the search ring | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Isearch.html#index-M_002dTAB-_0028Incremental-search_0029 |
| M-TAB (Picture mode) | Tabs in Picture | M-TAB (and C-M-i, matched as a raw CONTROL|ALT KeyEvent) moves point to the column beneath the next interesting character in the row above — a non-blank preceded by whitespace — or to column 0 when there is none (picture-tab-search). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tabs-in-Picture.html#index-M_002dTAB-_0028Picture-mode_0029 |
| M-TAB (Text mode) | Text Mode | completion-at-point | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Mode.html#index-M_002dTAB-_0028Text-mode_0029 |
| M-TAB (customization buffer) | Changing a Variable | M-TAB in the customization buffer runs widget-complete on the field being edited (ui/settings.rs matches a raw ALT|Tab KeyEvent). Real key; no parsed mode exposes that component's keys, so the command is the citable token. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Changing-a-Variable.html#index-M_002dTAB-_0028customization-buffer_0029 |
| M-UP | Completion Commands | M-UP is the backward mirror of M-DOWN: previous candidate, inserted on the line | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Completion-Commands.html#index-M_002dUP |
| M-UP (Org Mode) | Org Mode | org-metaup | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Org-Mode.html#index-M_002dUP-_0028Org-Mode_0029 |
| M-X | M-x | "Query user for a command relevant for the current mode, and then execute it" -- emacs filters M-x by read-extended-command-predicate, which for M-X keeps the commands whose interactive form names the buffer's modes. Both chords ran the unfiltered palette. execute_extended_command_for_buffer (zmax-term/src/commands.rs) narrows it: zmax's equivalent of "a command this major mode declares" is the mode's own keymap overlay -- keymap::major_mode IS emacs's major-mode map here -- so the filter is every command that overlay binds across Normal, Select and Insert, walked to any depth so a command behind a prefix like `C-c C-t` is included and not just the leaves directly under the root. The palette reports how many commands the mode declares. A buffer whose major mode declares nothing falls back to the full list rather than offering an empty picker, which is what emacs's own predicate does. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/M_002dx.html#index-M_002dX |
| M-\ | Deletion | delete-horizontal-space | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Deletion.html#index-M_002d_005c |
| M-^ | Indentation Commands | emacs preset: delete-indentation -> join_selections | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Indentation-Commands.html#index-M_002d_005e |
| M-^ (Fortran mode) | ForIndent Commands | fortran-join-line | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/ForIndent-Commands.html#index-M_002d_005e-_0028Fortran-mode_0029 |
| M-` | Menu Bar | tmm-menubar: the text menu bar, the menu tree flattened into one keyboard-driven list | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Menu-Bar.html#index-M_002d_0060 |
| M-a | Sentences | backward-sentence | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Sentences.html#index-M_002da |
| M-a (C mode) | Motion in C | c-beginning-of-statement | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Motion-in-C.html#index-M_002da-_0028C-mode_0029 |
| M-a (Calendar mode) | Move to Beginning or End | calendar-beginning-of-month | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Move-to-Beginning-or-End.html#index-M_002da-_0028Calendar-mode_0029 |
| M-a (programming modes) | Moving by Sentences | M-a in the C-like modes: c-beginning-of-statement | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-by-Sentences.html#index-M_002da-_0028programming-modes_0029 |
| M-b | Words | M-b | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Words.html#index-M_002db |
| M-c | Case | capitalize-word | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Case.html#index-M_002dc |
| M-c (Incremental search) | Lax Search | isearch-toggle-case-fold, applied as an inline (?i) flag on the pattern | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Lax-Search.html#index-M_002dc-_0028Incremental-search_0029 |
| M-d | Words | M-d | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Words.html#index-M_002dd |
| M-e | Sentences | forward-sentence | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Sentences.html#index-M_002de |
| M-e (C mode) | Motion in C | c-end-of-statement | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Motion-in-C.html#index-M_002de-_0028C-mode_0029 |
| M-e (Calendar mode) | Move to Beginning or End | calendar-end-of-month | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Move-to-Beginning-or-End.html#index-M_002de-_0028Calendar-mode_0029 |
| M-e (Incremental search) | Repeat Isearch | isearch-edit-string: the search stops running on every keystroke and the buffer stays on the match it is on while the string is edited; RET resumes the incremental search with the edited string (Prompt::isearch_edit_string and the RET arm guarded by isearch_edit) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Repeat-Isearch.html#index-M_002de-_0028Incremental-search_0029 |
| M-e (programming modes) | Moving by Sentences | M-e in the C-like modes: c-end-of-statement | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-by-Sentences.html#index-M_002de-_0028programming-modes_0029 |
| M-f | Words | M-f | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Words.html#index-M_002df |
| M-g M-g | Moving Point | goto-line | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-M_002dg-M_002dg |
| M-g M-n | Compilation Mode | next-error -> run_next_error | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Compilation-Mode.html#index-M_002dg-M_002dn |
| M-g M-n, for navigation in *xref* buffer | Looking Up Identifiers | M-g is a prefix in the *xref* overlay: M-g M-n (and M-g n) is next-error — it moves to the next hit and shows it, opening the file and putting point on the match in the buffer underneath while the results list stays up | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Looking-Up-Identifiers.html#index-M_002dg-M_002dn_002c-for-navigation-in-_002axref_002a-buffer |
| M-g M-p, for navigation in *xref* buffer | Looking Up Identifiers | M-g M-p (and M-g p) is previous-error in the *xref* overlay: previous hit, shown the same way | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Looking-Up-Identifiers.html#index-M_002dg-M_002dp_002c-for-navigation-in-_002axref_002a-buffer |
| M-g TAB | Moving Point | move-to-column -> goto_column | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-M_002dg-TAB |
| M-g c | Moving Point | M-g c goto-char | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-M_002dg-c |
| M-g g | Moving Point | goto-line | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-M_002dg-g |
| M-g n | Compilation Mode | next-error -> run_next_error | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Compilation-Mode.html#index-M_002dg-n |
| M-h | Paragraphs | mark-paragraph | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Paragraphs.html#index-M_002dh |
| M-i | Indentation Commands | The note pre-dated the command. `M-i` is bound to tab_to_tab_stop in the emacs preset (keymap/emacs.rs), and that is a port of indent.el:778-788, not an indent unit: it pads to the next entry of the tab-stop list (Editor::picture_tab_stops, the list `M-x edit-tab-stops` edits through emacs's own colon-line + tens/units ruler UI, commands.rs edit_tab_stops), falling back to "a tab stop every tab-width columns" when the list is empty, which is exactly what a nil tab-stop-list means (indent.el:680-686). It first deletes the whitespace before point, as emacs's `(delete-horizontal-space t)` does, and fills with tabs or spaces according to the document's indent style, which is `indent-tabs-mode`. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Indentation-Commands.html#index-M_002di |
| M-j | Multi-Line Comments | key:insert:A-j | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Multi_002dLine-Comments.html#index-M_002dj |
| M-j b (Enriched mode) | Enriched Justification | set-justification-full | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Enriched-Justification.html#index-M_002dj-b-_0028Enriched-mode_0029 |
| M-j c (Enriched mode) | Enriched Justification | set-justification-center | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Enriched-Justification.html#index-M_002dj-c-_0028Enriched-mode_0029 |
| M-j l (Enriched mode) | Enriched Justification | set-justification-left | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Enriched-Justification.html#index-M_002dj-l-_0028Enriched-mode_0029 |
| M-j r (Enriched mode) | Enriched Justification | set-justification-right | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Enriched-Justification.html#index-M_002dj-r-_0028Enriched-mode_0029 |
| M-j u (Enriched mode) | Enriched Justification | set-justification-none | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Enriched-Justification.html#index-M_002dj-u-_0028Enriched-mode_0029 |
| M-k | Sentences | kill-sentence | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Sentences.html#index-M_002dk |
| M-l | Case | downcase-word | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Case.html#index-M_002dl |
| M-m | Indentation Commands | M-m | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Indentation-Commands.html#index-M_002dm |
| M-m (Rmail) | Rmail Reply | M-m retries a failed message (rmail-retry-failure): it finds the copy of the original after the unsent-message separator in the bounce, and opens a draft addressed to the ORIGINAL recipient with its subject and body — not to the mailer daemon. Refuses on a message that carries no such copy. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Reply.html#index-M_002dm-_0028Rmail_0029 |
| M-mouse-1 | Secondary Selection | Alt + a left press anchors the secondary selection at the click (clearing the previous one) instead of adding a cursor. Non-vim presets only. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Secondary-Selection.html#index-M_002dmouse_002d1 |
| M-mouse-2 | Secondary Selection | Alt + a middle click inserts the secondary selection's text at the click; the secondary selection itself stays where it is. Non-vim presets only, where Alt+middle is not the register replace. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Secondary-Selection.html#index-M_002dmouse_002d2 |
| M-mouse-3 | Secondary Selection | Alt + a right click copies the secondary selection to the mouse-yank register; a second click with the same text still saved deletes it. The Alt right *press* is consumed so no context menu opens over it. Non-vim presets only. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Secondary-Selection.html#index-M_002dmouse_002d3 |
| M-n (Incremental search) | Repeat Isearch | isearch-ring-advance | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Repeat-Isearch.html#index-M_002dn-_0028Incremental-search_0029 |
| M-n (Log Edit mode) | Log Buffer | log-edit-next-comment: the forward direction through the same comment ring, back toward the message that was being written. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Log-Buffer.html#index-M_002dn-_0028Log-Edit-mode_0029 |
| M-n (Nroff mode) | Nroff Mode | nroff-forward-text-line | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Nroff-Mode.html#index-M_002dn-_0028Nroff-mode_0029 |
| M-n (Rmail) | Rmail Motion | Rmail M-n | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Motion.html#index-M_002dn-_0028Rmail_0029 |
| M-n (Shell mode) | Shell Ring | key:comint:A-n | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Ring.html#index-M_002dn-_0028Shell-mode_0029 |
| M-n (minibuffer history) | Minibuffer History | next-history-element | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Minibuffer-History.html#index-M_002dn-_0028minibuffer-history_0029 |
| M-o b (Enriched mode) | Enriched Faces | M-o b: facemenu-set-bold | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Enriched-Faces.html#index-M_002do-b-_0028Enriched-mode_0029 |
| M-o d (Enriched mode) | Enriched Faces | M-o d: facemenu-set-default - the enriched-mode face map, live once M-x enriched-mode sets the major mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Enriched-Faces.html#index-M_002do-d-_0028Enriched-mode_0029 |
| M-o i (Enriched mode) | Enriched Faces | M-o i: facemenu-set-italic | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Enriched-Faces.html#index-M_002do-i-_0028Enriched-mode_0029 |
| M-o l (Enriched mode) | Enriched Faces | M-o l: facemenu-set-bold-italic | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Enriched-Faces.html#index-M_002do-l-_0028Enriched-mode_0029 |
| M-o o (Enriched mode) | Enriched Faces | M-o o: facemenu-set-face (prompts for the face) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Enriched-Faces.html#index-M_002do-o-_0028Enriched-mode_0029 |
| M-o u (Enriched mode) | Enriched Faces | M-o u: facemenu-set-underline | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Enriched-Faces.html#index-M_002do-u-_0028Enriched-mode_0029 |
| M-p (Incremental search) | Repeat Isearch | isearch-ring-retreat | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Repeat-Isearch.html#index-M_002dp-_0028Incremental-search_0029 |
| M-p (Log Edit mode) | Log Buffer | log-edit-previous-comment in the commit-message editor: cycles backward through log-edit-comment-ring, the messages committed earlier in this process, replacing the message body. Implemented in MagitCommit (zmax-term/src/ui/magit.rs). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Log-Buffer.html#index-M_002dp-_0028Log-Edit-mode_0029 |
| M-p (Nroff mode) | Nroff Mode | nroff-backward-text-line | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Nroff-Mode.html#index-M_002dp-_0028Nroff-mode_0029 |
| M-p (Rmail) | Rmail Motion | Rmail M-p | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Motion.html#index-M_002dp-_0028Rmail_0029 |
| M-p (Shell mode) | Shell Ring | key:comint:A-p | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Ring.html#index-M_002dp-_0028Shell-mode_0029 |
| M-p (minibuffer history) | Minibuffer History | previous-history-element | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Minibuffer-History.html#index-M_002dp-_0028minibuffer-history_0029 |
| M-q | Fill Commands | M-q fill-paragraph -> reflow_selections (was the LSP formatter) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Fill-Commands.html#index-M_002dq |
| M-q (C mode) | Other C Commands | c-fill-paragraph | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Other-C-Commands.html#index-M_002dq-_0028C-mode_0029 |
| M-q (Fortran mode) | ForIndent Commands | Both defects the note recorded are gone. `M-q` is bound to fortran_fill_paragraph in the fortran major-mode overlay (zmax-term/src/keymap/major_mode.rs:198, all three editor modes), so it no longer falls through to the generic reflow; and the fill width is fortran's own 72 columns rather than 'text-width' (zmax-term/src/commands.rs, fortran_fill_paragraph). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/ForIndent-Commands.html#index-M_002dq-_0028Fortran-mode_0029 |
| M-r | Moving Point | move-to-window-line-top-bottom: centre, then top, then bottom on successive presses (was goto_window_center, which only centred) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-M_002dr |
| M-r (Incremental Search) | Special Isearch | isearch-toggle-regexp: regexp <-> literal (the string is quoted) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Isearch.html#index-M_002dr-_0028Incremental-Search_0029 |
| M-r (Log Edit mode) | Log Buffer | log-edit-comment-search-backward: prompts for a substring and moves backward through the comment ring to the first message containing it; an empty answer reuses log-edit-last-comment-match. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Log-Buffer.html#index-M_002dr-_0028Log-Edit-mode_0029 |
| M-r (minibuffer history) | Minibuffer History | The note pre-dated the recursive read. `M-r` in a prompt is previous-matching-history-element and does what emacs's interactive spec does: it opens a RECURSIVE minibuffer for the regexp (Prompt::begin_history_search, zmax-term/src/ui/prompt.rs) with the "Previous element matching regexp" prompt format-prompt builds and the ` (default REGEXP)` an empty answer reuses, then walks the history to the newest older entry matching it, leaving point inside the match; Esc/C-g abandons the read and brings the answer underneath back untouched. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Minibuffer-History.html#index-M_002dr-_0028minibuffer-history_0029 |
| M-s ' (Incremental Search) | Lax Search | M-s ' isearch-toggle-char-fold: `resume` matches `resume` with accents (IsearchToggle::CharFold). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Lax-Search.html#index-M_002ds-_0027-_0028Incremental-Search_0029 |
| M-s (Log Edit mode) | Log Buffer | log-edit-comment-search-forward: the same substring search through the comment ring in the forward direction. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Log-Buffer.html#index-M_002ds-_0028Log-Edit-mode_0029 |
| M-s (Rmail) | Rmail Motion | Rmail M-s (rmail-search) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Motion.html#index-M_002ds-_0028Rmail_0029 |
| M-s (minibuffer history) | Minibuffer History | As `M-r`, walking to newer entries: the same recursive regexp read with the "Next element matching regexp" prompt. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Minibuffer-History.html#index-M_002ds-_0028minibuffer-history_0029 |
| M-s . | Symbol Search | isearch-forward-symbol-at-point | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Symbol-Search.html#index-M_002ds-_002e |
| M-s C-e (Incremental search) | Isearch Yank | isearch-yank-line: appends the rest of the line and re-searches | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Isearch-Yank.html#index-M_002ds-C_002de-_0028Incremental-search_0029 |
| M-s M-. | Isearch Yank | isearch-forward-thing-at-point -> isearch_forward_symbol_at_point | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Isearch-Yank.html#index-M_002ds-M_002d_002e |
| M-s M-< | Special Isearch | M-s M-< isearch-beginning-of-buffer: restart the search from the buffer start, so it finds the first match in the whole buffer. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Isearch.html#index-M_002ds-M_002d_003c |
| M-s M-> | Special Isearch | M-s M-> isearch-end-of-buffer: restart the search from the buffer end, so it finds the last match in the whole buffer. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Isearch.html#index-M_002ds-M_002d_003e |
| M-s M-r (Gnus Summary mode) | Gnus Summary Buffer | M-s M-r under the summary buffer's M-s prefix prompts for a regexp and selects the previous article that matches; a bare M-r is bound to the same thing. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Summary-Buffer.html#index-M_002ds-M_002dr-_0028Gnus-Summary-mode_0029 |
| M-s M-s (Gnus Summary mode) | Gnus Summary Buffer | M-s is a prefix in the summary buffer (pending_meta_s in zmax-term/src/ui/gnus.rs); M-s M-s prompts for a regexp and selects the next article that matches. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Summary-Buffer.html#index-M_002ds-M_002ds-_0028Gnus-Summary-mode_0029 |
| M-s M-w | Word Search | M-s M-w word-search -> isearch_forward_word | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Word-Search.html#index-M_002ds-M_002dw |
| M-s SPC (Incremental search) | Lax Search | M-s SPC isearch-toggle-lax-whitespace: a space matches any run of whitespace (IsearchToggle::LaxWhitespace). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Lax-Search.html#index-M_002ds-SPC-_0028Incremental-search_0029 |
| M-s _ | Symbol Search | isearch-forward-symbol | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Symbol-Search.html#index-M_002ds-_005f |
| M-s c (Incremental search) | Lax Search | toggle case fold via the M-s toggle map | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Lax-Search.html#index-M_002ds-c-_0028Incremental-search_0029 |
| M-s h . | Highlight Interactively | highlight-symbol-at-point | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-M_002ds-h-_002e |
| M-s h f | Highlight Interactively | hi-lock-find-patterns | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-M_002ds-h-f |
| M-s h l | Highlight Interactively | highlight-lines-matching-regexp | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-M_002ds-h-l |
| M-s h l (Incremental Search) | Special Isearch | highlight-lines-matching-regexp | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Isearch.html#index-M_002ds-h-l-_0028Incremental-Search_0029 |
| M-s h p | Highlight Interactively | highlight-phrase | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-M_002ds-h-p |
| M-s h r | Highlight Interactively | highlight-regexp (prompts for the regexp) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-M_002ds-h-r |
| M-s h r (Incremental Search) | Special Isearch | highlight-regexp | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Isearch.html#index-M_002ds-h-r-_0028Incremental-Search_0029 |
| M-s h u | Highlight Interactively | unhighlight-regexp | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-M_002ds-h-u |
| M-s h w | Highlight Interactively | hi-lock-write-interactive-patterns | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-M_002ds-h-w |
| M-s i (Incremental search) | Special Isearch | The note pre-dated the skip. Both halves of emacs's `isearch-invisible` are implemented, on both search paths. ON (emacs's `open`, the default): the closed folds hiding the match are opened, innermost first, until the line shows -- isearch_settle_folds (zmax-term/src/commands.rs). OFF (`isearch-invisible` nil): a hidden match is SKIPPED and the search carries on to the next visible one, in the command path by re-running the search until the landed-on line is visible (with a seen-set so a buffer whose every match is folded terminates and says so rather than looping), and in the incremental path by Prompt::isearch_skip_invisible, which restores the pre-search fold state before each step so skipping does not leave folds opened behind it. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Isearch.html#index-M_002ds-i-_0028Incremental-search_0029 |
| M-s o | Other Repeating Search | occur | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Other-Repeating-Search.html#index-M_002ds-o |
| M-s o (Incremental Search) | Special Isearch | isearch-occur: ends the search and opens occur on the pattern | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Isearch.html#index-M_002ds-o-_0028Incremental-Search_0029 |
| M-s r (Incremental Search) | Special Isearch | toggle regexp via the M-s toggle map | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Isearch.html#index-M_002ds-r-_0028Incremental-Search_0029 |
| M-s w | Word Search | isearch-forward-word | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Word-Search.html#index-M_002ds-w |
| M-t | Transpose | transpose-words | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Transpose.html#index-M_002dt |
| M-u | Case | upcase-word | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Case.html#index-M_002du |
| M-v | Moving Point | M-v | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-M_002dv |
| M-v (Calendar mode) | Scroll Calendar | key:calendar:A-v | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Scroll-Calendar.html#index-M_002dv-_0028Calendar-mode_0029 |
| M-w | Other Kill Commands | M-w | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Other-Kill-Commands.html#index-M_002dw |
| M-x | M-x | M-x | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/M_002dx.html#index-M_002dx |
| M-x list-keyboard-macros RET | Kmacro Menu | list-keyboard-macros opens the Kmacro Menu over the live ring | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Kmacro-Menu.html#index-M_002dx-list_002dkeyboard_002dmacros-RET |
| M-y | Earlier Kills | yank-pop | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Earlier-Kills.html#index-M_002dy |
| M-y (Incremental search) | Isearch Yank | isearch-yank-pop: after C-y appended the current kill, M-y replaces that appended text with the next-older kill, tracking how much the last yank added (Prompt::isearch_yank_pop / isearch_yank_len) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Isearch-Yank.html#index-M_002dy-_0028Incremental-search_0029 |
| M-z | Other Kill Commands | zap-to-char | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Other-Kill-Commands.html#index-M_002dz |
| M-{ | Paragraphs | backward-paragraph | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Paragraphs.html#index-M_002d_007b |
| M-{ (Calendar mode) | Calendar Unit Motion | emacs Calendar M-{ -> zmax Calendar mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Calendar-Unit-Motion.html#index-M_002d_007b-_0028Calendar-mode_0029 |
| M-{ (Dired) | Marks vs Flags | key:dired:A-{ | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-M_002d_007b-_0028Dired_0029 |
| M-| | Single Shell | shell-command-on-region: the region is the command's input and the output is DISPLAYED; only simple.el's REPLACE argument -- the prefix arg -- makes it replace the region. M-| replaced unconditionally; it runs shell_command_on_region now, which shows the output through the same ShellBehavior::Show path as M-! (status line for one line, a buffer for more, emacs's no-output message for none) and replaces the selection only under a count. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Single-Shell.html#index-M_002d_007c |
| M-} | Paragraphs | forward-paragraph | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Paragraphs.html#index-M_002d_007d |
| M-} (Calendar mode) | Calendar Unit Motion | emacs Calendar M-} -> zmax Calendar mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Calendar-Unit-Motion.html#index-M_002d_007d-_0028Calendar-mode_0029 |
| M-} (Dired) | Marks vs Flags | key:dired:A-} | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-M_002d_007d-_0028Dired_0029 |
| M-~ | Save Commands | not-modified | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Save-Commands.html#index-M_002d_007e |
| N (Dired) | Operating on Files | N runs man on the file at point (dired-do-man) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-N-_0028Dired_0029 |
| O (Dired) | Operating on Files | key:dired:O | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-O-_0028Dired_0029 |
| P (Dired) | Operating on Files | P prints the targets via lpr (dired-do-print) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-P-_0028Dired_0029 |
| PageDown | Moving Point | emacs PageDown (Moving Point) -> page_down | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-PageDown |
| PageDown (Calendar mode) | Scroll Calendar | PageDown scrolls the calendar THREE months forward (calendar-scroll-left-three-months), matching Emacs; it used to move a single month. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Scroll-Calendar.html#index-PageDown-_0028Calendar-mode_0029 |
| PageDown (DocView mode) | DocView Navigation | PageDown doc-view-next-page. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/DocView-Navigation.html#index-PageDown-_0028DocView-mode_0029 |
| PageUp | Moving Point | emacs PageUp (Moving Point) -> page_up | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-PageUp |
| PageUp (Calendar mode) | Scroll Calendar | PageUp scrolls the calendar THREE months back (calendar-scroll-right-three-months), matching Emacs; it used to move a single month. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Scroll-Calendar.html#index-PageUp-_0028Calendar-mode_0029 |
| PageUp (DocView mode) | DocView Navigation | PageUp doc-view-previous-page. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/DocView-Navigation.html#index-PageUp-_0028DocView-mode_0029 |
| Q (Dired) | Operating on Files | Q reads a regexp and a replacement and applies it inside every target (dired-do-find-regexp-and-replace) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-Q-_0028Dired_0029 |
| Q (Rmail summary) | Rmail Summary Edit | Rmail summary Q (wipe) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Summary-Edit.html#index-Q-_0028Rmail-summary_0029 |
| R (Dired) | Operating on Files | R renames/moves the targets (dired-do-rename) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-R-_0028Dired_0029 |
| RET | Inserting Text | RET | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Inserting-Text.html#index-RET |
| RET (Buffer Menu) | Several Buffers | RET = Buffer-menu-this-window: select buffer at point (Editor::switch Replace) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-RET-_0028Buffer-Menu_0029 |
| RET (Dired) | Dired Visiting | emacs Dired RET -> zmax Dired mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Visiting.html#index-RET-_0028Dired_0029 |
| RET (GDB Breakpoints buffer) | Breakpoints Buffer | `RET` in the GDB Breakpoints buffer is gdb-goto-breakpoint: it closes the buffer, opens the breakpoint's file and puts point on its line. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Breakpoints-Buffer.html#index-RET-_0028GDB-Breakpoints-buffer_0029 |
| RET (GDB speedbar) | Watch Expressions | `RET` on a watch row is gdb-edit-value: it prompts `gdb-edit-value — EXPR = ` and assigns the answer through DAP setExpression, falling back to an assignment `evaluate` when the adapter does not advertise supportsSetExpression. The new value shows on the next refresh. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Watch-Expressions.html#index-RET-_0028GDB-speedbar_0029 |
| RET (Incremental search) | Basic Isearch | isearch-exit: stops on the shown match, pushes the jump, stores the pattern | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Isearch.html#index-RET-_0028Incremental-search_0029 |
| RET (Kmacro Menu) | Kmacro Menu | RET edits the column point is in (the menu now has a real column cursor) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Kmacro-Menu.html#index-RET-_0028Kmacro-Menu_0029 |
| RET (Occur mode) | Other Repeating Search | occur-mode-goto-occurrence: RET pops the overlay and moves point to the occurrence in the source view. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Other-Repeating-Search.html#index-RET-_0028Occur-mode_0029 |
| RET (Package Menu) | Package Menu | RET package-menu-describe-package: describe the package at point (package_menu.rs:286). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-RET-_0028Package-Menu_0029 |
| RET (Shell mode) | Shell Mode | key:comint:ret | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Mode.html#index-RET-_0028Shell-mode_0029 |
| RET (completion in minibuffer) | Completion Exit | minibuffer-complete-and-exit | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Completion-Exit.html#index-RET-_0028completion-in-minibuffer_0029 |
| RIGHT | Moving Point | emacs RIGHT (Moving Point) -> move_char_right | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-RIGHT |
| RIGHT, and bidirectional text | Bidirectional Editing | key:normal:right | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Bidirectional-Editing.html#index-RIGHT_002c-and-bidirectional-text |
| S (Buffer Menu) | Several Buffers | `S` is tabulated-list-sort: the rows are ordered by the column at point -- Size numerically, so 9 < 20 < 100 rather than the lexical order of the rendered strings, the rest lexically -- and a second `S` on the same column reverses it. There is no separate column cursor any more: `tabulated-list-mode`'s "current column" is simply the one POINT is in, which is why `tabulated-list-next-column` is a point motion, and that is the model now. BufferMenu carries point's horizontal offset in the row; column_starts derives each column's character offset from the layout format_row actually draws (the mark glyph, the CRM cell when the listing shows it, a space, then the four columns each behind its two-space gap), and current_column is the last column whose start is at or before point. Left/Right (and C-b/C-f) move point along the row; M-Left/M-Right are tabulated-list-previous/next-column, moving point to the start of the neighbouring column and stopping at the ends. The header underlines the column point is in. Unit tested: the derived boundaries line up with the drawn layout at every column's first and last character, the motions land where they should, and `{` on point-in-Size narrows Size and leaves the name column alone. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-S-_0028Buffer-Menu_0029 |
| S (Calendar mode) | Sunrise/Sunset | calendar-sunrise-sunset for the date at point | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Sunrise_002fSunset.html#index-S-_0028Calendar-mode_0029 |
| S (Dired) | Operating on Files | key:dired:S | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-S-_0028Dired_0029 |
| S-C-TAB | Tab Bars | tab-previous -> goto_previous_tabpage | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-S_002dC_002dTAB |
| S-F10 | Menu Mouse Clicks | S-F10 opens the context menu from the keyboard, anchored at point's screen cell (the click position is only used when the mouse opened it). Bound in the shipped spacemacs default's normal mode and in the emacs preset. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Menu-Mouse-Clicks.html#index-S_002dF10 |
| S-SPC (Rmail) | Rmail Scrolling | S-SPC scrolls the message body back, like DEL (rmail binds both) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Scrolling.html#index-S_002dSPC-_0028Rmail_0029 |
| S-TAB (Help mode) | Help Mode | S-TAB in the Help buffer is backward-button: point moves to the previous hyperlink, wrapping from the first to the last. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Mode.html#index-S_002dTAB-_0028Help-mode_0029 |
| S-TAB (Org Mode) | Org Mode | org-shifttab | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Org-Mode.html#index-S_002dTAB-_0028Org-Mode_0029 |
| S-TAB (customization buffer) | Customization Groups | S-TAB in the customization buffer runs widget-backward, the same widget cursor stepped backwards. Real key, handled in ui/preferences.rs and ui/settings.rs; no parsed mode exposes that component's keys, so the command is the citable token. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Customization-Groups.html#index-S_002dTAB-_0028customization-buffer_0029 |
| S-mouse-2 | Hideshow | Shift + a middle click folds the block the click landed in, or unfolds it when it is already folded (zmax's folds are hideshow's blocks — the same fold_toggle that C-c @ C-c runs). Point moves to the click first, and this runs ahead of the middle-click paste; from a key the command acts at point. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html#index-S_002dmouse_002d2 |
| S-mouse-3 (FFAP) | FFAP | S-mouse-3 moves point to the click and visits the file or URL guessed from the text there; with nothing to guess it reports that and visits nothing. Non-vim presets only, where the right button is not vim's mousemodel button. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/FFAP.html#index-S_002dmouse_002d3-_0028FFAP_0029 |
| SPC (Calendar mode) | General Calendar | SPC scrolls the output pane (scroll-other-window) — the pane holding the holiday/diary/conversion listings; DEL and S-SPC scroll it back | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/General-Calendar.html#index-SPC-_0028Calendar-mode_0029 |
| SPC (Dired) | Dired Navigation | dired-next-line: SPC moves to the next line, like n / C-n / j (ui/dired.rs) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Navigation.html#index-SPC-_0028Dired_0029 |
| SPC (DocView mode) | DocView Navigation | SPC doc-view-scroll-up-or-next-page: the page is one terminal image, so there is nothing to scroll within and it advances a page. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/DocView-Navigation.html#index-SPC-_0028DocView-mode_0029 |
| SPC (GDB Breakpoints buffer) | Breakpoints Buffer | `SPC` in the GDB Breakpoints buffer is gdb-toggle-breakpoint's enable/disable: the breakpoint is withdrawn from the adapter (removed from Editor::breakpoints and setBreakpoints re-sent) but stays listed with `n` in the Enb column, and a second SPC re-arms it with its condition intact — gdb's `disable`/`enable`, not `delete`. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Breakpoints-Buffer.html#index-SPC-_0028GDB-Breakpoints-buffer_0029 |
| SPC (Gnus Group mode) | Gnus Group Buffer | SPC in the Gnus group buffer opens the summary buffer for the group on the current line; the arm is in the View::Group key match of zmax-term/src/ui/gnus.rs and runs the same code as the gnus_group_read_group command cited here. The report parses component keymaps only for the modes named in gen_port_report.py, which has no `gnus` mode, so the command is cited instead of key:gnus:space. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Group-Buffer.html#index-SPC-_0028Gnus-Group-mode_0029 |
| SPC (Gnus Summary mode) | Gnus Summary Buffer | SPC in the Gnus summary buffer selects the article on the line, or scrolls the selected one, or moves to the next unread article at its end; the arm is in the View::Summary key match of zmax-term/src/ui/gnus.rs and runs the cited command. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Summary-Buffer.html#index-SPC-_0028Gnus-Summary-mode_0029 |
| SPC (Incremental search) | Lax Search | lax space matching is on by default (IsearchFlags::lax_whitespace), so a space typed into a search matches any run of spaces and tabs — `foo bar` finds `foo bar` — via zmax_core::search::lax_whitespace_regexp; M-s SPC (isearch-toggle-lax-whitespace) turns it off and back on | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Lax-Search.html#index-SPC-_0028Incremental-search_0029 |
| SPC (Rmail) | Rmail Scrolling | Rmail SPC | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Scrolling.html#index-SPC-_0028Rmail_0029 |
| SPC (View mode) | View Mode | View-scroll-page-forward; deliberately shadows the SPC leader in a view buffer, as emacs View mode does | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/View-Mode.html#index-SPC-_0028View-mode_0029 |
| SPC (completion) | Completion Commands | SPC in a completing read runs Prompt::complete_word — it completes to the longest common prefix but stops at the first word separator past what is typed, so a second SPC completes the next word. Emacs does not bind this where the argument may contain spaces; here the same rule is Prompt::is_completing_read (not the `:` line, not a search, not the `=` line), and a space that completes nothing is inserted as a space | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Completion-Commands.html#index-SPC-_0028completion_0029 |
| T (Buffer Menu) | Several Buffers | T = Buffer-menu-toggle-files-only: list only file-visiting buffers | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-T-_0028Buffer-Menu_0029 |
| T (Dired) | Operating on Files | key:dired:T | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-T-_0028Dired_0029 |
| TAB (Help mode) | Help Mode | TAB in the Help buffer is forward-button: point moves to the next hyperlink and wraps from the last to the first, as the manual says these commands act cyclically. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Mode.html#index-TAB-_0028Help-mode_0029 |
| TAB (Message mode) | Header Editing | message-tab: completes the mail alias before point in a header line, an ordinary indent anywhere else (Insert only: in Normal, TAB is vim's jump_forward) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Header-Editing.html#index-TAB-_0028Message-mode_0029 |
| TAB (Org Mode) | Org Mode | org-cycle | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Org-Mode.html#index-TAB-_0028Org-Mode_0029 |
| TAB (Shell mode) | Shell Mode | TAB completes the file name before point (completion-at-point): a unique candidate is inserted whole, several insert their longest common prefix, and TAB with no progress left lists the candidates in the buffer. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Mode.html#index-TAB-_0028Shell-mode_0029 |
| TAB (Text mode) | Text Mode | indent-for-tab-command: Text mode's TAB inserts whitespace to the next tab stop | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Mode.html#index-TAB-_0028Text-mode_0029 |
| TAB (and major modes) | Major Modes | major modes redefine TAB: org-cycle in Org, c-indent-line-or-region in C/C++, indent-for-tab-command in Text (keymap/major_mode.rs overlays the language's map on the base one) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Major-Modes.html#index-TAB-_0028and-major-modes_0029 |
| TAB (completion example) | Completion Example | same key/command as TAB (completion) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Completion-Example.html#index-TAB-_0028completion-example_0029 |
| TAB (completion) | Completion Commands | minibuffer-complete from the prompt's candidate list | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Completion-Commands.html#index-TAB-_0028completion_0029 |
| TAB (customization buffer) | Customization Groups | TAB in the customization buffer runs widget-forward: the Settings page's widget cursor moves to the next button or editable field, wrapping. Real key, handled in ui/preferences.rs and ui/settings.rs; the report parser exposes no mode for that component, so the command it runs is the citable token. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Customization-Groups.html#index-TAB-_0028customization-buffer_0029 |
| TAB (indentation) | Indentation | TAB indentation -> indent | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Indentation.html#index-TAB-_0028indentation_0029 |
| TAB (programming modes) | Basic Indent | TAB updates the indentation of the current line: c-indent-line-or-region in a C/C++ buffer (Insert only, like Text mode's TAB) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Indent.html#index-TAB-_0028programming-modes_0029 |
| U (Buffer Menu) | Several Buffers | U = Buffer-menu-unmark-all-buffers: remove every mark | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-U-_0028Buffer-Menu_0029 |
| U (Dired) | Marks vs Flags | emacs Dired U -> zmax Dired mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-U-_0028Dired_0029 |
| U (Package Menu) | Package Menu | U package-menu-mark-upgrades: mark every upgradable package (package_menu.rs:255). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-U-_0028Package-Menu_0029 |
| UP | Moving Point | emacs UP (Moving Point) -> move_visual_line_up | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-UP |
| UP (minibuffer history) | Minibuffer History | previous-history-element | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Minibuffer-History.html#index-UP-_0028minibuffer-history_0029 |
| W (Dired) | Misc Dired Features | W hands the file at point to the browser as a file:// URL ($BROWSER, else open/xdg-open) — browse-url-of-dired-file | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Dired-Features.html#index-W-_0028Dired_0029 |
| X (Dired) | Shell Commands in Dired | X runs a shell command on the targets (dired-do-shell-command), the same command `!` runs | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Commands-in-Dired.html#index-X-_0028Dired_0029 |
| Y (Dired) | Operating on Files | key:dired:Y | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-Y-_0028Dired_0029 |
| Z (Dired) | Operating on Files | Z gzips/gunzips the targets (dired-do-compress) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-Z-_0028Dired_0029 |
| ^ (Dired) | Dired Visiting | emacs Dired ^ -> zmax Dired mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Visiting.html#index-_005e-_0028Dired_0029 |
| a (Calendar mode) | Holidays | a lists the month's holidays in the output pane (calendar-list-holidays); the pane is the window Emacs pops up, scrolled with SPC/DEL | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Holidays.html#index-a-_0028Calendar-mode_0029 |
| a (Rmail) | Rmail Labels | Rmail a | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Labels.html#index-a-_0028Rmail_0029 |
| b (Buffer Menu) | Several Buffers | key:bufmenu:b | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-b-_0028Buffer-Menu_0029 |
| b (Rmail summary) | Rmail Summary Edit | b in the summary pane buries it back to the message view (rmail-summary-bury) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Summary-Edit.html#index-b-_0028Rmail-summary_0029 |
| b (Rmail) | Rmail Basics | b buries (closes) the reader — rmail-bury; the old `z` alias stays bound | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Basics.html#index-b-_0028Rmail_0029 |
| c (Dired) | Operating on Files | c tars+gzips the targets into a prompted archive (dired-do-compress-to) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-c-_0028Dired_0029 |
| c (Kmacro Menu) | Kmacro Menu | c edits the counter of the macro at point | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Kmacro-Menu.html#index-c-_0028Kmacro-Menu_0029 |
| d (Buffer Menu) | Several Buffers | d = Buffer-menu-delete: flag D for deletion and advance | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-d-_0028Buffer-Menu_0029 |
| d (Calendar mode) | Displaying the Diary | d (Calendar mode) = diary-view-entries: show the diary entries for the date at point | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Displaying-the-Diary.html#index-d-_0028Calendar-mode_0029 |
| d (Dired) | Dired Deletion | emacs Dired d -> zmax Dired mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Deletion.html#index-d-_0028Dired_0029 |
| d (GDB threads buffer) | Threads Buffer | `d` in the GDB Threads buffer (crate::ui::gdb::GdbThreads, opened by :gdb-threads-buffer) makes the thread on the cursor row current (DAP select-thread) and then shows its disassembly, gated on the adapter's supportsDisassembleRequest. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Threads-Buffer.html#index-d-_0028GDB-threads-buffer_0029 |
| d (Package Menu) | Package Menu | d package-menu-mark-delete: mark the package for deletion (package_menu.rs:244). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-d-_0028Package-Menu_0029 |
| d (Rmail) | Rmail Deletion | Rmail d | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Deletion.html#index-d-_0028Rmail_0029 |
| e (Dired) | Dired Visiting | e visits the file at point (dired-find-file), like RET and f | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Visiting.html#index-e-_0028Dired_0029 |
| e (Rmail) | Rmail Editing | key:rmail:e | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Editing.html#index-e-_0028Rmail_0029 |
| e (View mode) | View Mode | View-exit: view_mode toggles, so on a view buffer `e` leaves view-mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/View-Mode.html#index-e-_0028View-mode_0029 |
| f (Buffer Menu) | Several Buffers | f = Buffer-menu-this-window: select buffer at point | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-f-_0028Buffer-Menu_0029 |
| f (Dired) | Dired Visiting | emacs Dired f -> zmax Dired mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Visiting.html#index-f-_0028Dired_0029 |
| f (GDB threads buffer) | Threads Buffer | `f` in the GDB Threads buffer selects the thread on the cursor row and shows its call stack (the cached DAP stackTrace frames, selected frame marked). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Threads-Buffer.html#index-f-_0028GDB-threads-buffer_0029 |
| f (Kmacro Menu) | Kmacro Menu | f edits the counter format; empty falls back to %d | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Kmacro-Menu.html#index-f-_0028Kmacro-Menu_0029 |
| f (Rmail) | Rmail Reply | Rmail f | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Reply.html#index-f-_0028Rmail_0029 |
| g (Dired) | Dired Updating | g re-reads the directory (revert-buffer) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Updating.html#index-g-_0028Dired_0029 |
| g (Package Menu) | Package Menu | g revert-buffer: refresh the archive listing (package_menu.rs:277). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-g-_0028Package-Menu_0029 |
| g (Rmail) | Rmail Files | Rmail g | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Files.html#index-g-_0028Rmail_0029 |
| g D (Calendar mode) | Specified Dates | g D prompts for a day-of-year (and optional year) and moves point there (calendar-goto-day-of-year) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Specified-Dates.html#index-g-D-_0028Calendar-mode_0029 |
| g char (Calendar mode) | From Other Calendar | The one gap — `g C`, calendar-chinese-goto-date — has landed. zmax-term/src/ui/calendar.rs:839 maps `C` to Cal::Chinese in the shared `g <char>` / `p <char>` table, and calendar.rs:483-491 reads the four cal-china components (cycle, year in cycle, month, day) and converts with zmax_core::calendar::fixed_from_chinese. The other ten (c/j/h/i/p/k/e/f/b/a) were already there, each via the matching fixed_from_* with unit-tested round-trips. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/From-Other-Calendar.html#index-g-char-_0028Calendar-mode_0029 |
| g d (Calendar mode) | Specified Dates | g d prompts for a date and moves point there (calendar-goto-date). Real two-key chord: `g` arms Prefix::Goto | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Specified-Dates.html#index-g-d-_0028Calendar-mode_0029 |
| g m (Calendar mode) | Mayan Calendar | g m is the Mayan sub-map: g m l goes to a long-count date, g m n h/t/c and g m p h/t/c to the next/previous haab, tzolkin and calendar-round date | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Mayan-Calendar.html#index-g-m-_0028Calendar-mode_0029 |
| g w (Calendar mode) | Specified Dates | g w prompts for an ISO year/week/weekday and moves point there (calendar-iso-goto-week) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Specified-Dates.html#index-g-w-_0028Calendar-mode_0029 |
| h (Calendar mode) | Holidays | key:calendar:h | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Holidays.html#index-h-_0028Calendar-mode_0029 |
| h (Package Menu) | Package Menu | h package-menu-quick-help: the quick help (package_menu.rs:321). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-h-_0028Package-Menu_0029 |
| h (Rmail) | Rmail Make Summary | Rmail h (make summary) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Make-Summary.html#index-h-_0028Rmail_0029 |
| i (Dired) | Subdirectories in Dired | i inserts a subdirectory listing (dired-maybe-insert-subdir) — same key | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Subdirectories-in-Dired.html#index-i-_0028Dired_0029 |
| i (Package Menu) | Package Menu | i package-menu-mark-install: mark the package for installation (package_menu.rs:239). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-i-_0028Package-Menu_0029 |
| i (Rmail) | Rmail Files | Rmail i | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Files.html#index-i-_0028Rmail_0029 |
| i + (Image mode) | Image Mode | i + image-increase-size: scale up (5/4, the same step :image-increase-size uses). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Image-Mode.html#index-i-_002b-_0028Image-mode_0029 |
| i - (Image mode) | Image Mode | i - image-decrease-size: scale down (4/5). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Image-Mode.html#index-i-_002d-_0028Image-mode_0029 |
| i a (Calendar mode) | Special Diary Entries | i a appends an anniversary entry (%%(diary-anniversary ...)) to the diary file (~/diary) and re-reads it so the grid marks it at once. Real two-key chord: `i` arms Prefix::Insert; the parser can only express the prefix key. The written line is unit-tested to parse back into the DateSpec it means (ui/calendar.rs, inserted_diary_lines_parse_back_to_the_right_spec). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Diary-Entries.html#index-i-a-_0028Calendar-mode_0029 |
| i b (Calendar mode) | Special Diary Entries | i b appends a block entry over the region, mark -> point (%%(diary-block ...)); with no mark it refuses to the diary file (~/diary) and re-reads it so the grid marks it at once. Real two-key chord: `i` arms Prefix::Insert; the parser can only express the prefix key. The written line is unit-tested to parse back into the DateSpec it means (ui/calendar.rs, inserted_diary_lines_parse_back_to_the_right_spec). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Diary-Entries.html#index-i-b-_0028Calendar-mode_0029 |
| i c (Calendar mode) | Special Diary Entries | i c appends a cyclic entry, reading `N TEXT` (%%(diary-cyclic ...)) to the diary file (~/diary) and re-reads it so the grid marks it at once. Real two-key chord: `i` arms Prefix::Insert; the parser can only express the prefix key. The written line is unit-tested to parse back into the DateSpec it means (ui/calendar.rs, inserted_diary_lines_parse_back_to_the_right_spec). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Diary-Entries.html#index-i-c-_0028Calendar-mode_0029 |
| i c (Image mode) | Image Mode | image-crop: reads an ImageMagick WxH+X+Y region in the viewer's minibuffer and runs image-crop.el's image-crop-crop-command (`+repage -crop WxH+X+Y`) over the image; the result is a pending, unsaved edit that `i o` (image-save) writes out. The region is typed rather than dragged as an SVG rubber band, since the picture is painted into the terminal by an external viewer. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Image-Mode.html#index-i-c-_0028Image-mode_0029 |
| i d (Calendar mode) | Adding to Diary | i d appends a one-off entry for the date at point to the diary file (~/diary) and re-reads it so the grid marks it at once. Real two-key chord: `i` arms Prefix::Insert; the parser can only express the prefix key. The written line is unit-tested to parse back into the DateSpec it means (ui/calendar.rs, inserted_diary_lines_parse_back_to_the_right_spec). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Adding-to-Diary.html#index-i-d-_0028Calendar-mode_0029 |
| i h (Image mode) | Image Mode | i h image-flip-horizontally. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Image-Mode.html#index-i-h-_0028Image-mode_0029 |
| i m (Calendar mode) | Adding to Diary | i m appends a monthly entry (this day of every month, as the wildcard-month sexp form) to the diary file (~/diary) and re-reads it so the grid marks it at once. Real two-key chord: `i` arms Prefix::Insert; the parser can only express the prefix key. The written line is unit-tested to parse back into the DateSpec it means (ui/calendar.rs, inserted_diary_lines_parse_back_to_the_right_spec). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Adding-to-Diary.html#index-i-m-_0028Calendar-mode_0029 |
| i o (Image mode) | Image Mode | image-save: prompts "Write image to file:" and copies the image's data — the file's bytes, or a pending crop/cut result — to that path, leaving the display transforms out of the saved file. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Image-Mode.html#index-i-o-_0028Image-mode_0029 |
| i r (Image mode) | Image Mode | i r image-rotate: 90 degrees clockwise. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Image-Mode.html#index-i-r-_0028Image-mode_0029 |
| i v (Image mode) | Image Mode | i v image-flip-vertically. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Image-Mode.html#index-i-v-_0028Image-mode_0029 |
| i w (Calendar mode) | Adding to Diary | i w appends a weekly entry (this weekday, by name) to the diary file (~/diary) and re-reads it so the grid marks it at once. Real two-key chord: `i` arms Prefix::Insert; the parser can only express the prefix key. The written line is unit-tested to parse back into the DateSpec it means (ui/calendar.rs, inserted_diary_lines_parse_back_to_the_right_spec). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Adding-to-Diary.html#index-i-w-_0028Calendar-mode_0029 |
| i y (Calendar mode) | Adding to Diary | i y appends a yearly entry (this month/day) to the diary file (~/diary) and re-reads it so the grid marks it at once. Real two-key chord: `i` arms Prefix::Insert; the parser can only express the prefix key. The written line is unit-tested to parse back into the DateSpec it means (ui/calendar.rs, inserted_diary_lines_parse_back_to_the_right_spec). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Adding-to-Diary.html#index-i-y-_0028Calendar-mode_0029 |
| j (Dired) | Dired Navigation | j prompts for a name and moves point to it (dired-goto-file); J stays as the alias | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Navigation.html#index-j-_0028Dired_0029 |
| j (Rmail) | Rmail Motion | Rmail j | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Motion.html#index-j-_0028Rmail_0029 |
| k (Dired) | Dired Updating | k hides the marked rows from the listing (dired-do-kill-lines); K stays as the alias | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Updating.html#index-k-_0028Dired_0029 |
| k (Rmail) | Rmail Labels | Rmail k | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Labels.html#index-k-_0028Rmail_0029 |
| l (Dired) | Dired Updating | key:dired:l | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Updating.html#index-l-_0028Dired_0029 |
| l (GDB threads buffer) | Threads Buffer | `l` in the GDB Threads buffer selects the thread on the cursor row and shows the locals of its innermost frame (DAP scopes/variables). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Threads-Buffer.html#index-l-_0028GDB-threads-buffer_0029 |
| l (Gnus Group mode) | Gnus Group Buffer | l in the Gnus group buffer switches to the default listing (subscribed groups with unread articles); the arm is in zmax-term/src/ui/gnus.rs and runs the cited command. A s is bound to the same thing. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Group-Buffer.html#index-l-_0028Gnus-Group-mode_0029 |
| l (Help mode) | Help Mode | l walks the help visit history backwards | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Mode.html#index-l-_0028Help-mode_0029 |
| l (Rmail) | Rmail Make Summary | Rmail l | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Make-Summary.html#index-l-_0028Rmail_0029 |
| m (Buffer Menu) | Several Buffers | m = Buffer-menu-mark: mark > for selection and advance | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-m-_0028Buffer-Menu_0029 |
| m (Calendar mode) | Displaying the Diary | m marks every date of the displayed month that has a diary entry (diary-mark-entries) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Displaying-the-Diary.html#index-m-_0028Calendar-mode_0029 |
| m (Dired) | Marks vs Flags | emacs Dired m -> zmax Dired mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-m-_0028Dired_0029 |
| m (Rmail) | Rmail Reply | Rmail m | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Reply.html#index-m-_0028Rmail_0029 |
| mouse-1 | Mouse Commands | mouse-set-point: mouse-1 on text moves point to the click. ui/editor.rs's Down(Left) arm runs this command, so the command really is the handler | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Mouse-Commands.html#index-mouse_002d1 |
| mouse-1 (mode line) | Mode Line Mouse | mouse-1 on a mode line selects the window it belongs to (mouse_select_window acts on Editor::last_mouse_view, the window the click named). On the mode line of a window that has one below it the press also starts a drag that moves the boundary, changing the heights above and below; the resize clamps at the minimum pane size and never deletes a window. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Mode-Line-Mouse.html#index-mouse_002d1-_0028mode-line_0029 |
| mouse-1 (scroll bar) | Mode Line Mouse | pressing mouse-1 on the vertical scroll bar moves the window to that point in the buffer and keeps following the pointer until the button is released, even once it leaves the bar. The handler records the click as a fraction of the bar and dispatches through scroll-bar-drag, so the command really is the scroll bar's handler; point is pulled to the new top line when the scroll leaves it above the window | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Mode-Line-Mouse.html#index-mouse_002d1-_0028scroll-bar_0029 |
| mouse-1 in the minibuffer (Incremental Search) | Repeat Isearch | Clicking mouse-1 on the search prompt moves the prompt cursor to the clicked column and switches the running search into edit mode — RET resumes searching with the edited string (Prompt::isearch_edit_string in ui/prompt.rs). The static command of the same name is the M-e / M-x form of the same behaviour. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Repeat-Isearch.html#index-mouse_002d1-in-the-minibuffer-_0028Incremental-Search_0029 |
| mouse-2 | Mouse Commands | mouse-yank-at-click: mouse-2 moves point to the click and inserts the kill ring's top there (ui/editor.rs's Down(Middle) arm runs it) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Mouse-Commands.html#index-mouse_002d2 |
| mouse-2 (GDB Breakpoints buffer) | Breakpoints Buffer | The middle mouse button on a row of the GDB Breakpoints buffer does the same as RET (gdb-goto-breakpoint): the clicked row becomes current and its source line is visited. Handled in the component's Event::Mouse arm on MouseEventKind::Down(MouseButton::Middle). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Breakpoints-Buffer.html#index-mouse_002d2-_0028GDB-Breakpoints-buffer_0029 |
| mouse-2 (mode line) | Mode Line Mouse | mouse-2 on a mode line expands that window to fill the frame (delete-other-windows). The press and release must land on the same mode line, and it runs ahead of the middle-click paste. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Mode-Line-Mouse.html#index-mouse_002d2-_0028mode-line_0029 |
| mouse-2 in the minibuffer (Incremental search) | Isearch Yank | Middle-clicking the search prompt while a search is running appends the selection (the '+' register, the same text C-y takes) to the search string and re-runs the search; an empty clipboard reports so. Handled in the prompt's isearch (ui/prompt.rs); the static command of the same name is the M-x form. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Isearch-Yank.html#index-mouse_002d2-in-the-minibuffer-_0028Incremental-search_0029 |
| mouse-3 | Mouse Commands | mouse-save-then-kill: mouse-3 extends the region to the click and copies it; a second press at the same place kills it (ui/editor.rs's Down(Right) arm, under mousemodel=extend) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Mouse-Commands.html#index-mouse_002d3 |
| mouse-3 (mode line) | Mode Line Mouse | mouse-3 on a mode line deletes the window it belongs to, and does nothing when it is the only window. The press and release must land on the same mode line. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Mode-Line-Mouse.html#index-mouse_002d3-_0028mode-line_0029 |
| n (DocView mode) | DocView Navigation | n doc-view-next-page. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/DocView-Navigation.html#index-n-_0028DocView-mode_0029 |
| n (Gnus Group mode) | Gnus Group Buffer | n in the Gnus group buffer moves to the next group with unread articles; the arm is in zmax-term/src/ui/gnus.rs and runs the cited command. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Group-Buffer.html#index-n-_0028Gnus-Group-mode_0029 |
| n (Gnus Summary mode) | Gnus Summary Buffer | n in the Gnus summary buffer selects the next unread article; the arm is in zmax-term/src/ui/gnus.rs and runs the cited command. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Summary-Buffer.html#index-n-_0028Gnus-Summary-mode_0029 |
| n (Rmail) | Rmail Motion | Rmail n | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Motion.html#index-n-_0028Rmail_0029 |
| next | Moving Point | emacs next (Moving Point) -> page_down | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-next |
| next (Calendar mode) | Scroll Calendar | next scrolls the calendar THREE months forward (calendar-scroll-left-three-months), matching Emacs; it used to move a single month. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Scroll-Calendar.html#index-next-_0028Calendar-mode_0029 |
| next (DocView mode) | DocView Navigation | next (PageDown) doc-view-next-page. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/DocView-Navigation.html#index-next-_0028DocView-mode_0029 |
| o (Buffer Menu) | Several Buffers | o = Buffer-menu-other-window: select in a split window | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-o-_0028Buffer-Menu_0029 |
| o (Calendar mode) | Specified Dates | calendar-other-month: prompts 'Other month (MONTH YEAR)' | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Specified-Dates.html#index-o-_0028Calendar-mode_0029 |
| o (Dired) | Dired Visiting | key:dired:o | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Visiting.html#index-o-_0028Dired_0029 |
| o (Occur mode) | Other Repeating Search | occur-mode-goto-occurrence-other-window: o goes to the occurrence in the source window (overlay model pops + jumps). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Other-Repeating-Search.html#index-o-_0028Occur-mode_0029 |
| o (Rmail) | Rmail Output | Rmail o | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Output.html#index-o-_0028Rmail_0029 |
| p (Calendar mode) | To Other Calendar | The one gap — `p C`, calendar-chinese-print-date — has landed: ui/calendar.rs:440 renders `Cal::Chinese => "Chinese date: {chinese_string(p)}"` and calendar.rs:839 binds `C` in the same cal_of table the Print prefix consults. `p` still arms Prefix::Print (calendar.rs:1191) and `p o` prints every calendar at once. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/To-Other-Calendar.html#index-p-_0028Calendar-mode_0029 |
| p (DocView mode) | DocView Navigation | p doc-view-previous-page. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/DocView-Navigation.html#index-p-_0028DocView-mode_0029 |
| p (Gnus Group mode) | Gnus Group Buffer | p in the Gnus group buffer moves to the previous group with unread articles; the arm is in zmax-term/src/ui/gnus.rs and runs the cited command. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Group-Buffer.html#index-p-_0028Gnus-Group-mode_0029 |
| p (Gnus Summary mode) | Gnus Summary Buffer | p in the Gnus summary buffer selects the previous unread article; the arm is in zmax-term/src/ui/gnus.rs and runs the cited command. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Summary-Buffer.html#index-p-_0028Gnus-Summary-mode_0029 |
| p (Rmail) | Rmail Motion | Rmail p | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Motion.html#index-p-_0028Rmail_0029 |
| p d (Calendar mode) | General Calendar | p d prints the day-of-year of the date at point (calendar-print-day-of-year), now under the real `p` prefix rather than on a bare `p`. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/General-Calendar.html#index-p-d-_0028Calendar-mode_0029 |
| prior | Moving Point | emacs prior (Moving Point) -> page_up | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-prior |
| prior (Calendar mode) | Scroll Calendar | prior scrolls the calendar THREE months back (calendar-scroll-right-three-months), matching Emacs; it used to move a single month. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Scroll-Calendar.html#index-prior-_0028Calendar-mode_0029 |
| prior (DocView mode) | DocView Navigation | prior (PageUp) doc-view-previous-page. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/DocView-Navigation.html#index-prior-_0028DocView-mode_0029 |
| q (Buffer Menu) | Several Buffers | q = quit-window: close the Buffer Menu overlay | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-q-_0028Buffer-Menu_0029 |
| q (Calendar mode) | General Calendar | emacs Calendar q -> zmax Calendar mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/General-Calendar.html#index-q-_0028Calendar-mode_0029 |
| q (Dired) | Dired Enter | emacs Dired q -> zmax Dired mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Enter.html#index-q-_0028Dired_0029 |
| q (Gnus Group mode) | Gnus Group Buffer | q in the Gnus group buffer saves ~/.newsrc and the killed/zombie sidecar and quits the reader; a failed write leaves the reader open with the error on the status line. The arm is in zmax-term/src/ui/gnus.rs and runs the cited command. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Group-Buffer.html#index-q-_0028Gnus-Group-mode_0029 |
| q (Gnus Summary mode) | Gnus Summary Buffer | q in the Gnus summary buffer returns to the group buffer with this session's read marks applied, so a fully-read group leaves the default listing; the arm is in zmax-term/src/ui/gnus.rs and runs the cited command. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Summary-Buffer.html#index-q-_0028Gnus-Summary-mode_0029 |
| q (Rmail summary) | Rmail Summary Edit | Rmail summary q (quit) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Summary-Edit.html#index-q-_0028Rmail-summary_0029 |
| q (Rmail) | Rmail Basics | Rmail q | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Basics.html#index-q-_0028Rmail_0029 |
| q (View mode) | View Mode | The note pre-dated the command: `q` in view-mode is view_quit, not the view_mode toggle. "Quit View mode, trying to restore window and buffer to previous state" has two halves and both are ported (zmax-term/src/commands.rs): point goes back to where it was when view-mode was entered -- emacs's view-return-to-alist, which View-exit deliberately does NOT restore, and which zmax keeps per buffer in VIEW_ENTRY_POINT -- and then the window is quit the way quit-window does it, closed when it is one of several and otherwise switched back to the previously visited file, which is emacs's "go to previous buffer", i.e. the bury. Run outside view-mode it does nothing rather than quitting a window by surprise. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/View-Mode.html#index-q-_0028View-mode_0029 |
| r (GDB threads buffer) | Threads Buffer | `r` in the GDB Threads buffer selects the thread on the cursor row and shows its CPU registers; adapters that expose no Registers scope say so instead. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Threads-Buffer.html#index-r-_0028GDB-threads-buffer_0029 |
| r (Help mode) | Help Mode | r walks it forwards; a new visit truncates the forward history | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Mode.html#index-r-_0028Help-mode_0029 |
| r (Package Menu) | Package Menu | r package-menu-refresh: refresh the archive listing (package_menu.rs:277). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-r-_0028Package-Menu_0029 |
| r (Rmail) | Rmail Reply | Rmail r | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Reply.html#index-r-_0028Rmail_0029 |
| s (Buffer Menu) | Several Buffers | s = Buffer-menu-save: flag S to be saved and advance | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-s-_0028Buffer-Menu_0029 |
| s (Calendar mode) | Displaying the Diary | diary-show-all-entries: lists the whole diary | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Displaying-the-Diary.html#index-s-_0028Calendar-mode_0029 |
| s (Dired) | Dired Updating | emacs Dired s -> zmax Dired mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Updating.html#index-s-_0028Dired_0029 |
| s (Gnus Summary mode) | Gnus Summary Buffer | s in the Gnus summary buffer starts the incremental search over the selected article's text; the arm is in zmax-term/src/ui/gnus.rs and runs the cited command. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Summary-Buffer.html#index-s-_0028Gnus-Summary-mode_0029 |
| s (Rmail) | Rmail Basics | Rmail s | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Basics.html#index-s-_0028Rmail_0029 |
| s (View mode) | View Mode | incremental search in View mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/View-Mode.html#index-s-_0028View-mode_0029 |
| s 0 (Image mode) | Image Mode | image-transform-reset-to-initial: clears rotation, both flips and the scale back to the size the image was first displayed at. In Emacs this differs from `s o` (-reset-to-original) only in restoring image-auto-resize rather than no resize; the terminal viewer always fits the picture to the window, so both land on the same state here and share a handler. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Image-Mode.html#index-s-0-_0028Image-mode_0029 |
| s o (Image mode) | Image Mode | s o image-transform-reset-to-original: drop every rotate/flip/scale. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Image-Mode.html#index-s-o-_0028Image-mode_0029 |
| s p (Image mode) | Image Mode | image-transform-set-percent: reads "Scale (% of original): " in the viewer's minibuffer and redisplays the image resized to that percentage of its original size; a non-positive value is rejected with Emacs's "Not a positive number". | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Image-Mode.html#index-s-p-_0028Image-mode_0029 |
| s s (Image mode) | Image Mode | image-transform-set-scale: reads "Scale: " and resizes the image by that multiplier (1.5 = 150%), redisplaying at the new scale. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Image-Mode.html#index-s-s-_0028Image-mode_0029 |
| s w (Image mode) | Image Mode | s w image-transform-fit-to-window. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Image-Mode.html#index-s-w-_0028Image-mode_0029 |
| t (Buffer Menu) | Several Buffers | `t` in the Buffer Menu visits the buffer at point as a tags table (Buffer-menu-visit-tags-table): its file is parsed as an etags TAGS table and becomes the visited one for later tag lookups, or is refused with a message when it holds no etags entries | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-t-_0028Buffer-Menu_0029 |
| t (Dired) | Marks vs Flags | emacs Dired t -> zmax Dired mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-t-_0028Dired_0029 |
| t (Rmail) | Rmail Display | Rmail t | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Display.html#index-t-_0028Rmail_0029 |
| u (Buffer Menu) | Several Buffers | u = Buffer-menu-unmark: clear mark at point and advance | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-u-_0028Buffer-Menu_0029 |
| u (Calendar mode) | Holidays | calendar-unmark | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Holidays.html#index-u-_0028Calendar-mode_0029 |
| u (Dired deletion) | Dired Deletion | u in Dired deletion context unflags (dired-unmark) — zmax u removes from marked+flagged, same key | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Deletion.html#index-u-_0028Dired-deletion_0029 |
| u (Dired) | Marks vs Flags | emacs Dired u -> zmax Dired mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-u-_0028Dired_0029 |
| u (Gnus Group mode) | Gnus Group Buffer | u in the Gnus group buffer toggles the group's subscription, turning a killed or zombie group into an unsubscribed one; the arm is in zmax-term/src/ui/gnus.rs and runs the cited command. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus-Group-Buffer.html#index-u-_0028Gnus-Group-mode_0029 |
| u (Package Menu) | Package Menu | u package-menu-mark-unmark: clear the package's mark (package_menu.rs:249). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-u-_0028Package-Menu_0029 |
| u (Rmail) | Rmail Deletion | Rmail u | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Deletion.html#index-u-_0028Rmail_0029 |
| v (Buffer Menu) | Several Buffers | v = Buffer-menu-select: select buffer at point plus all >-marked buffers | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-v-_0028Buffer-Menu_0029 |
| v (Dired) | Dired Visiting | key:dired:v | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Visiting.html#index-v-_0028Dired_0029 |
| v (Rmail) | Rmail Display | v in the Rmail reader toggles the decoded MIME display (rmail-mime): the message's entities are listed with TAB/S-TAB moving between them and RET showing or collapsing the one at point. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Display.html#index-v-_0028Rmail_0029 |
| w (Dired) | Misc Dired Features | emacs Dired w -> zmax Dired mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Dired-Features.html#index-w-_0028Dired_0029 |
| w (Package Menu) | Package Menu | w package-browse-url: open the package's home page (package_menu.rs:294). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-w-_0028Package-Menu_0029 |
| w (Rmail) | Rmail Output | Rmail w | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Output.html#index-w-_0028Rmail_0029 |
| x (Buffer Menu) | Several Buffers | x = Buffer-menu-execute: save S buffers, then kill D buffers, then refresh | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-x-_0028Buffer-Menu_0029 |
| x (Calendar mode) | Holidays | calendar-mark-holidays | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Holidays.html#index-x-_0028Calendar-mode_0029 |
| x (Dired) | Dired Deletion | emacs Dired x -> zmax Dired mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Deletion.html#index-x-_0028Dired_0029 |
| x (Package Menu) | Package Menu | x package-menu-execute: carry out the marked installs/deletions (package_menu.rs:268). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-x-_0028Package-Menu_0029 |
| x (Rmail) | Rmail Deletion | Rmail x | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Deletion.html#index-x-_0028Rmail_0029 |
| { (Buffer Menu) | Several Buffers | `{` is tabulated-list-narrow-current-column: the column at point loses a character and the rows re-render clipped to the new width, never collapsing past one character. There is no separate column cursor any more: `tabulated-list-mode`'s "current column" is simply the one POINT is in, which is why `tabulated-list-next-column` is a point motion, and that is the model now. BufferMenu carries point's horizontal offset in the row; column_starts derives each column's character offset from the layout format_row actually draws (the mark glyph, the CRM cell when the listing shows it, a space, then the four columns each behind its two-space gap), and current_column is the last column whose start is at or before point. Left/Right (and C-b/C-f) move point along the row; M-Left/M-Right are tabulated-list-previous/next-column, moving point to the start of the neighbouring column and stopping at the ends. The header underlines the column point is in. Unit tested: the derived boundaries line up with the drawn layout at every column's first and last character, the motions land where they should, and `{` on point-in-Size narrows Size and leaves the name column alone. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-_007b-_0028Buffer-Menu_0029 |
| } (Buffer Menu) | Several Buffers | `}` is tabulated-list-widen-current-column, the mirror of `{`. There is no separate column cursor any more: `tabulated-list-mode`'s "current column" is simply the one POINT is in, which is why `tabulated-list-next-column` is a point motion, and that is the model now. BufferMenu carries point's horizontal offset in the row; column_starts derives each column's character offset from the layout format_row actually draws (the mark glyph, the CRM cell when the listing shows it, a space, then the four columns each behind its two-space gap), and current_column is the last column whose start is at or before point. Left/Right (and C-b/C-f) move point along the row; M-Left/M-Right are tabulated-list-previous/next-column, moving point to the start of the neighbouring column and stopping at the ends. The header underlines the column point is in. Unit tested: the derived boundaries line up with the drawn layout at every column's first and last character, the motions land where they should, and `{` on point-in-Size narrows Size and leaves the name column alone. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-_007d-_0028Buffer-Menu_0029 |
| ~ (Buffer Menu) | Several Buffers | ~ = Buffer-menu-not-modified: clear the modified flag (reset_modified) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Several-Buffers.html#index-_007e-_0028Buffer-Menu_0029 |
| ~ (Dired) | Flagging Many Files | key:dired:~ | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Flagging-Many-Files.html#index-_007e-_0028Dired_0029 |
| ~ (Package Menu) | Package Menu | ~ package-menu-mark-obsolete-for-deletion: mark all obsolete packages (package_menu.rs:259). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Menu.html#index-_007e-_0028Package-Menu_0029 |
| B (Dired) | Operating on Files | B byte-compiles the targets (dired-do-byte-compile) via embedded elisprs; the key is the Emacs key, but elisprs is an incomplete elisp, so the compile itself is partial (same caveat as emacs.command.dired_do_byte_compile). `b` stays bound as the alias. | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-B-_0028Dired_0029 |
| C-Down-mouse-1 | Buffer Menus | mouse-buffer-menu — the buffer menu reached without the keyboard — is on C-F10, emacs's other binding for the same command, and honours msb-mode. Not done on C-mouse-1 itself: the shipped keymap preset is vim-based and binds Ctrl+left-click to vim's <C-LeftMouse> (go to the tag under the click), so taking that chord would remove a working vim binding | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Buffer-Menus.html#index-C_002dDown_002dmouse_002d1 |
| C-c C-r (GUD) | Commands of GUD | gud-cont. The same split: zmax's C-c C-r is rerun_last_run, so only Emacs's C-x C-a C-r alias is bound | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Commands-of-GUD.html#index-C_002dc-C_002dr-_0028GUD_0029 |
| C-c C-t (GUD) | Commands of GUD | gud-tbreak. Emacs gives it two keys, C-c C-t and C-x C-a C-t; zmax's C-c C-t is doc-view-open-text, so only the C-x C-a alias is bound | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Commands-of-GUD.html#index-C_002dc-C_002dt-_0028GUD_0029 |
| C-g (Incremental search) | Error in Isearch | isearch-abort: quits, restoring the start position — active under the emacs/helix presets; under the shipped spacemacs/vim default this chord keeps vim's command-line meaning | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Error-in-Isearch.html#index-C_002dg-_0028Incremental-search_0029 |
| C-h S | Misc Help | info-lookup-symbol: searches the man pages, not the language's Info manual | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Help.html#index-C_002dh-S |
| C-h v | Name Help | describe-variable: searches the editor's config variables (zmax has no Lisp variables) | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Name-Help.html#index-C_002dh-v |
| C-q (Incremental Search) | Special Isearch | isearch-quote-char: the next character enters the string quoted — active under the emacs/helix presets; under the shipped spacemacs/vim default this chord keeps vim's command-line meaning | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Special-Isearch.html#index-C_002dq-_0028Incremental-Search_0029 |
| C-r (Incremental Search) | Repeat Isearch | isearch-repeat-backward: previous match, absolute — active under the emacs/helix presets; under the shipped spacemacs/vim default this chord keeps vim's command-line meaning | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Repeat-Isearch.html#index-C_002dr-_0028Incremental-Search_0029 |
| C-s (Incremental Search) | Repeat Isearch | isearch-repeat-forward: next match; empty string recalls the last search — active under the emacs/helix presets; under the shipped spacemacs/vim default this chord keeps vim's command-line meaning | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Repeat-Isearch.html#index-C_002ds-_0028Incremental-Search_0029 |
| C-w (Incremental search) | Isearch Yank | isearch-yank-word-or-char: appends the buffer word at the match end and re-searches — active under the emacs/helix presets; under the shipped spacemacs/vim default this chord keeps vim's command-line meaning | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Isearch-Yank.html#index-C_002dw-_0028Incremental-search_0029 |
| C-wheel-down | Text Scale | zmax scales the whole terminal, not the buffer. `text_scale_decrease` (zmax-term/src/commands.rs:38947) mutates one global `editor.text_scale` counter and calls `emit_font_step(-1)` (commands.rs:38924-38934) which writes xterm `OSC 50 ;#-1` — a terminal-wide font-menu step, so every window/pane changes together and emacs's buffer-local `text-scale-mode` face-height (two windows at different scales) is unreachable. Terminals with no font menu ignore the sequence, so the command can be a pure no-op while still printing `text scale: -1`. Two further gaps the first skeptic missed: (a) the counter is unbounded while the terminal's font menu clamps at its smallest entry, so `editor.text_scale` desyncs from the real font and `text_scale_apply`/`text_scale_set` (commands.rs:61451-61466), which compute deltas from that counter, then step the wrong amount; (b) the C-wheel branch is only reached… | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dwheel_002ddown |
| C-wheel-up | Text Scale | Three gaps. (a) Effect is not per-buffer text scaling at all: text_scale_increase (commands.rs:38939) bumps one global editor.text_scale counter and emits terminal-wide OSC 50 #+1 (emit_font_step, commands.rs:38926); nothing reads editor.text_scale except the text_scale_set/adjust/mode bookkeeping (commands.rs:61445-61510), no renderer consults it, and emit_font_step's own doc says terminals without a font menu ignore the sequence — so on most terminals C-wheel-up produces only the status line "text scale: +1". The counter is also shared in effect with frame_zoom_in/out (commands.rs:38966+), which drive the same OSC steps, so the two families interfere and text_scale_reset resets globally rather than per window. emacs mouse-wheel-text-scale scales only the buffer in the window under the pointer. (b) Unadmitted runtime shadow: bufferline_y is initialized to 0 (ui/editor.rs:446) and only… | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dwheel_002dup |
| C-x 4 C-j | Dired Enter | dired-jump-other-window (no other window: zmax Dired is a modal overlay) | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Enter.html#index-C_002dx-4-C_002dj |
| C-x 4 d | Dired Enter | dired-other-window (no other window: zmax Dired is a modal overlay) | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Enter.html#index-C_002dx-4-d |
| C-x 4 f | Visiting | Emacs `C-x 4 f` / `C-x 4 C-f` (find-file-other-window). The `C-x 4` submap now exists in the emacs preset (keymap/emacs.rs:210-219) as well as spacemacs (keymap/spacemacs.rs:97-110), with f, C-f, b, 0 and `.`; those five bindings match GNU Emacs 30.2 (`key-binding` confirms each). `find_file_other_window` (commands.rs:55339) was rewritten to look for a view other than the focused one and, when one exists, focus it and build the picker with `Action::Replace` plus a `with_on_abort` that restores the previous focus, falling back to `Action::HorizontalSplit` only when this is the sole window — matching the docstring's "creates a new window or reuses an existing one". UNVERIFIED AND NOT RUNNABLE: none of this has ever been executed. The built binary predates the edits (C-x 4 is unbound there; the old code still goes 2 windows -> 3, reproduced under pty), and the working tree does not compile, so the reuse path has not been driven even once. KNOWN DIVERGENCES THAT REMAIN: - >=3 windows: emacs reuses the next window in cyclic order (verified: with focus on the middle of 3, emacs reused the window below and left the first alone). `views().find(|id| *id != focus)` picks the first view in arena order (tree.rs:608), so with focus off the arena-first view zmax replaces a different window's buffer than emacs. The two rules agree only at exactly 2 windows. - Focus is moved when the picker OPENS; emacs reads the filename in its interactive spec with the original window still selected and switches only on RET. The abort end-state is restored, but the mid-prompt state differs. - The workspace picker enumerates existing files, so it cannot visit a not-yet-existing path; emacs's prompt passes `confirm-nonexistent-file-or-buffer` and can. | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Visiting.html#index-C_002dx-4-f |
| C-x 8 | Inserting Text | C-x 8 is emacs's insert-char prefix; zmax offers the unicode picker under C-x 8 e | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Inserting-Text.html#index-C_002dx-8 |
| C-x a i l | Defining Abbrevs | C-x a i l is bound to inverse_add_mode_abbrev in the emacs preset (keymap/emacs.rs:254, committed in HEAD — not new this round). Driven end-to-end in a pty under `keymap = "emacs"` against GNU Emacs 30.2 as oracle, it matches abbrev.el's `inverse-add-abbrev` (lines 427-444) on four points: it prompts `Expansion for Mode abbrev "<name>": ` per abbrev.el:436; it stores the key downcased per `(define-abbrev table (downcase name) exp)` at :441 (verified observably — defining from `FOO` then expanding a typed lowercase `foo` hits); it runs the trailing `(save-excursion (goto-char end) (expand-abbrev))` at :442-444, replacing the word in-buffer with the expansion; and it honours `(interactive "p")` including negative counts, with C-u 2 / C-u 3 / C-u -1 selecting the same word as the oracle ("EXPANDED two", "XX bb cc", "aa ZZ cc"). Known divergence: the expansion is inserted verbatim. abbrev_do_expand (commands.rs:20739) applies the replacement as a plain Transaction with no case adjustment, so abbrev.el:865-884 — upcase-initials-region/upcase-region when the abbrev name is all-caps, capitalize-first-initial when it merely contains caps — is unported. `hello FOO` yields "hello fungible object" where emacs yields "hello Fungible Object"; `hello Foo` yields "hello fungible object" where emacs yields "hello Fungible object". Only all-lowercase abbrev names round-trip identically. Unrelated but adjacent: C-e in the emacs preset leaves the cursor on the final character rather than past it (col 1:9 on a 9-char line), so a C-e-then-C-x-a-i-l sequence defines the wrong span ("fo" instead of "foo"). That belongs to the move-end-of-line binding, not to this command — with the cursor at true point-max this command is exact. | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Defining-Abbrevs.html#index-C_002dx-a-i-l |
| C-x a l | Defining Abbrevs | `C-x a l` is bound to `add_mode_abbrev` in the emacs preset's INSERT keymap (`C-x a i l` -> inverse), and the command ports abbrev.el's `add-abbrev` prompts and word-extraction faithfully: at an equal point position it reproduces emacs 30.2 byte-for-byte, including trailing whitespace — no-arg takes one word back, ARG>0 takes ARG words back, negative ARG prompts `Undefine Mode abbrev: `, an existing definition prompts `NAME expands into "EXP"; redefine? `, and the name is stored downcased. The region clause (ARG 0 / active region) is implemented and works when the region comes from `C-x h`. It is NOT reachable the way emacs users reach it: `C-SPC` enters Select mode, whose keymap (keymap/emacs.rs:261-281) binds no `C-x` prefix, so `C-x a l` is inert with a region active. With no user region, ARG 0 silently defines a one-character abbrev from the helix block cursor instead of erroring `The mark is not set now`. `only-global-abbrevs` does not exist, so the redirect to the global table is unimplemented; mode tables are in-memory only (no `abbrev_file_name` persistence) and are keyed by document language / `fundamental` rather than an emacs major-mode name. Unrelated to this command but affecting its documented workflow: `C-e` (`goto_line_end`) stops one character short of emacs `end-of-line`, so `C-e` then `C-x a l` captures a truncated expansion. | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Defining-Abbrevs.html#index-C_002dx-a-l |
| C-y (Incremental search) | Isearch Yank | isearch-yank-kill: appends the top of the kill ring — active under the emacs/helix presets; under the shipped spacemacs/vim default this chord keeps vim's command-line meaning | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Isearch-Yank.html#index-C_002dy-_0028Incremental-search_0029 |
| I (Dired) | Operating on Files | `I` (`dired-do-info`) is bound and reachable. Dired's `handle_event` strips `KeyModifiers::SHIFT` from any `KeyCode::Char` before dispatch, so the uppercase bindings written as bare `key!('I')` fire from a real key press (verified: `I` runs the handler, `C` prompts `Copy to:`, `S` prompts `Symlink to:`). The handler shells `info --file <path> --output -` and shows the captured stdout -- the Top node only -- via `show_text_in_scratch`, then sets `close_requested`, which now pops the Dired overlay from the non-prompt key path so the scratch buffer is left visible and focused rather than hidden behind Dired. What still differs from Emacs: the result is an ordinary scratch buffer in `plain text`, not `(Info Narrow)`. Emacs's `(info FILE)` builds `*info* (a2ps) Top` with a live navigation graph; here `n`/`p`/`u`/`l`, `Info-menu` and follow-reference do nothing (`n` and `u` leave the cursor at 1:1). Rendering is info(1)'s raw output, so the node header line `File: ..., Node: Top, Next: ...` appears as buffer text where Emacs lifts it into a header-line, and menu entries keep their literal `::` where Emacs hides it and makes the entry a link. Closing this needs a per-buffer major-mode keymap mechanism zmax does not have, since binding `n`/`p`/`u`/`l` in a normal document would collide with editing keys. Separately, the missing-node case is currently invisible: when `info` exits 0 with empty output the code sets the error `info <name>: no such node or anchor: Top`, and Dired correctly stays open, but Dired's own footer occupies the status line so the message is never rendered. Emacs shows `No such node or anchor: Top` in the echo area at once (and without the `info <name>: ` prefix). | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-I-_0028Dired_0029 |
| L (Dired) | Operating on Files | L loads the targets as elisp (dired-do-load) via embedded elisprs; the key is the Emacs key, the elisp engine is partial. M-l stays bound as the alias. | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Operating-on-Files.html#index-L-_0028Dired_0029 |
| M-n (Man mode) | Man Page | Four gaps. (1) The chord is unreachable and the first skeptic mis-cited it: keymap/emacs.rs:107 `"A-n" => goto_next_diag` is nested INSIDE the `"A-g"` Goto prefix submap (M-g M-n = next-error), not a top-level M-n. Top-level `A-n` appears nowhere in emacs.rs; the only unscoped one is default.rs:93 (`select_next_sibling`). No Man major mode exists in keymap/major_mode.rs. Only `:Man-next-manpage` reaches the command. (2) There is no Man buffer: man_goto_page (typed.rs:4168) re-spawns `man '<path>' | col -bx` into the run console instead of re-narrowing an existing buffer, so emacs' point/mark/scroll state within the page does not exist. (3) Undisclosed: the page list is a process-global `thread_local!` MAN_PAGES (typed.rs:4131), not buffer-local like emacs' `Man-page-list`. A second `:Man` clobbers the first topic's list, so M-n/`:Man-next-manpage` after two lookups walks the wrong… | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Man-Page.html#index-M_002dn-_0028Man-mode_0029 |
| M-p (Man mode) | Man Page | M-p is bound nowhere in any shipped preset: emacs.rs:109 gives A-p to goto_prev_diag, and major_mode.rs has no "Man" entry (its only A-n/A-p rows, lines 285-286, are nroff), so the command is reachable only by typing :Man-previous-manpage. There is no Man-mode buffer at all -- man_goto_page (typed.rs:4168) re-renders by spawning `man '<path>' | col -bx` into the run console (typed.rs:4180) instead of narrowing a buffer, so point and scroll position are not preserved. Page state is a single process-wide thread_local MAN_PAGES (typed.rs:4131-4135) rather than emacs' per-buffer Man-page-list/Man-current-page: the command therefore succeeds against a stale list from any buffer instead of being mode-scoped, re-issuing :Man on the topic already displayed resets current to 0 (man_record_pages, typed.rs:4140) so the reader is thrown back to page 1, and only the most recently looked-up topic… | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Man-Page.html#index-M_002dp-_0028Man-mode_0029 |
| M-r (Shell mode) | Shell Ring | M-r reads a pattern and yanks the newest older input containing it onto the input line (comint-history-isearch-backward-regexp). Partial: zmax prompts for the pattern and matches it as a substring, rather than searching the history incrementally as a regexp. | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Ring.html#index-M_002dr-_0028Shell-mode_0029 |
| M-s a C-s (Dired) | Misc Dired Features | M-s a C-s searches the CONTENTS of the marked files. Partial: zmax greps them for the pattern and lists the hits rather than running an incremental isearch across the files. | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Dired-Features.html#index-M_002ds-a-C_002ds-_0028Dired_0029 |
| M-s a M-C-s (Dired) | Misc Dired Features | M-s a C-M-s is the regexp form of the above; same grep-vs-isearch caveat. | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Dired-Features.html#index-M_002ds-a-M_002dC_002ds-_0028Dired_0029 |
| M-s f C-s (Dired) | Dired Navigation | `M-s f C-s` (dired-isearch-filenames) is a port of Emacs's isearch state machine over a character-addressed position space: point is `(row, byte offset into that row's file name)`, and `isearch-cmds`, `isearch-opoint`, `isearch-barrier`, direction and wrap flags are all carried (zmax-term/src/ui/dired.rs:281-314, 1198-1442, router 2767-2830). Verified key-for-key against GNU Emacs 30.2 driving `dired-isearch-filenames` on the same 7-name fixture: every repeated match inside one file name is its own `C-s` stop (a 13-press `a` walk produces the identical row sequence, 3 stops in `aaa.txt`); typing after a repeat re-searches from the near end of the current match, so it fails in place with "Failing" instead of dragging point back to an earlier row; the first `C-r` only reverses direction and re-finds the same match from the other side (`isearch-repeat-on-direction-change` nil); a repeat past the last match fails once and wraps on the next press (`isearch-wrap-pause` t), and the prompt reproduces Emacs's "Failing"/"Wrapped"/"Overwrapped"/"case-sensitive" annotations and the " backward" suffix. `DEL` pops the command stack, `C-g` quits a successful search to the origin and rubs a failing one back to the last success, case folding follows `isearch-no-upper-case-p`, and `C-s` on an empty pattern takes the previous string off the search ring. Still partial on one point: the intra-name offset exists only while a search is live -- Dired's own point is a row, and `begin_input` opens every search at column 0 of the selected row (dired.rs:1121), while Emacs opens at point. So a search that exits with RET in the middle of a name does not hand its position to the next search: emacs `a C-s C-s RET` then a new search and `a` lands on the second entry, zmax re-matches inside the first one. There is no match-count echo, which is correct -- `isearch-lazy-count` is nil by default. | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Navigation.html#index-M_002ds-f-C_002ds-_0028Dired_0029 |
| M-s f M-C-s (Dired) | Dired Navigation | `M-s f C-M-s` (dired-isearch-filenames-regexp) opens an incremental filename search whose pattern is compiled as an Emacs regexp: `emacs_regexp_to_rust` (zmax-term/src/ui/dired.rs:324) escapes bare `(`, `)`, `|`, `{`, `}` to literals and turns `\(`, `\)`, `\|`, `\{`, `\}` into the operators, maps `\<`/`\>`/`\_<`/`\_>` to `\b`, `` \` ``/`\'` to `\A`/`\z`, drops `\=`, treats a backslash inside `[...]` as a literal member, and returns None for a trailing backslash; an uncompilable pattern leaves the state untouched so point holds (dired.rs:1238-1240). `isearch_no_upper_case` (dired.rs:387) implements `isearch-no-upper-case-p` including the `[:upper:]`/`[:lower:]` check and the odd-backslash rule, and feeds `RegexBuilder::case_insensitive` (dired.rs:1182), so smart case applies. Verified against GNU Emacs 30.2 driven in a pty on a six-file fixture: `gamma|beta` and `ap(p)` are literal and fail with the "Failing" prompt while point holds, `gamma\|beta` alternates, `p{2}` is literal where `p\{2\}` repeats, `2$` anchors, `be[` holds point, lowercase `be` folds to reach `abe.txt` while `Be` stays case-sensitive and reaches `zBeta2`, and `C-s` on an empty pattern pulls the previous string off the regexp ring and moves point to it. Still partial: the incremental re-search anchor differs. Emacs re-searches from the search origin on every keystroke, so `beta\|` matches the empty alternative and snaps point to the top of the buffer, leaving `beta\|gamma` on `gamma.txt`; zmax continues forward from the current match and never moves point back, leaving it on `zbeta.txt` -- same keys, same fixture, valid regexp, different file. zmax also omits Emacs's echo-area sub-states "[incomplete input]", "[Trailing backslash]" and the "Pending" prefix (the "Failing" prefix is present and agrees), anchors `` \` ``/`\'` to the file name rather than to the whole dired buffer, and does not translate syntax classes `\sX`/`\SX`, category classes `\cX`/`\CX` or backreferences `\1`-`\9`, which fail to compile and therefore hold point. Unrelated to this spec but affecting which row a search lands on, zmax sorts the listing case-insensitively where Emacs uses byte order. | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Navigation.html#index-M_002ds-f-M_002dC_002ds-_0028Dired_0029 |
| RET (Help mode) | Help Mode | RET visits the entry at point and pushes it on the history; the panel renders no in-text hyperlinks, so it is the selected list entry, not an underlined button | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Mode.html#index-RET-_0028Help-mode_0029 |
| TAB (GUD) | Commands of GUD | TAB in a comint buffer running gdb (`M-x gud-gdb`) is now gud-gdb-complete-command instead of shell completion: it sends gdb's own `complete <line up to point>`, so gdb's candidates print in the buffer. NOT done: inserting a unique candidate into the input line. gdb's reply arrives asynchronously on the process's stdout, and the comint has no request/response channel to read it back on, so the in-place completion Emacs performs is missing. TAB in a non-gdb comint is unchanged (completion-at-point). | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Commands-of-GUD.html#index-TAB-_0028GUD_0029 |
| TAB, when using Chinese input methods | Input Methods | quail-completion: TAB shows every alternative of the current key sequence at once, in rows of ten with the current one bracketed, in a popup that does not take point out of the buffer being typed into; while it is up C-f/C-b/C-n/C-p and the digits move the highlight in the listing instead of in the echo area, and it comes down when the translation ends. Not done: mouse-2 does not choose an alternative from the listing. | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Input-Methods.html#index-TAB_002c-when-using-Chinese-input-methods |
| c (Rmail) | Rmail Reply | c returns to the outgoing message previously being composed (rmail-continue). Partial: zmax has no named draft buffer, so it switches to the newest unsaved buffer whose first line is a `To:` header — the compose template — and reports when there is none. | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail-Reply.html#index-c-_0028Rmail_0029 |
| e (Kmacro Menu) | Kmacro Menu | e edits the key string and rejects an unreplayable macro; not emacs's full edit-kbd-macro buffer | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Kmacro-Menu.html#index-e-_0028Kmacro-Menu_0029 |
| i x (Image mode) | Image Mode | Three gaps. (1) Selection model: Emacs superimposes a movable/resizable frame on the image with its own transient keys (m = move instead of resize, s = square frame, RET = commit, q = abort, per the Image Mode manual node); zmax paints through an external viewer over a tty handoff with no cell to draw into, so the region must be typed as an ImageMagick WxH+X+Y string into an in-mode minibuffer whose only keys are printable chars, Backspace, Enter and Esc (image.rs:216-240). (2) Colour: Emacs reads it with read-color under a prefix argument (image-crop.el:134-136); the zmax overlay has no prefix-arg machinery at all, so the colour is an optional second whitespace-separated word (image.rs:353-356). (3) Missed by the first skeptic — a state-dependent edge case: image.rs:508-518 runs `if shown_path(&orig) != orig { redisplay(...) }` after dispatch_i_key returns, but for `i x` dispatch_i_key… | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Image-Mode.html#index-i-x-_0028Image-mode_0029 |
| mouse-1 (on buttons) | Mouse References | mouse-1 activates a button through follow-link, so a left click on a Help row follows the cross-reference and a left click on a customization-buffer button or field activates it (ui/help.rs, ui/settings.rs). NOT done: in an ordinary document a left click only moves point — the button regions forward-button walks are not clickable there. | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Mouse-References.html#index-mouse_002d1-_0028on-buttons_0029 |
| mouse-2 (on buttons) | Mouse References | mouse-2 is push-button: a middle click on a Help row follows that cross-reference (ui/help.rs handle_mouse), and a click on a customization-buffer button or field activates it. NOT done: an ordinary document has no clickable buttons — the URL/path/command regions forward-button walks are not activated by a click there. | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Mouse-References.html#index-mouse_002d2-_0028on-buttons_0029 |
| n (Help mode) | Help Mode | n scrolls one screenful; zmax help topics carry no ^L page separators | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Mode.html#index-n-_0028Help-mode_0029 |
| p (Help mode) | Help Mode | p: the same screenful approximation | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Mode.html#index-p-_0028Help-mode_0029 |
| t (Calendar mode) | Writing Calendar Files | t d / t m / t y write the LaTeX source of a printable day/month/year calendar to ~/calendar-*.tex (cal-tex). Partial: zmax writes the .tex and reports the path; Emacs then runs LaTeX on it, which zmax does not do. | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Writing-Calendar-Files.html#index-t-_0028Calendar-mode_0029 |
| AltGr (MS-Windows) | Windows Keyboard | — | absent | https://www.gnu.org/software/emacs/manual/html_node/emacs/Windows-Keyboard.html#index-AltGr-_0028MS_002dWindows_0029 |
| C-Break (MS-DOS) | MS-DOS Keyboard | — | absent | https://www.gnu.org/software/emacs/manual/html_node/emacs/MS_002dDOS-Keyboard.html#index-C_002dBreak-_0028MS_002dDOS_0029 |
| M-TAB, (MS-Windows) | Windows Keyboard | — | absent | https://www.gnu.org/software/emacs/manual/html_node/emacs/Windows-Keyboard.html#index-M_002dTAB_002c-_0028MS_002dWindows_0029 |
| touchscreen-hold (Dired) | Marks vs Flags | — | absent | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marks-vs-Flags.html#index-touchscreen_002dhold-_0028Dired_0029 |
jetbrains / caret-navigation (18 keys · 18 ported · 0 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| Move Caret to Code Block End | IntelliJ IDEA default keymap: Cmd Opt ] | Move Caret to Code Block End = goto next unmatched closing brace. | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Move Caret to Code Block Start | IntelliJ IDEA default keymap: Cmd Opt [ | Move Caret to Code Block Start = goto previous unmatched opening brace. | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Move Caret to Line End | IntelliJ IDEA default keymap: Cmd Right | static:goto_line_end | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Move Caret to Line Start | IntelliJ IDEA default keymap: Cmd Left | static:goto_line_start | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Move Caret to Matching Brace | IntelliJ IDEA default keymap: Ctrl M | static:match_brackets_or_goto_percent | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Move Caret to Next Word | IntelliJ IDEA default keymap: Opt Right | key:normal:w | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Move Caret to Page Bottom | IntelliJ IDEA default keymap: Cmd PageDown | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Move Caret to Page Center | IntelliJ IDEA default keymap | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Move Caret to Page Top | IntelliJ IDEA default keymap: Cmd PageUp | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Move Caret to Previous Word | IntelliJ IDEA default keymap: Opt Left | key:normal:b | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Move Caret to Text End | IntelliJ IDEA default keymap: Cmd End | static:goto_file_end | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Move Caret to Text Start | IntelliJ IDEA default keymap: Cmd Home | static:goto_file_start | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Next Method | IntelliJ IDEA default keymap: Ctrl Shift Down | static:goto_next_function | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Page Down | IntelliJ IDEA default keymap: Page Down | key:normal:C-f | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Page Up | IntelliJ IDEA default keymap: Page Up | key:normal:C-b | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Previous Method | IntelliJ IDEA default keymap: Ctrl Shift Up | static:goto_prev_function | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Scroll Line Down | IntelliJ IDEA default keymap: Cmd Down | scroll view without moving caret | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Scroll Line Up | IntelliJ IDEA default keymap: Cmd Up | scroll view without moving caret | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
jetbrains / code-analysis (4 keys · 4 ported · 0 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| Error Description | IntelliJ IDEA default keymap: Cmd F1 | full diagnostic under the caret in a popup | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Next Highlighted Error | IntelliJ IDEA default keymap: F2 | static:goto_next_diag | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Previous Highlighted Error | IntelliJ IDEA default keymap: Shift F2 | static:goto_prev_diag | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show Problems window | IntelliJ IDEA default keymap: Cmd 6 | static:focus_problems | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
jetbrains / code-folding (8 keys · 8 ported · 0 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| Collapse | IntelliJ IDEA default keymap: Cmd NumPad- | static:fold_close | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Collapse All | IntelliJ IDEA default keymap: Cmd Shift NumPad- | static:fold_close_all | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Collapse Doc Comments | IntelliJ IDEA default keymap: Code > Folding > Collapse Doc Comments | fold comment blocks | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Collapse Recursively | IntelliJ IDEA default keymap: Cmd Minus | fold under cursor + all nested | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Expand | IntelliJ IDEA default keymap: Cmd NumPad+ | static:fold_open | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Expand All | IntelliJ IDEA default keymap: Cmd Shift NumPad+ | static:fold_open_all | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Expand Recursively | IntelliJ IDEA default keymap: Cmd Plus | fold under cursor + all nested | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Fold Selection | IntelliJ IDEA default keymap: Cmd . | static:fold_create | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
jetbrains / coding-assistance (21 keys · 21 ported · 0 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| Basic Completion | IntelliJ IDEA default keymap: Ctrl Space | static:completion | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Comment with Block Comment | IntelliJ IDEA default keymap: Cmd Opt / | static:toggle_block_comments | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Comment with Line Comment | IntelliJ IDEA default keymap: Cmd / | static:toggle_line_comments | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Complete Current Statement | IntelliJ IDEA default keymap: Cmd Shift Enter | Complete Current Statement (Cmd-Shift-Enter) = complete_current_statement, bound under the Emacs major-mode prefix C-c as `C-c ;` — active in Insert, Normal AND Select (spacemacs), so it fires while typing like JetBrains. For a `fn`/`if`/`for`/`while`/`match`/`impl`/... header (line_opens_block) in a brace language (lang_uses_braces), closes any open `(`/`[` then inserts `{ body }` and drops the caret on the indented body line — e.g. `fn tommy()` -> `fn tommy() {<caret>}`, `while (1)` -> `while (1) {<caret>}`. Otherwise closes open brackets/parens, appends the terminator (`;` for semicolon languages via lang_uses_semicolons), and opens an indented line below. Brace vs semicolon are independent axes so brace-but-not-semicolon languages (Go, stryke) still get braces; an unknown/scratch buffer defaults to brace-capable (C-family). Core decision is the pure, unit-tested plan_complete_statement. Line-local heuristic (not full PSI). | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Cyclic Expand Word | IntelliJ IDEA default keymap: Alt Slash | expands the word before point from buffer words; repeat cycles | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Generate | IntelliJ IDEA default keymap: Cmd N | Generate (Cmd N) = generate_code: title-filtered ("generate") LSP code-action menu — getters/constructors/impls/derives (SPC l g) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Implement Methods | IntelliJ IDEA default keymap: Ctrl I | Implement Methods (Ctrl-I) = implement_methods: title-filtered LSP code action ("implement"), auto-applied (SPC l i) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Insert Live Template | IntelliJ IDEA default keymap: Cmd J | snippet expansion ~ live template | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Move Line Down | IntelliJ IDEA default keymap: Opt Shift Down | static:move_line_down | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Move Line Up | IntelliJ IDEA default keymap: Opt Shift Up | static:move_line_up | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Move Statement Down | IntelliJ IDEA default keymap: Cmd Shift Down | static:move_line_down | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Move Statement Up | IntelliJ IDEA default keymap: Cmd Shift Up | static:move_line_up | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Optimize Imports | IntelliJ IDEA default keymap: Ctrl Alt O | Optimize Imports (Ctrl-Alt-O) = organize_imports: dedicated source.organizeImports code action, auto-applied (SPC l O) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Override Methods | IntelliJ IDEA default keymap: Ctrl O | Override Methods (Ctrl-O) = override_methods: title-filtered LSP code action ("override"), auto-applied (SPC l v) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Parameter Info | IntelliJ IDEA default keymap: Cmd P | static:signature_help | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Quick Documentation | IntelliJ IDEA default keymap: F1 | static:hover | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Reformat Code | IntelliJ IDEA default keymap: Cmd Opt L | typable:format | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show Intention Actions | IntelliJ IDEA default keymap: Opt Enter | static:code_action | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Smart Type Completion | IntelliJ IDEA default keymap: Ctrl Shift Space | `smart_type_completion` (commands.rs) filters the server's completion list to the candidates whose signature names the type the caret is expected to produce. LSP never states that type, so it is read off the line before the caret - an annotated binding (`let x: Foo = `), a C/Java-style declaration (`Foo x = `), a cast, or a return arrow - by `expected_type_before`, with `first_type_word` reducing `&'a mut a::Foo<T>` to `Foo`. Items are kept when their `labelDetails.description` or `detail` names that type as a whole word, so `Foo` does not match `FooBar`. Nothing to filter by leaves the list unfiltered; a type that matches nothing says so instead of silently offering everything. Both readers are unit-tested (`expected_type_comes_off_the_line_before_the_caret`, `type_filter_matches_whole_words_only`). | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Surround With | IntelliJ IDEA default keymap: Cmd Opt T | static:surround_add | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Unwrap/Remove | IntelliJ IDEA default keymap: Cmd Shift Delete | replaces the innermost brace wrapper with its body, dedented | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
jetbrains / diff (7 keys · 7 ported · 0 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| Accept Left Side | IntelliJ IDEA default keymap: Cmd Ctrl Right | typable:conflict-ours | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Accept Right Side | IntelliJ IDEA default keymap: Cmd Ctrl Left | typable:conflict-theirs | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Compare Files | IntelliJ IDEA default keymap: Cmd D | typable:diff | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Next Difference | IntelliJ IDEA default keymap: F7 | static:goto_next_change | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Previous Difference | IntelliJ IDEA default keymap: Shift F7 | static:goto_prev_change | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Resolve Conflicts | IntelliJ IDEA default keymap | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show Diff | IntelliJ IDEA default keymap: Cmd D | typable:diff | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
jetbrains / editing (25 keys · 25 ported · 0 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| Auto-Indent Lines | IntelliJ IDEA default keymap: Ctrl Opt I | reindents the selection, or the whole buffer when empty | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Copy | IntelliJ IDEA default keymap: Cmd C | copy selection to system clipboard | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Copy Paths | IntelliJ IDEA default keymap: Cmd Shift C | yank file path | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Copy Reference | IntelliJ IDEA default keymap: Cmd Opt Shift C | copies the workspace-relative path:line reference to the clipboard | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Cut | IntelliJ IDEA default keymap: Cmd X | cut selection to system clipboard (yank + delete) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Delete Line | IntelliJ IDEA default keymap: Cmd Backspace | typable:delete-lines | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Delete to Word End | IntelliJ IDEA default keymap: Alt Delete | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Delete to Word Start | IntelliJ IDEA default keymap: Cmd Delete | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Duplicate Line or Selection | IntelliJ IDEA default keymap: Cmd D | typable:duplicate-line | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Indent Selection | IntelliJ IDEA default keymap: Tab | typable:indent-lines | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Join Lines | IntelliJ IDEA default keymap: Ctrl Shift J | static:join_selections | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Paste | IntelliJ IDEA default keymap: Cmd V | paste | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Paste from History | IntelliJ IDEA default keymap: Cmd Shift V | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Play Back Last Macro | IntelliJ IDEA default keymap | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Redo | IntelliJ IDEA default keymap: Cmd Shift Z | typable:redo | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Reload from Disk | IntelliJ IDEA default keymap | revert buffer to on-disk | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Save All | IntelliJ IDEA default keymap: Cmd S | typable:write-all | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Scratch File | IntelliJ IDEA default keymap: Cmd Shift N | new scratch buffer | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Start New Line | IntelliJ IDEA default keymap: Shift Enter | open line below | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Start New Line Before Current | IntelliJ IDEA default keymap: Cmd Opt Enter | open line above | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Start/Stop Macro Recording | IntelliJ IDEA default keymap | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Synchronize | IntelliJ IDEA default keymap: Cmd Alt Y | refresh all buffers from disk | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Toggle Case | IntelliJ IDEA default keymap: Cmd Shift U | typable:swapcase | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Undo | IntelliJ IDEA default keymap: Cmd Z | key:normal:u | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Unindent Line or Selection | IntelliJ IDEA default keymap: Shift Tab | typable:dedent-lines | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
jetbrains / multiple-carets (7 keys · 7 ported · 0 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| Add Caret to Each Line in Selection | IntelliJ IDEA default keymap: Opt Shift G | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Add Selection for Next Occurrence | IntelliJ IDEA default keymap: Ctrl G | Ctrl-G Add Selection for Next Occurrence = add_selection_to_next_match (incremental multi-cursor at next match of the selection) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Clone Caret Above | IntelliJ IDEA default keymap: Double Opt + Up | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Clone Caret Below | IntelliJ IDEA default keymap: Double Opt + Down | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Deselect Last Occurrence | IntelliJ IDEA default keymap: Ctrl Shift G | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Select All Occurrences | IntelliJ IDEA default keymap: Cmd Ctrl G | select all instances of symbol under cursor | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Toggle Column Selection Mode | IntelliJ IDEA default keymap: Cmd Shift 8 | vim visual-block (CTRL-V) is a true persistent rectangular mode, matching IntelliJ column-selection-mode | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
jetbrains / navigate-from-symbol (10 keys · 10 ported · 0 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| Call Hierarchy | IntelliJ IDEA default keymap: Ctrl Alt H | Call Hierarchy (Ctrl-Alt-H) = call_hierarchy_incoming_calls: real LSP prepareCallHierarchy + incomingCalls, jump picker over call sites (SPC g h; outgoing SPC g H) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Find Usages | IntelliJ IDEA default keymap: Opt F7 | static:goto_reference | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Go to Declaration or Usages | IntelliJ IDEA default keymap: Cmd B | static:goto_definition | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Go to Implementation(s) | IntelliJ IDEA default keymap: Cmd Opt B | static:goto_implementation | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Go to Super Method | IntelliJ IDEA default keymap: Cmd U | LSP has no go-to-super request, so `goto_super_method` (commands/lsp.rs) composes the three the IDE itself uses: `documentSymbol` finds the innermost type enclosing the cursor and takes the method name at point, `typeHierarchy/supertypes` gives that type's parents, and a `documentSymbol` on each parent finds the member of the same name. One hit jumps, several open the goto picker, and none reports 'No super method found' rather than falling back to `goto_definition`, which would land back on the method the cursor is already in. Bound at `SPC g ^`. | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Go to Type Declaration | IntelliJ IDEA default keymap: Cmd Shift B | static:goto_type_definition | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Highlight Usages in File | IntelliJ IDEA default keymap: Cmd Shift F7 | Highlight Usages in File = select all in-file references to the symbol under cursor. | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Quick Definition | IntelliJ IDEA default keymap: Cmd Y | Quick Definition (Cmd Y) -> peek_definition: real LSP goto-definition that renders the target's source snippet in a hover/peek popup without navigating away | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show Usages | IntelliJ IDEA default keymap: Cmd Opt F7 | static:select_references_to_symbol_under_cursor | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Type Hierarchy | IntelliJ IDEA default keymap: Ctrl H | Type Hierarchy (Ctrl-H) = type_hierarchy_supertypes/subtypes: real LSP prepareTypeHierarchy + supertypes/subtypes (SPC g T / g U), jump picker. Added type_hierarchy_provider to lsp-types + client methods + TypeHierarchy feature. | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
jetbrains / navigation (21 keys · 21 ported · 0 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| Back | IntelliJ IDEA default keymap: Cmd [ | key:normal:C-o | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Class | IntelliJ IDEA default keymap: Cmd O | workspace symbol = class navigation | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Forward | IntelliJ IDEA default keymap: Cmd ] | key:normal:C-i | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Go to Line/Column | IntelliJ IDEA default keymap: Cmd L | typable:goto | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Jump to Navigation Bar | IntelliJ IDEA default keymap: Cmd Up | picker over the enclosing function/class captures; jumps and centers | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Jump to Source | IntelliJ IDEA default keymap: F4 | Jump to Source (F4) -> goto_definition: real LSP goto-definition to the symbol's source | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Last Edit Location | IntelliJ IDEA default keymap: Cmd Shift Backspace | static:goto_last_modification | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Next Bookmark | IntelliJ IDEA default keymap | Next Bookmark = bookmark_next: jump to next line bookmark across files (wraps) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Next Occurrence | IntelliJ IDEA default keymap: Cmd Opt Down | static:search_next | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Previous Bookmark | IntelliJ IDEA default keymap | Previous Bookmark = bookmark_prev: jump to previous line bookmark across files (wraps) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Previous Occurrence | IntelliJ IDEA default keymap: Cmd Opt Up | static:search_prev | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Recent Files | IntelliJ IDEA default keymap: Cmd E | static:frecent_file_picker | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Recent Locations | IntelliJ IDEA default keymap: Cmd Shift E | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Related File | IntelliJ IDEA default keymap: Ctrl Cmd Up | header/source, test/impl, template/component twin | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Select In | IntelliJ IDEA default keymap: Opt F1 | target menu: project tree / dired / terminal | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Select Next Tab | IntelliJ IDEA default keymap: Cmd Shift ] | static:goto_next_buffer | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Select Previous Tab | IntelliJ IDEA default keymap: Cmd Shift [ | static:goto_previous_buffer | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show Structure window | IntelliJ IDEA default keymap: Cmd 7 | static:focus_structure | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Switcher | IntelliJ IDEA default keymap: Ctrl Tab | static:buffer_picker | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Test | IntelliJ IDEA default keymap: Cmd Shift T | Navigate to Test (Cmd Shift T) -> toggle_test_file: real impl/test counterpart jump (searches same dir, tests/, sibling tests/ & src/ for test_counterpart_names, opens it) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Toggle Bookmark | IntelliJ IDEA default keymap: F3 | Toggle Bookmark (F11) = bookmark_toggle: real line-level bookmark (file:line), distinct from file-level harpoon | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
jetbrains / refactoring (13 keys · 13 ported · 0 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| Change Signature | IntelliJ IDEA default keymap: Cmd F6 | Change Signature (Cmd F6) = change_signature: dedicated title-filtered ("signature") refactor code action | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Extract Constant | IntelliJ IDEA default keymap | pinned refactor.extract action by title; applies the single match directly (menu fallback if ambiguous) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Extract Method | IntelliJ IDEA default keymap: Cmd Opt M | pinned refactor.extract action by title; applies the single match directly (menu fallback if ambiguous) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Inline | IntelliJ IDEA default keymap: Cmd Opt N | dedicated refactor.inline code action | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Introduce Field | IntelliJ IDEA default keymap: Cmd Opt F | pinned refactor.extract action by title; applies the single match directly (server-dependent, menu fallback if ambiguous) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Introduce Parameter | IntelliJ IDEA default keymap: Cmd Opt P | pinned refactor.extract action by title; applies the single match directly (server-dependent, menu fallback if ambiguous) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Introduce Variable | IntelliJ IDEA default keymap: Cmd Opt V | pinned refactor.extract action by title; applies the single match directly (menu fallback if ambiguous) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Move | IntelliJ IDEA default keymap: F6 | git mv (else rename) the file and repoint the buffer | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Pull Members Up | IntelliJ IDEA default keymap | Pull Members Up = pull_members_up: dedicated title-filtered ("pull") refactor code action | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Push Members Down | IntelliJ IDEA default keymap | Push Members Down = push_members_down: dedicated title-filtered ("push") refactor code action | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Refactor This | IntelliJ IDEA default keymap: Ctrl T | popup of all applicable refactor.* actions, matching IntelliJ Refactor This | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Rename | IntelliJ IDEA default keymap: Shift F6 | static:rename_symbol | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Safe Delete | IntelliJ IDEA default keymap: Cmd Delete | dedicated JetBrains Safe Delete command | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
jetbrains / run-debug (21 keys · 21 ported · 0 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| Debug | IntelliJ IDEA default keymap: Ctrl Opt D | static:dap_launch | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Debug context configuration | IntelliJ IDEA default keymap: Ctrl D | static:dap_launch | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Edit Configurations | IntelliJ IDEA default keymap | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Evaluate Expression | IntelliJ IDEA default keymap: Opt F8 | typable:debug-eval | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Pause Program | IntelliJ IDEA default keymap | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Rerun | IntelliJ IDEA default keymap: Ctrl F5 | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Restart | IntelliJ IDEA default keymap: Cmd Shift F5 | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Resume Program | IntelliJ IDEA default keymap: Cmd Alt R | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Run | IntelliJ IDEA default keymap: Ctrl Opt R | static:run_config_manager | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Run Anything | IntelliJ IDEA default keymap: Double Ctrl | runs any prompted command in the Run tool window | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Run To Cursor | IntelliJ IDEA default keymap: Opt F9 | jetbrains run to cursor | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Run context configuration | IntelliJ IDEA default keymap: Ctrl R | static:run_active_config | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show Debug window | IntelliJ IDEA default keymap: Cmd 5 | focuses the Debug IDE panel | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show Run window | IntelliJ IDEA default keymap: Cmd 4 | static:focus_run_console | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Smart Step Into | IntelliJ IDEA default keymap: Shift F7 | JetBrains Smart Step Into is DAP's `stepInTargets`: the adapter lists the call sites on the line the frame is stopped at and `stepIn` takes the chosen target's id. `dap_smart_step_in` (commands/dap.rs) asks for the targets on the active frame, steps straight in when there is one, and opens a picker of the call labels when there are several. Adapters that do not advertise `supportsStepInTargetsRequest`, frames the adapter refuses, and lines with no targets fall through to a plain step-in, so the key always steps. Bound on Shift-F7 (the IntelliJ chord) and `SPC d I`; the request/response types are in zmax-dap-types and the client methods in zmax-dap. | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Step Into | IntelliJ IDEA default keymap: F7 | static:dap_step_in | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Step Out | IntelliJ IDEA default keymap: Shift F8 | static:dap_step_out | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Step Over | IntelliJ IDEA default keymap: F8 | static:dap_next | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Stop | IntelliJ IDEA default keymap: Cmd F2 | static:dap_terminate | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Toggle Line Breakpoint | IntelliJ IDEA default keymap: Cmd F8 | static:dap_toggle_breakpoint | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| View Breakpoints | IntelliJ IDEA default keymap: Cmd Shift F8 | View Breakpoints (Cmd Shift F8) = dap_breakpoints_picker: a real picker over all set breakpoints (file:line + verified/condition/log flags) that jumps to the selected one (SPC d B) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
jetbrains / search (12 keys · 12 ported · 0 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| File Structure | IntelliJ IDEA default keymap: Cmd F12 | static:symbol_picker | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Find | IntelliJ IDEA default keymap: Cmd F | static:search | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Find Action | IntelliJ IDEA default keymap: Cmd Shift A | static:command_palette | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Find Next | IntelliJ IDEA default keymap: Cmd G | static:search_next | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Find Previous | IntelliJ IDEA default keymap: Cmd Shift G | static:search_prev | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Find Word at Caret | IntelliJ IDEA default keymap: Cmd F3 | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Find in Files | IntelliJ IDEA default keymap: Cmd Shift F | static:search_in_files | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Go to File | IntelliJ IDEA default keymap: Cmd Shift O | static:file_picker | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Go to Symbol | IntelliJ IDEA default keymap: Cmd Opt O | static:symbol_picker | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Replace | IntelliJ IDEA default keymap: Cmd R | typable:substitute | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Replace in Files | IntelliJ IDEA default keymap: Cmd Shift R | Replace in Files (Cmd Shift R) = :project-replace/:replace-in-files: real regex replace across all matching workspace files (ripgrep) with capture refs, writes files + reloads open buffers | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Search Everywhere | IntelliJ IDEA default keymap: Double Shift | static:command_palette | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
jetbrains / selection (3 keys · 3 ported · 0 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| Extend Selection | IntelliJ IDEA default keymap: Opt Up | syntactic expand | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Select All | IntelliJ IDEA default keymap: Cmd A | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Shrink Selection | IntelliJ IDEA default keymap: Opt Down | static:wildfire_shrink | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
jetbrains / tool-windows (12 keys · 12 ported · 0 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| Hide Active Tool Window | IntelliJ IDEA default keymap: Shift Escape | jetbrains tool-window management | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Hide All Tool Windows | IntelliJ IDEA default keymap: Cmd Shift F12 | jetbrains tool-window management | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Jump to Last Tool Window | IntelliJ IDEA default keymap: F12 | jetbrains tool-window management | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Quick Switch Scheme | IntelliJ IDEA default keymap: Ctrl Backtick | scheme/theme switch | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Settings | IntelliJ IDEA default keymap: Cmd Comma | static:preferences | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show Bookmarks window | IntelliJ IDEA default keymap: Cmd 2 | jetbrains tool window | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show Find window | IntelliJ IDEA default keymap: Cmd 3 | project search results render in the Run console panel | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show Project window | IntelliJ IDEA default keymap: Cmd 1 | static:focus_file_tree | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show Services window | IntelliJ IDEA default keymap: Cmd 8 | jetbrains tool window | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show Structure window | IntelliJ IDEA default keymap: Cmd 7 | static:focus_structure | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show Terminal window | IntelliJ IDEA default keymap: Opt F12 | static:terminal | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| TODO | IntelliJ IDEA default keymap | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
jetbrains / vcs (16 keys · 16 ported · 0 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| Add to VCS | IntelliJ IDEA default keymap: Cmd Alt A | stage ~ add to vcs | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Annotate with Git Blame | IntelliJ IDEA default keymap | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Branches | IntelliJ IDEA default keymap: Cmd Shift Backtick | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Commit | IntelliJ IDEA default keymap: Cmd K | magit commit | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Next Change | IntelliJ IDEA default keymap: Ctrl Opt Shift Down | typable:hunk-next | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Previous Change | IntelliJ IDEA default keymap: Ctrl Opt Shift Up | typable:hunk-prev | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Push | IntelliJ IDEA default keymap: Cmd Shift K | push current branch to remote (git push, GIT_TERMINAL_PROMPT=0) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Rollback | IntelliJ IDEA default keymap: Cmd Opt Z | revert hunk | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show Commit window | IntelliJ IDEA default keymap: Cmd 0 | static:git_status | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show Git Log | IntelliJ IDEA default keymap | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show History | IntelliJ IDEA default keymap | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show Version Control window | IntelliJ IDEA default keymap: Cmd 9 | static:focus_git_panel | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Stash Changes | IntelliJ IDEA default keymap | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Unstash Changes | IntelliJ IDEA default keymap | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Update Project | IntelliJ IDEA default keymap: Cmd T | fast-forward pull from upstream (git pull --ff-only) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| VCS Operations Popup | IntelliJ IDEA default keymap: Ctrl V | magit status popup | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
jetbrains / view (5 keys · 5 ported · 0 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| Inlay Hints | IntelliJ IDEA default keymap: View > Inlay Hints | toggle LSP inlay hints | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show Indent Guides | IntelliJ IDEA default keymap: View > Active Editor > Show Indent Guides | toggle indentation guides | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show Line Numbers | IntelliJ IDEA default keymap: View > Active Editor > Show Line Numbers | toggle line-numbers gutter | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Show Whitespaces | IntelliJ IDEA default keymap: View > Active Editor > Show Whitespaces | toggle whitespace rendering | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Soft-Wrap | IntelliJ IDEA default keymap: View > Active Editor > Soft-Wrap | toggle soft-wrap of long lines | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
jetbrains / window (15 keys · 15 ported · 0 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| Change Splitter Orientation | IntelliJ IDEA default keymap | transpose split orientation | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Close All Tabs | IntelliJ IDEA default keymap | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Close Other Tabs | IntelliJ IDEA default keymap | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Close Tab | IntelliJ IDEA default keymap: Cmd W | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Goto Next Splitter | IntelliJ IDEA default keymap: Cmd Alt Right | cycle splits | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Goto Previous Splitter | IntelliJ IDEA default keymap: Cmd Alt Left | cycle splits (reverse) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Move to Opposite Tab Group | IntelliJ IDEA default keymap | Move to Opposite Tab Group = move_to_opposite_group: swaps the current editor into the adjacent split group (first available direction) | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Reopen Closed Tab | IntelliJ IDEA default keymap: Cmd Shift T | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Split and Move Down | IntelliJ IDEA default keymap | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Split and Move Right | IntelliJ IDEA default keymap | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Stretch Split to Bottom | IntelliJ IDEA default keymap: Cmd Shift Down | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Stretch Split to Left | IntelliJ IDEA default keymap: Cmd Shift Left | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Stretch Split to Right | IntelliJ IDEA default keymap: Cmd Shift Right | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Stretch Split to Top | IntelliJ IDEA default keymap: Cmd Shift Up | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
| Unsplit All | IntelliJ IDEA default keymap | jetbrains | ported | https://www.jetbrains.com/help/idea/reference-keymap-mac-default.html |
neovim / cmdline-editing (53 keys · 51 ported · 2 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| 'wildchar' | Do completion on the pattern in front of the | wildchar completion = <Tab> | ported | index.txt:c_wildchar |
| <BS> | delete the character in front of the cursor | <BS> | ported | index.txt:c_ |
| <C-Left> | cursor one word left | <C-Left> | ported | index.txt:c_ |
| <C-Right> | cursor one word right | <C-Right> | ported | index.txt:c_ |
| <CR> | execute entered command | <CR> | ported | index.txt:c_ |
| <Del> | delete the character under the cursor | <Del> | ported | index.txt:c_ |
| <Down> | recall next command-line from history that | <Down> | ported | index.txt:c_ |
| <End> | cursor to end of command-line | <End> | ported | index.txt:c_ |
| <Esc> | abandon command-line without executing it | <Esc> | ported | index.txt:c_ |
| <Home> | cursor to start of command-line | <Home> | ported | index.txt:c_ |
| <Insert> | toggle insert/overstrike mode | toggles overstrike on the command line | ported | index.txt:c_ |
| <Left> | cursor left | <Left> | ported | index.txt:c_ |
| <LeftMouse> | cursor at mouse click | c_<LeftMouse>: a click on the : line puts the command-line cursor at the clicked column (Prompt::move_to_column — the inverse of the cursor's index->column mapping, anchor- and display-width-aware). | ported | index.txt:c_ |
| <NL> | same as <CR> | <NL> = <CR> (execute) | ported | index.txt:c_ |
| <PageDown> | same as <S-Down> | recall next history entry | ported | index.txt:c_ |
| <PageUp> | same as <S-Up> | recall previous history entry | ported | index.txt:c_ |
| <Right> | cursor right | <Right> | ported | index.txt:c_ |
| <S-Down> | recall next command-line from history | recall next history entry | ported | index.txt:c_ |
| <S-Left> | cursor one word left | cursor one word left | ported | index.txt:c_ |
| <S-Right> | cursor one word right | cursor one word right | ported | index.txt:c_ |
| <S-Tab> | same as CTRL-P | <S-Tab> | ported | index.txt:c_ |
| <S-Up> | recall previous command-line from history | recall previous history entry | ported | index.txt:c_ |
| <Tab> | if 'wildchar' is <Tab>: Do completion on | <Tab> | ported | index.txt:c_ |
| <Up> | recall previous command-line from history that | <Up> | ported | index.txt:c_ |
| CTRL-A | do completion on the pattern in front of the | The note said it was approximated by `C-l`. It is vim's own behavior: `c_CTRL-A` inserts EVERY name matching the pattern in front of the cursor (Prompt::complete_insert_all_matches, zmax-term/src/ui/prompt.rs:3524), which is a different command from `c_CTRL-L`'s longest-common-prefix completion -- and that has its own arm. Gated to the vim presets, since `C-a` is beginning-of-line in the emacs ones. | ported | index.txt:c_CTRL-A |
| CTRL-B | cursor to begin of command-line | c_CTRL-B — under the vim/spacemacs presets (`Editor::vim_semantics`, set at zmax-term/src/application.rs:253/:935) C-b moves the cursor to the beginning of the command line, the same as `<Home>`/C-a (zmax-term/src/ui/prompt.rs:1879, `move_start`). Verified against nvim: `:/b/Z/<C-B>s<CR>` on "abc" yields "aZc" in both. Applies to the `/` search prompt as well, since both share `Prompt::handle_event`. Under the helix/emacs presets C-b remains `backward-char` (prompt.rs:1880); `<Home>`, C-a and `<Left>` are unchanged. | ported | index.txt:c_CTRL-B |
| CTRL-C | same as <Esc> | CTRL-C | ported | index.txt:c_CTRL-C |
| CTRL-D | list completions that match the pattern in | c_CTRL-D lists the names matching the pattern in front of the cursor, per cmdline.txt: list_completion_before_cursor (prompt.rs:459) feeds completion_fn the slice &self.line[..self.cursor] instead of the whole line, clears the selection, resets wild_press, and leaves the line untouched. Verified in a pty against nvim 0.12.4: ':setx' with the cursor on the 'x' lists set/setglobal/setlocal (nvim: set/setfiletype/setglobal/setlocal) and leaves the line as ':setx'; before the change the whole-line pattern 'setx' matched nothing and listed nothing. The cursor-at-end control (':set' + C-D) is unchanged and produces the identical list. Enter after C-D executes the typed line, so nothing is selected, and the cmdline_eval short-circuit is kept, so the nested '=' prompt of c_CTRL-\_e still lists nothing. What still differs is not in this arm: the candidate set itself comes from zmax's fuzzy matcher over a merged vim+emacs command namespace, so the list is far longer than nvim's prefix-matched ex commands and omits setfiletype (an alias of :language); Tab/wildchar emits a byte-identical list, which places that divergence in the shared completion_fn. Long lists are also not paged the way nvim's '-- More --' prompt pages them. The Emacs-preset C-D delete-char arm (prompt.rs:1972) is unchanged and remains undriveable, since ':' does not open a prompt under :keymap emacs. | ported | index.txt:c_CTRL-D |
| CTRL-E | cursor to end of command-line | CTRL-E | ported | index.txt:c_CTRL-E |
| CTRL-G | next match when 'incsearch' is active | c_CTRL-G: next match while 'incsearch' is live (ui/prompt.rs incsearch_cycle). vim presets only - in the Emacs presets C-g stays isearch-abort | ported | index.txt:c_CTRL-G |
| CTRL-H | same as <BS> | CTRL-H | ported | index.txt:c_CTRL-H |
| CTRL-I | same as <Tab> | CTRL-I | ported | index.txt:c_CTRL-I |
| CTRL-J | same as <CR> | execute command line (same as CR) | ported | index.txt:c_CTRL-J |
| CTRL-K {char1} {char2} | enter digraph | vim CTRL-K {char1}{char2} -> zmax insert_digraph (i_CTRL-K, two-char mnemonic via digraph_lookup) | ported | index.txt:c_CTRL-K |
| CTRL-L | do completion on the pattern in front of the | completes by the longest common prefix of all matches, selecting none | ported | index.txt:c_CTRL-L |
| CTRL-M | same as <CR> | CTRL-M | ported | index.txt:c_CTRL-M |
| CTRL-N | after using 'wildchar' with multiple matches: | CTRL-N | ported | index.txt:c_CTRL-N |
| CTRL-P | after using 'wildchar' with multiple matches: | CTRL-P | ported | index.txt:c_CTRL-P |
| CTRL-Q | same as CTRL-V, unless it's used for terminal | c_CTRL-Q: like c_CTRL-V, the next key is data, not a command. vim presets only - in the Emacs presets C-q keeps exiting the completion selection | ported | index.txt:c_CTRL-Q |
| CTRL-R CTRL-O {regname} | insert the contents of a register or object | inserts the register literally; fixes C-r C-o x inserting register o then a literal x | ported | index.txt:c_CTRL-R_CTRL-O |
| CTRL-R CTRL-R {regname} | inserts the register literally | ported | index.txt:c_CTRL-R_CTRL-R | |
| CTRL-R {regname} | insert the contents of a register or object | CTRL-R {regname} | ported | index.txt:c_CTRL-R |
| CTRL-T | previous match when 'incsearch' is active | c_CTRL-T: previous match while 'incsearch' is live (ui/prompt.rs incsearch_cycle) | ported | index.txt:c_CTRL-T |
| CTRL-U | remove all characters between the cursor | CTRL-U | ported | index.txt:c_CTRL-U |
| CTRL-V | insert next non-digit literally, insert three | next key literal, plus 3-digit decimal / o / x / u / U / b character codes | ported | index.txt:c_CTRL-V |
| CTRL-W | delete the word in front of the cursor | CTRL-W | ported | index.txt:c_CTRL-W |
| CTRL-[ | same as <Esc> | CTRL-[ | ported | index.txt:c_CTRL-[ |
| CTRL-\ CTRL-G | go to Normal mode, abandon command-line | same as c_CTRL-\_CTRL-N | ported | index.txt:c_CTRL-\_CTRL-G |
| CTRL-\ CTRL-N | go to Normal mode, abandon command-line | abandons the command line and returns to Normal mode | ported | index.txt:c_CTRL-\_CTRL-N |
| CTRL-] | trigger abbreviation | c_CTRL-] expands the :cabbrev in front of the cursor (zmax_core::abbrev find_expansion, AbbrevMode::Command - the table :cabbrev fills) | ported | index.txt:c_CTRL-] |
| CTRL-^ | toggle use of |:lmap| mappings | c_CTRL-^ toggles 'imsearch', which is the switch ui/prompt.rs reads before translating a typed character through the :lmap (Lang-Arg) table | ported | index.txt:c_CTRL-^ |
| CTRL-\ e {expr} replace the command line with the result of | {expr} | CTRL-\ e {expr} evaluates {expr} as an EXPRESSION (not a script) and replaces the whole command line with the result, driven and diffed against nvim 0.12.4 in a pty. Verified matching: string literals in either quote style, numbers, floats and dicts; getcmdline()/getcmdtype()/getcmdpos() readable from inside the expression, including type `/` at the search prompt (which zmax words "search:"); the doc's own `getcmdline() .. " Some()"` example; the cursor rule — unchanged mid-line, kept when the result is shorter (clamped to a char boundary), moved to the new end only when it was already at the end, and overridden by setcmdpos(); and the restore path on a failing expression, a syntax error, a reported-but-not-failing error such as `no_such_fn()` (E117), and <Esc>. The resulting line is a real command line: an expression yielding "set nonumber" executes on <CR>. Still differs from nvim: (1) a nested CTRL-\ e inside the expression prompt is honored instead of being inserted literally — vim types `^\e` into the expression and later executes the original line, zmax clears the expression line and ultimately executes nothing; (2) a List result renders as `[1, 2]` instead of vim's NUL-joined `1^@2^@`. | partial | index.txt:c_CTRL-\_e |
| {char1} <BS> {char2} | enter digraph when 'digraph' is on | digraph entry via C-k (insert_digraph); different input model than {char1}<BS>{char2} | partial | index.txt:c_digraph |
neovim / insert-mode (98 keys · 95 ported · 3 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| 0 CTRL-D | delete all indent in the current line | 0 CTRL-D deletes the just-typed 0 and all of the line indent (insert_unindent). | ported | index.txt:i_0_CTRL-D |
| <BS> | delete character before the cursor | delete char backward | ported | index.txt:i_ |
| <C-End> | cursor past end of file | <C-End> | ported | index.txt:i_ |
| <C-Home> | cursor to start of file | <C-Home> | ported | index.txt:i_ |
| <C-Left> | cursor one word left | <C-Left> | ported | index.txt:i_ |
| <C-Right> | cursor one word right | <C-Right> | ported | index.txt:i_ |
| <CR> | begin new line | insert newline | ported | index.txt:i_ |
| <Del> | delete character under the cursor | delete char forward | ported | index.txt:i_ |
| <Down> | cursor one line down | move down | ported | index.txt:i_ |
| <End> | cursor past end of line | goto line end | ported | index.txt:i_ |
| <Esc> | end insert mode | ends insert mode and puts the cursor on the last inserted character, as vim does, however Insert was entered. Verified against vim 9.2 by driving both: iX<Esc>x, cwZ<Esc>x, AZ<Esc>x, oNEW<Esc>x, sQ<Esc>x and aX<Esc>x all match. Gated on Editor::vim_semantics - the helix preset deliberately leaves the cursor where insertion stopped and still does. | ported | index.txt:i_ |
| <F1> | same as <Help> | stops insert mode and opens the Help browser | ported | index.txt:i_ |
| <Help> | stop insert mode and display help window | i_<Help> stop insert and open the help browser | ported | index.txt:i_ |
| <Home> | cursor to start of line | goto line start | ported | index.txt:i_ |
| <Insert> | toggle Insert/Replace mode | <Insert> in insert mode toggles between inserting and overtyping (Insert <-> Replace) via toggle_replace_mode, matching vim (was one-way to Replace). | ported | index.txt:i_ |
| <Left> | cursor one character left | move left | ported | index.txt:i_ |
| <LeftMouse> | cursor at mouse click | the mouse handler is mode-independent: a left click in Insert moves the cursor to the click and stays in Insert | ported | index.txt:i_ |
| <NL> | same as <CR> | insert newline (C-J) | ported | index.txt:i_ |
| <PageDown> | one screenful forward | page down | ported | index.txt:i_ |
| <PageUp> | one screenful backward | page up | ported | index.txt:i_ |
| <Right> | cursor one character right | move right | ported | index.txt:i_ |
| <S-Down> | same as <PageDown> | <S-Down> | ported | index.txt:i_ |
| <S-Left> | cursor one word left | <S-Left> | ported | index.txt:i_ |
| <S-Right> | cursor one word right | <S-Right> | ported | index.txt:i_ |
| <S-ScrollWheelDown> | move window one page down | <S-ScrollWheelDown>: shift+wheel moves the window one page (inner_height) instead of mousescroll=ver:N lines. | ported | index.txt:i_ |
| <S-ScrollWheelLeft> | move window one page left | <S-ScrollWheelLeft>: shift+horizontal wheel moves the window one page (inner_width) left. | ported | index.txt:i_ |
| <S-ScrollWheelRight> | move window one page right | <S-ScrollWheelRight>: shift+horizontal wheel moves the window one page right. | ported | index.txt:i_ |
| <S-ScrollWheelUp> | move window one page up | <S-ScrollWheelUp>: shift+wheel moves the window one page up. | ported | index.txt:i_ |
| <S-Up> | same as <PageUp> | <S-Up> | ported | index.txt:i_ |
| <ScrollWheelDown> | move window three lines down | the wheel scrolls the window under the pointer in every mode, including Insert; the branch calls the same commands::scroll the scroll_down command runs, and honours vim 'mousescroll' (ver:N lines per notch) | ported | index.txt:i_ |
| <ScrollWheelLeft> | move window six columns left | <ScrollWheelLeft>: horizontal wheel moves the window mousescroll=hor:N columns left (vim default hor:6). | ported | index.txt:i_ |
| <ScrollWheelRight> | move window six columns right | <ScrollWheelRight>: horizontal wheel moves the window mousescroll=hor:N columns right. | ported | index.txt:i_ |
| <ScrollWheelUp> | move window three lines up | as <ScrollWheelDown>, upwards; 'mousescroll' ver:N sets the notch size | ported | index.txt:i_ |
| <Tab> | insert a <Tab> character | insert tab | ported | index.txt:i_ |
| <Up> | cursor one line up | move up | ported | index.txt:i_ |
| CTRL-@ | insert previously inserted text and stop | insert previously-inserted text (i_CTRL-A/i_CTRL-@) | ported | index.txt:i_CTRL-@ |
| CTRL-A | insert previously inserted text | insert previously-inserted text (i_CTRL-A/i_CTRL-@) | ported | index.txt:i_CTRL-A |
| CTRL-C | quit insert mode, without checking for | normal mode | ported | index.txt:i_CTRL-C |
| CTRL-D | delete one shiftwidth of indent in the current | CTRL-D | ported | index.txt:i_CTRL-D |
| CTRL-E | insert the character which is below the cursor | i_CTRL-E: insert char from line below (copy_char_below) | ported | index.txt:i_CTRL-E |
| CTRL-E | stop completion and go back to original text | stop completion and go back to original text | ported | index.txt:complete_CTRL-E |
| CTRL-G <Down> | line down, to column where inserting started | CTRL-G <Down>: display line down | ported | index.txt:i_CTRL-G_j |
| CTRL-G <Up> | line up, to column where inserting started | CTRL-G <Up>: display line up | ported | index.txt:i_CTRL-G_k |
| CTRL-G CTRL-J | line down, to column where inserting started | CTRL-G CTRL-J: display line down | ported | index.txt:i_CTRL-G_j |
| CTRL-G CTRL-K | line up, to column where inserting started | CTRL-G CTRL-K: display line up | ported | index.txt:i_CTRL-G_k |
| CTRL-G U | don't break undo with next cursor movement | don't break undo with next cursor movement | ported | index.txt:i_CTRL-G_U |
| CTRL-G j | line down, to column where inserting started | CTRL-G j: display line down | ported | index.txt:i_CTRL-G_j |
| CTRL-G k | line up, to column where inserting started | CTRL-G k: display line up | ported | index.txt:i_CTRL-G_k |
| CTRL-G u | start new undoable edit | start new undoable edit | ported | index.txt:i_CTRL-G_u |
| CTRL-H | same as <BS> | delete char backward | ported | index.txt:i_CTRL-H |
| CTRL-I | same as <Tab> | CTRL-I | ported | index.txt:i_CTRL-I |
| CTRL-J | same as <CR> | insert newline | ported | index.txt:i_CTRL-J |
| CTRL-K {char1} {char2} | enter digraph | enter digraph | ported | index.txt:i_CTRL-K |
| CTRL-M | same as <CR> | CTRL-M | ported | index.txt:i_CTRL-M |
| CTRL-N | find next match for keyword in front of the | CTRL-N | ported | index.txt:i_CTRL-N |
| CTRL-O | execute a single command and return to insert | i_CTRL-O run one Normal-mode command then return to Insert (one-shot; integration-tested) | ported | index.txt:i_CTRL-O |
| CTRL-P | find previous match for keyword in front of | CTRL-P | ported | index.txt:i_CTRL-P |
| CTRL-Q | same as CTRL-V, unless used for terminal | same as CTRL-V, unless used for terminal | ported | index.txt:i_CTRL-Q |
| CTRL-R CTRL-O {register} | insert the contents of a register literally | C-r C-o {reg} inserts the register literally with no autoindent; zmax pastes as-is, matching. | ported | index.txt:i_CTRL-R_CTRL-O |
| CTRL-R CTRL-R {register} | insert the contents of a register literally | C-r C-r {reg} inserts the register literally; zmax already pastes register contents literally, so it matches i_CTRL-R. | ported | index.txt:i_CTRL-R_CTRL-R |
| CTRL-R {register} | insert the contents of a register | insert register | ported | index.txt:i_CTRL-R |
| CTRL-SHIFT-Q {char} | like CTRL-Q unless |tui-modifyOtherKeys| is active | modifyOtherKeys spelling of i_CTRL-Q | ported | index.txt:i_CTRL-SHIFT-Q |
| CTRL-SHIFT-V {char} | like CTRL-V unless |tui-modifyOtherKeys| is active | modifyOtherKeys spelling of i_CTRL-V | ported | index.txt:i_CTRL-SHIFT-V |
| CTRL-T | insert one shiftwidth of indent in current | CTRL-T | ported | index.txt:i_CTRL-T |
| CTRL-U | delete all entered characters in the current | kill to line start | ported | index.txt:i_CTRL-U |
| CTRL-V {char} | insert next non-digit literally | insert next non-digit literally | ported | index.txt:i_CTRL-V |
| CTRL-V {number} insert three digit decimal number as a single | byte. | CTRL-V + digits inserts the character code: 3-digit decimal plus o/x/u/U/b | ported | index.txt:i_CTRL-V_digit |
| CTRL-W | delete word before the cursor | delete word backward | ported | index.txt:i_CTRL-W |
| CTRL-X CTRL-D | complete defined identifiers | completion from the buffer's #defined identifiers | ported | index.txt:i_CTRL-X_CTRL-D |
| CTRL-X CTRL-F | complete file names | file-name completion from the path fragment before the cursor | ported | index.txt:i_CTRL-X_CTRL-F |
| CTRL-X CTRL-I | complete identifiers | CTRL-X CTRL-I | ported | index.txt:i_CTRL-X_CTRL-I |
| CTRL-X CTRL-K | complete identifiers from dictionary | completion from the 'dictionary' files | ported | index.txt:i_CTRL-X_CTRL-K |
| CTRL-X CTRL-L | complete whole lines | whole-line completion from the buffer's other lines | ported | index.txt:i_CTRL-X_CTRL-L |
| CTRL-X CTRL-N | next completion | CTRL-X CTRL-N | ported | index.txt:i_CTRL-X_CTRL-N |
| CTRL-X CTRL-O | omni completion | CTRL-X CTRL-O | ported | index.txt:i_CTRL-X_CTRL-O |
| CTRL-X CTRL-P | previous completion | CTRL-X CTRL-P | ported | index.txt:i_CTRL-X_CTRL-P |
| CTRL-X CTRL-R | complete contents from registers | completion from words held in the registers | ported | index.txt:i_CTRL-X_CTRL-R |
| CTRL-X CTRL-S | spelling suggestions | same as i_CTRL-X s | ported | index.txt:i_CTRL-X_CTRL-S |
| CTRL-X CTRL-T | complete identifiers from thesaurus | completion from the 'thesaurus' files | ported | index.txt:i_CTRL-X_CTRL-T |
| CTRL-X CTRL-U | complete with 'completefunc' | i_CTRL-X CTRL-U runs 'completefunc' through the vimlrs bridge (the two-call findstart/matches protocol); with the option unset it falls back to zmax's own completion rather than erroring | ported | index.txt:i_CTRL-X_CTRL-U |
| CTRL-X CTRL-V | complete like in : command line | routes through the same complete_command_line the ':' prompt uses: Ex command name at the start of the line, then that command's own argument completer | ported | index.txt:i_CTRL-X_CTRL-V |
| CTRL-X CTRL-Z | stop completion, text is unchanged | i_CTRL-X_CTRL-Z stop completion, text unchanged (no-op) | ported | index.txt:i_CTRL-X_CTRL-Z |
| CTRL-X CTRL-] | complete tags | completes from the tags file 'tags' resolves to - the same file CTRL-] jumps through Verified end-to-end by driving the binary under `:keymap vim`: with a tags file holding `alphabetical`, typing `alpha` + C-x C-] completes it. This only became testable once CTRL-] started arriving (ba4a8aa450) - the earlier 'no completion' result was that bug, not this port. Note the shipped default preset is spacemacs, which drops the i_CTRL-X submap (spacemacs.rs:611), so this key completes under `:keymap vim` - the preset the report measures. | ported | index.txt:i_CTRL-X_CTRL-] |
| CTRL-X s | spelling suggestions | spelling suggestions for the word being typed | ported | index.txt:i_CTRL-X_s |
| CTRL-X {mode} | enter CTRL-X sub mode, see |i_CTRL-X_index| | New `complete_included` (zmax-term/src/commands.rs:56933, registered commands.rs:2330) gathers keywords from the current buffer plus every file `included_files` resolves from 'include', keeps those strictly longer than the typed prefix, dedups through a HashSet and offers them through `complete_from` as "included file keyword". `C-x C-i` in Insert now runs it (zmax-term/src/keymap/vim.rs:2861) instead of the generic LSP+word `completion`, which was the last key in the C-x submap with no source of its own. Residual worth recording in the mapping note rather than hiding: zmax shows candidates in a Picker overlay, not vim's sticky CTRL-X sub-mode with a pum, so repeating the source key to step matches is not modelled. Upstream: nvim insert.txt i_CTRL-X_CTRL-I — "keywords in the current and included files" (the same 'include'-driven source as the `i` item of 'complete') | ported | index.txt:i_CTRL-X |
| CTRL-Y | insert the character which is above the cursor | i_CTRL-Y: insert char from line above (copy_char_above) | ported | index.txt:i_CTRL-Y |
| CTRL-Y | accept selected match and stop completion | accept selected match and stop completion | ported | index.txt:complete_CTRL-Y |
| CTRL-[ | same as <Esc> | ends insert mode and puts the cursor on the last inserted character, as vim does, however Insert was entered. Verified against vim 9.2 by driving both: iX<Esc>x, cwZ<Esc>x, AZ<Esc>x, oNEW<Esc>x, sQ<Esc>x and aX<Esc>x all match. Gated on Editor::vim_semantics - the helix preset deliberately leaves the cursor where insertion stopped and still does. | ported | index.txt:i_CTRL-[ |
| CTRL-\ CTRL-G | go to Normal mode | CTRL-\ CTRL-G: leave insert to normal | ported | index.txt:i_CTRL-\_CTRL-G |
| CTRL-\ CTRL-N | go to Normal mode | CTRL-\ CTRL-N: leave insert to normal | ported | index.txt:i_CTRL-\_CTRL-N |
| CTRL-] | trigger abbreviation | i_CTRL-] expand the abbrev before point | ported | index.txt:i_CTRL-] |
| CTRL-^ | toggle use of |:lmap| mappings | i_CTRL-^ toggles 'iminsert', which is the switch the insert-mode self-insert reads before translating a typed character through the :lmap (Lang-Arg) table | ported | index.txt:i_CTRL-^ |
| CTRL-_ | When 'allowrevins' set: toggle 'revins' | i_CTRL-_: toggle 'revins', gated on 'allowrevins' exactly as vim gates it. Bound to C-_ in the vim preset, where NON_VIM_INSERT frees the key; the shipped spacemacs default keeps C-_ = emacs undo, so this cites the command, not the key. | ported | index.txt:i_CTRL-_ |
| ^ CTRL-D | delete all indent in the current line, restore | ^ CTRL-D deletes the ^ and all of the line indent (insert_unindent); vim also re-applies autoindent on the next line, which is not modelled. | ported | index.txt:i_^_CTRL-D |
| {char1}<BS>{char2} | enter digraph (only when 'digraph' option set) | both digraph triggers work: i_CTRL-K (insert_digraph) and vim {char1}<BS>{char2} in insert mode when :set digraph (arms on <BS>, combines on next char). | ported | index.txt:i_digraph |
| CTRL-R CTRL-P {register} | insert the contents of a register literally | C-r C-p {reg} insert register, fix indent ≈ i_CTRL-R | partial | index.txt:i_CTRL-R_CTRL-P |
| CTRL-X CTRL-E | scroll up | Note corrected for what the token actually resolves to. In the merged keymap `C-x C-e` in Insert resolves to eval_last_sexp — the shipped default preset is spacemacs, whose C-x is the emacs prefix (keymap.rs:13-17), so emacs's eval-last-sexp wins the chord there. The vim binding is real but preset-scoped: keymap/vim.rs:2875 opens the i_CTRL-X 'Complete' submap and vim.rs:2904 binds `C-e` in it to scroll_down with the comment 'i_CTRL-X_CTRL-E: scroll window up (view down)'. Still partial for the original reason too: it is not vim's CTRL-X submode — vim repeats on each further CTRL-E and stops rather than moving the cursor off its line in the file (insert.txt i_CTRL-X_CTRL-E). | partial | index.txt:i_CTRL-X_CTRL-E |
| CTRL-X CTRL-Y | scroll down | scrolls the view one line and stays in insert, but not vim's CTRL-X submode: vim repeats on each further CTRL-Y and stops rather than moving the cursor off its line in the file (insert.txt i_CTRL-X_CTRL-Y) | partial | index.txt:i_CTRL-X_CTRL-Y |
neovim / normal-mode (479 keys · 469 ported · 10 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| !!{filter} | filter N lines through the {filter} command | vim !!{cmd}: filters the current line through an external command via shell_pipe | ported | index.txt:!! |
| !{motion}{filter} | filter Nmove text through the {filter} | vim !{motion}{cmd} filter: linewise, pipes motion-covered lines through an external command via shell_pipe (!j/!k/!G); same key, same linewise semantics | ported | index.txt:! |
| "``" | cursor to the position before latest jump | vim "``" register select for next y/d/p | ported | index.txt:`` |
| "{register} | use {register} for next delete, yank or put | vim "{register} register select for next y/d/p | ported | index.txt:quote |
| # | search backward for the Nth occurrence of | vim # -> search_selection_detect_word_boundaries | ported | index.txt:# |
| $ | cursor to the end of Nth next line | goto line end | ported | index.txt:$ |
| % | find the next (curly/square) bracket on | match brackets | ported | index.txt:% |
| & | repeat last :s | vim & repeat last :s on current line | ported | index.txt:& |
| '' | cursor to the first CHAR of the line where | vim '' jumps to the first non-blank of the line the cursor was on before the latest jump. push_jump records the ` / ' context marks at the pre-jump position; '{mark} resolves to that line's first non-blank. | ported | index.txt:'' |
| '( | cursor to the first CHAR on the line of the | cursor to the first CHAR on the line of the | ported | index.txt:'( |
| ') | cursor to the first CHAR on the line of the | cursor to the first CHAR on the line of the | ported | index.txt:') |
| '< | cursor to the first CHAR of the line where | '< | ported | index.txt:'< |
| '> | cursor to the first CHAR of the line where | '> | ported | index.txt:'> |
| '[ | cursor to the first CHAR on the line of the | cursor to the first CHAR on the line of the | ported | index.txt:'[ |
| '] | cursor to the first CHAR on the line of the | cursor to the first CHAR on the line of the | ported | index.txt:'] |
| '{ | cursor to the first CHAR on the line of the | vim '{ named marks (set/jump, edit-tracked via map_pos) | ported | index.txt:'{ |
| '{a-zA-Z0-9} | cursor to the first CHAR on the line with | vim '{a-zA-Z0-9} named marks (set/jump, edit-tracked via map_pos) | ported | index.txt:' |
| '} | cursor to the first CHAR on the line of the | cursor to the first CHAR on the line of the | ported | index.txt:'} |
| ( | cursor N sentences backward | vim (: cursor N sentences backward (move_sentence_backward); faithful vim sentence boundaries (.!? + closers + ws, blank line) | ported | index.txt:( |
| ) | cursor N sentences forward | vim ): cursor N sentences forward (move_sentence_forward); faithful vim sentence boundaries (.!? + closers + ws, blank line) | ported | index.txt:) |
| * | search forward for the Nth occurrence of | search word under cursor | ported | index.txt:star |
| + | same as <CR> | vim + -> move_visual_line_down | ported | index.txt:+ |
| , | repeat latest f, t, F or T in opposite | , reverse find | ported | index.txt:, |
| - | cursor to the first CHAR N lines higher | vim - -> move_visual_line_up | ported | index.txt:- |
| /<CR> | search forward for {pattern} of last search | search prompt repeats last (vim /<CR> repeats) | ported | index.txt:/ |
| /{pattern}<CR> | search forward for the Nth occurrence of | search forward | ported | index.txt:/ |
| 0 | cursor to the first char of the line | goto line start | ported | index.txt:0 |
| 1 | prepend to command to give a count | prepend to command to give a count | ported | index.txt:count |
| 2 | " | " | ported | index.txt:count |
| 3 | " | " | ported | index.txt:count |
| 4 | " | " | ported | index.txt:count |
| 5 | " | " | ported | index.txt:count |
| 6 | " | " | ported | index.txt:count |
| 7 | " | " | ported | index.txt:count |
| 8 | " | " | ported | index.txt:count |
| 9 | " | " | ported | index.txt:count |
| : | start entering an Ex command | command mode | ported | index.txt:: |
| ; | repeat latest f, t, F or T N times | repeat last f/t motion | ported | index.txt:; |
| << | shift N lines one 'shiftwidth' leftwards | unindent line | ported | index.txt:<< |
| <BS> | same as "h" | move char left | ported | index.txt: |
| <C-End> | same as "G" | <C-End> | ported | index.txt: |
| <C-Home> | same as "gg" | <C-Home> | ported | index.txt: |
| <C-Left> | same as "b" | <C-Left> | ported | index.txt: |
| <C-LeftMouse> | ":ta" to the keyword at the mouse click | C-LeftMouse: go to definition of symbol at click | ported | index.txt: |
| <C-Right> | same as "w" | <C-Right> | ported | index.txt: |
| <C-RightMouse> | same as "CTRL-T" | C-RightMouse: pop tag/jump stack (CTRL-T) | ported | index.txt: |
| <C-Tab> | same as "g<Tab>" | same as "g<Tab>" | ported | index.txt: |
| <CR> | cursor to the first CHAR N lines lower | vim <CR> -> move_visual_line_down | ported | index.txt: |
| <Down> | same as "j" | move down | ported | index.txt: |
| <End> | same as "$" | goto line end | ported | index.txt: |
| <F1> | same as <Help> | <F1> opens the Help browser | ported | index.txt: |
| <Help> | open a help window | <Help> opens the help browser (SPC h h / :help) | ported | index.txt: |
| <Home> | same as "0" | goto line start | ported | index.txt: |
| <Insert> | same as "i" | <Insert> | ported | index.txt: |
| <Left> | same as "h" | move left | ported | index.txt: |
| <LeftMouse> | move cursor to the mouse click position | a left click moves the cursor to the clicked position (the Down(Left) branch of the mouse handler in ui/editor.rs dispatches through mouse_set_point) | ported | index.txt: |
| <MiddleMouse> | same as "gP" at the mouse click position | `mouse_yank_at_click` (zmax-term/src/commands.rs:72027) now rests the cursor at the end of the pasted text (`CursorRest::AfterText`, the gP resting place) and honours an explicit `"x` prefix: the register is `cx.register.unwrap_or_else(|| cx.editor.config().mouse_yank_register)`, so `*` is only the default. `mouse_yank_primary` (emacs mouse-yank-primary) is deliberately untouched. Upstream: nvim change.txt ["x]<MiddleMouse>: "Put the text from a register before the cursor [count] times. Uses the \"* register, unless another is specified. Leaves the cursor at the end of the new text." (verified by fetching runtime/doc/change.txt) | ported | index.txt: |
| <NL> | same as "j" | vim <NL> -> move_visual_line_down | ported | index.txt: |
| <PageDown> | same as CTRL-F | page down | ported | index.txt: |
| <PageUp> | same as CTRL-B | page up | ported | index.txt: |
| <Right> | same as "l" | move right | ported | index.txt: |
| <RightMouse> | start Visual mode, move cursor to the mouse | with mousemodel=extend the right button extends the selection to the click, which is vim's own rule for that value; with popup/popup_setpos (the default) it opens the context menu instead | ported | index.txt: |
| <S-+> | same as CTRL-F | <S-+> = CTRL-F page down | ported | index.txt: |
| <S--> | same as CTRL-B | <S--> = CTRL-B page up | ported | index.txt: |
| <S-CR> | same as CTRL-F | <S-CR> = CTRL-F page down | ported | index.txt: |
| <S-Down> | same as CTRL-F | <S-Down> | ported | index.txt: |
| <S-Left> | same as "b" | <S-Left> | ported | index.txt: |
| <S-LeftMouse> | same as "*" at the mouse click position | <S-LeftMouse>: `*` at the click. search_selection_impl expands the bare cursor to the word under it. | ported | index.txt: |
| <S-NL> | same as CTRL-F | <S-NL> = CTRL-F (page down, = <S-CR>) | ported | index.txt: |
| <S-Right> | same as "w" | <S-Right> | ported | index.txt: |
| <S-RightMouse> | same as "#" at the mouse click position | <S-RightMouse>: `#` at the click. | ported | index.txt: |
| <S-Up> | same as CTRL-B | <S-Up> | ported | index.txt: |
| <Tab> | go to N newer entry in jump list | jump forward | ported | index.txt: |
| <Undo> | same as "u" | <Undo> | ported | index.txt: |
| <Up> | same as "k" | move up | ported | index.txt: |
| <{motion} | shift Nmove lines one 'shiftwidth' | vim <{motion} = unindent over motion; zmax < submap unindents over j/k/G/gg. | ported | index.txt:< |
| == | filter N lines through "indent" | == | ported | index.txt:== |
| ={motion} | filter Nmove lines through "indent" | ={motion} | ported | index.txt:= |
| >> | shift N lines one 'shiftwidth' rightwards | indent line | ported | index.txt:>> |
| >{motion} | shift Nmove lines one 'shiftwidth' | vim >{motion} = indent over motion; zmax > submap indents over j/k/G/gg. | ported | index.txt:> |
| ?<CR> | search backward for {pattern} of last search | search prompt (vim ?<CR> repeats backward) | ported | index.txt:? |
| ?{pattern}<CR> | search backward for the Nth previous | search backward | ported | index.txt:? |
| @: | repeat the previous ":" command N times | @: re-runs the last : command; N@: re-runs it N times (count honoured). | ported | index.txt:@: |
| @@ | repeat the previous @{a-z} N times | vim @@ macro vim_replay_macro | ported | index.txt:@@ |
| @{a-z} | execute the contents of register {a-z} | vim @{a-z} macro vim_replay_macro | ported | index.txt:@ |
| A | append text after the end of the line N times | insert at line end | ported | index.txt:A |
| B | cursor N WORDS backward | prev WORD start | ported | index.txt:B |
| CTRL-<Tab> | same as `g<Tab>` : go to last accessed tab | go to last accessed tab | ported | index.txt:CTRL- |
| CTRL-A | add N to number at/after cursor | adds N to the number at or after the cursor - the line is scanned forward, as vim/neovim do. Verified against neovim 0.x (the denominator's source) by driving both: 'count 7' from column 0, 5<C-a>, -3 -> -2, 0x0f -> 0x10, 0b0101 -> 0b0110, 007 -> 008 (nvim's nrformats has no octal), 'aaa 42' from column 0, 9 -> 10. Gated on Editor::vim_semantics; helix still increments only what is selected. | ported | index.txt:CTRL-A |
| CTRL-B | scroll N screens Backwards | page up / scroll back | ported | index.txt:CTRL-B |
| CTRL-C | interrupt current (search) command | interrupt current (search) command | ported | index.txt:CTRL-C |
| CTRL-D | scroll Down N lines (default: half a screen) | half page down | ported | index.txt:CTRL-D |
| CTRL-E | scroll N lines upwards (N lines Extra) | scroll down a line | ported | index.txt:CTRL-E |
| CTRL-F | scroll N screens Forward | page down / scroll forward | ported | index.txt:CTRL-F |
| CTRL-G | display current file name and position | display current file name and position | ported | index.txt:CTRL-G |
| CTRL-H | same as "h" | CTRL-H | ported | index.txt:CTRL-H |
| CTRL-I | same as <Tab> | jump forward in jumplist | ported | index.txt:CTRL-I |
| CTRL-J | same as "j" | CTRL-J | ported | index.txt:CTRL-J |
| CTRL-M | same as <CR> | CTRL-M | ported | index.txt:CTRL-M |
| CTRL-N | same as "j" | CTRL-N | ported | index.txt:CTRL-N |
| CTRL-O | go to N older entry in jump list | jump backward in jumplist | ported | index.txt:CTRL-O |
| CTRL-P | same as "k" | CTRL-P | ported | index.txt:CTRL-P |
| CTRL-R | redo changes which were undone with 'u' | redo | ported | index.txt:CTRL-R |
| CTRL-T | jump to N older Tag in tag list | CTRL-T pops the tag stack (the same stack :tag/:pop and gettagstack() use), landing back where the tag jump started; at the bottom it reports like vim's E555. CTRL-] pushes the frame it pops. | ported | index.txt:CTRL-T |
| CTRL-U | scroll N lines Upwards (default: half a | half page up | ported | index.txt:CTRL-U |
| CTRL-V | start blockwise Visual mode | blockwise Visual (multi-cursor emulation) | ported | index.txt:CTRL-V |
| CTRL-V | force operator to work blockwise | vim CTRL-V = blockwise Visual; zmax C-v enters true visual-block mode. | ported | index.txt:o_CTRL-V |
| CTRL-W + | increase current window height N lines | increase current window height N lines | ported | index.txt:CTRL-W_+ |
| CTRL-W - | decrease current window height N lines | decrease current window height N lines | ported | index.txt:CTRL-W_- |
| CTRL-W < | decrease current window width N columns | decrease current window width N columns | ported | index.txt:CTRL-W_< |
| CTRL-W <Down> | same as "CTRL-W j" | vim CTRL-W <Down>: go to window down (jump_view_down) | ported | index.txt:CTRL-W_ |
| CTRL-W <Left> | same as "CTRL-W h" | vim CTRL-W <Left>: go to window left (jump_view_left) | ported | index.txt:CTRL-W_ |
| CTRL-W <Right> | same as "CTRL-W l" | vim CTRL-W <Right>: go to window right (jump_view_right) | ported | index.txt:CTRL-W_ |
| CTRL-W <Up> | same as "CTRL-W k" | vim CTRL-W <Up>: go to window up (jump_view_up) | ported | index.txt:CTRL-W_ |
| CTRL-W = | make all windows the same height & width | make all windows the same height & width | ported | index.txt:CTRL-W_= |
| CTRL-W > | increase current window width N columns | increase current window width N columns | ported | index.txt:CTRL-W_> |
| CTRL-W CTRL-B | same as "CTRL-W b" | bottom window (jump down) | ported | index.txt:CTRL-W_CTRL-B |
| CTRL-W CTRL-C | no-op | C-w C-c no-op | ported | index.txt:CTRL-W_CTRL-C |
| CTRL-W CTRL-D | same as "CTRL-W d" | CTRL-W CTRL-D | ported | index.txt:CTRL-W_CTRL-D |
| CTRL-W CTRL-F | same as "CTRL-W f" | split + edit file under cursor | ported | index.txt:CTRL-W_CTRL-F |
| CTRL-W CTRL-H | same as "CTRL-W h" | CTRL-W CTRL-H | ported | index.txt:CTRL-W_CTRL-H |
| CTRL-W CTRL-I | same as "CTRL-W i" | CTRL-W CTRL-I = CTRL-W i (declaration) | ported | index.txt:CTRL-W_CTRL-I |
| CTRL-W CTRL-J | same as "CTRL-W j" | CTRL-W CTRL-J | ported | index.txt:CTRL-W_CTRL-J |
| CTRL-W CTRL-K | same as "CTRL-W k" | CTRL-W CTRL-K | ported | index.txt:CTRL-W_CTRL-K |
| CTRL-W CTRL-L | same as "CTRL-W l" | CTRL-W CTRL-L | ported | index.txt:CTRL-W_CTRL-L |
| CTRL-W CTRL-N | same as "CTRL-W n" | CTRL-W CTRL-N | ported | index.txt:CTRL-W_CTRL-N |
| CTRL-W CTRL-O | same as "CTRL-W o" | CTRL-W CTRL-O | ported | index.txt:CTRL-W_CTRL-O |
| CTRL-W CTRL-P | same as "CTRL-W p" | previous/last window (rotate) | ported | index.txt:CTRL-W_CTRL-P |
| CTRL-W CTRL-Q | same as "CTRL-W q" | CTRL-W CTRL-Q | ported | index.txt:CTRL-W_CTRL-Q |
| CTRL-W CTRL-R | same as "CTRL-W r" | rotate windows (same as C-w r) | ported | index.txt:CTRL-W_CTRL-R |
| CTRL-W CTRL-S | same as "CTRL-W s" | CTRL-W CTRL-S | ported | index.txt:CTRL-W_CTRL-S |
| CTRL-W CTRL-T | same as "CTRL-W t" | top window (jump up) | ported | index.txt:CTRL-W_CTRL-T |
| CTRL-W CTRL-V | same as "CTRL-W v" | CTRL-W CTRL-V | ported | index.txt:CTRL-W_CTRL-V |
| CTRL-W CTRL-W | same as "CTRL-W w" | CTRL-W CTRL-W | ported | index.txt:CTRL-W_CTRL-W |
| CTRL-W CTRL-X | same as "CTRL-W x" | CTRL-W CTRL-X | ported | index.txt:CTRL-W_CTRL-X |
| CTRL-W CTRL-Z | same as "CTRL-W z" | C-w C-z same as C-w z | ported | index.txt:CTRL-W_CTRL-Z |
| CTRL-W CTRL-] | same as "CTRL-W ]" | jump to tag/definition (no split) | ported | index.txt:CTRL-W_CTRL-] |
| CTRL-W CTRL-^ | same as "CTRL-W ^" | edit alternate file (no split) | ported | index.txt:CTRL-W_CTRL-^ |
| CTRL-W CTRL-_ | same as "CTRL-W _" | vim CTRL-W CTRL-_ (same as CTRL-W _) maximizes the window (wonly), aliased alongside C-w _. | ported | index.txt:CTRL-W_CTRL-_ |
| CTRL-W F | split window and edit file name under the | split + edit file under cursor | ported | index.txt:CTRL-W_F |
| CTRL-W H | move current window to the far left | vim CTRL-W H: move current window to the far left (swap_view_left) | ported | index.txt:CTRL-W_H |
| CTRL-W J | move current window to the very bottom | vim CTRL-W J: move current window to the very bottom (swap_view_down) | ported | index.txt:CTRL-W_J |
| CTRL-W K | move current window to the very top | vim CTRL-W K: move current window to the very top (swap_view_up) | ported | index.txt:CTRL-W_K |
| CTRL-W L | move current window to the far right | vim CTRL-W L: move current window to the far right (swap_view_right) | ported | index.txt:CTRL-W_L |
| CTRL-W P | go to preview window | goes to the window ':pedit'/':ptag'/':set previewwindow' marked, from any split; errors (E441) when there is no preview window Verified end-to-end by driving the binary: :pedit leaves focus in the original window, and C-w P moves to the preview (writing the focused buffer dumps the previewed file, not the original). | ported | index.txt:CTRL-W_P |
| CTRL-W R | rotate windows upwards N times | vim CTRL-W R: rotate windows upwards (rotate_view_reverse) | ported | index.txt:CTRL-W_R |
| CTRL-W S | same as "CTRL-W s" | vim CTRL-W S: same as CTRL-W s (hsplit) | ported | index.txt:CTRL-W_S |
| CTRL-W T | move current window to a new tabpage | CTRL-W T -> window_to_new_tab: move current window to a new tabpage (fails if sole window) | ported | index.txt:CTRL-W_T |
| CTRL-W W | go to N previous window (wrap around) | previous window wrap (rotate reverse) | ported | index.txt:CTRL-W_W |
| CTRL-W ] | split window and jump to tag under cursor | jump to tag/definition (no split) | ported | index.txt:CTRL-W_] |
| CTRL-W ^ | split current window and edit alternate | edit alternate file (no split) | ported | index.txt:CTRL-W_^ |
| CTRL-W _ | set current window height to N (default: | set current window height to N (default: | ported | index.txt:CTRL-W__ |
| CTRL-W b | go to bottom window | bottom window (jump down) | ported | index.txt:CTRL-W_b |
| CTRL-W c | close current window (like |:close|) | vim CTRL-W c: close current window; zmax uses C-w d (wclose) | ported | index.txt:CTRL-W_c |
| CTRL-W d | split window and jump to definition under | CTRL-W d: split and jump to the definition under the cursor (vim keeps this key; spacemacs SPC w d stays delete-window) | ported | index.txt:CTRL-W_d |
| CTRL-W f | split window and edit file name under the | split + edit file under cursor | ported | index.txt:CTRL-W_f |
| CTRL-W g <Tab> | same as |g<Tab>|: go to last accessed tab | last accessed tab -> alt file | ported | index.txt:CTRL-W_g |
| CTRL-W g CTRL-] split window and do |:tjump| to tag under | cursor | tag jump (no split) | ported | index.txt:CTRL-W_g_CTRL-] |
| CTRL-W g F | edit file name under the cursor in a new | edit file under cursor (current win) | ported | index.txt:CTRL-W_gF |
| CTRL-W g T | same as `gT`: go to previous tabpage | prev tabpage -> previous buffer | ported | index.txt:CTRL-W_gT |
| CTRL-W g ] | split window and do |:tselect| for tag | tag jump (no split) | ported | index.txt:CTRL-W_g] |
| CTRL-W g f | edit file name under the cursor in a new | edit file under cursor (current win) | ported | index.txt:CTRL-W_gf |
| CTRL-W g t | same as `gt`: go to next tabpage | next tabpage -> next buffer | ported | index.txt:CTRL-W_gt |
| CTRL-W g } | do a |:ptjump| to the tag under the cursor | C-w g }: :ptjump the identifier under the cursor - offers the match list when ambiguous (vim's :tag/:tjump split) | ported | index.txt:CTRL-W_g} |
| CTRL-W h | go to Nth left window (stop at first window) | vim CTRL-W h: go to window left (jump_view_left) | ported | index.txt:CTRL-W_h |
| CTRL-W i | split window and jump to declaration of | jump to declaration (no split) | ported | index.txt:CTRL-W_i |
| CTRL-W j | go N windows down (stop at last window) | vim CTRL-W j: go to window down (jump_view_down) | ported | index.txt:CTRL-W_j |
| CTRL-W k | go N windows up (stop at first window) | vim CTRL-W k: go to window up (jump_view_up) | ported | index.txt:CTRL-W_k |
| CTRL-W l | go to Nth right window (stop at last window) | vim CTRL-W l: go to window right (jump_view_right) | ported | index.txt:CTRL-W_l |
| CTRL-W n | open new window, N lines high | CTRL-W n | ported | index.txt:CTRL-W_n |
| CTRL-W o | close all but current window (like |:only|) | vim CTRL-W o: close all but current window (wonly) | ported | index.txt:CTRL-W_o |
| CTRL-W p | go to previous (last accessed) window | previous/last window (rotate) | ported | index.txt:CTRL-W_p |
| CTRL-W q | quit current window (like |:quit|) | vim CTRL-W q: quit/close current window (wclose) | ported | index.txt:CTRL-W_q |
| CTRL-W r | rotate windows downwards N times | vim CTRL-W r: rotate windows downwards (rotate_view) | ported | index.txt:CTRL-W_r |
| CTRL-W s | split current window in two parts, new | vim CTRL-W s: split window horizontally (hsplit) | ported | index.txt:CTRL-W_s |
| CTRL-W t | go to top window | top window (jump up) | ported | index.txt:CTRL-W_t |
| CTRL-W v | split current window vertically, new window | vim CTRL-W v: split window vertically (vsplit) | ported | index.txt:CTRL-W_v |
| CTRL-W w | go to N next window (wrap around) | vim CTRL-W w: cycle to next window (rotate_view) | ported | index.txt:CTRL-W_w |
| CTRL-W x | exchange current window with window N | vim CTRL-W x: exchange current window with the next (transpose_view) | ported | index.txt:CTRL-W_x |
| CTRL-W z | close preview window | CTRL-W z close preview window -> :pclose (C-w z chord itself is recenter_other_window) | ported | index.txt:CTRL-W_z |
| CTRL-W {char} | window commands, see |CTRL-W| | window commands, see |CTRL-W| | ported | index.txt:CTRL-W |
| CTRL-W | | set window width to N columns | set window width to N columns | ported | index.txt:CTRL-W_bar |
| CTRL-W } | show tag under cursor in preview window | C-w }: :ptag the identifier under the cursor into the real preview window (reachable by C-w P, dismissed by :pclose, walked by :ptnext) Verified end-to-end by driving the binary: with the cursor on `alphabetical` and a tags file, C-w } leaves the focused buffer as word.txt (the cursor stays, per vim) and C-w P then reaches a preview holding the tag's file. | ported | index.txt:CTRL-W_} |
| CTRL-Y | scroll N lines downwards | scroll up a line | ported | index.txt:CTRL-Y |
| CTRL-Z | suspend program (or start new shell) | suspend | ported | index.txt:CTRL-Z |
| CTRL-\ CTRL-G | go to Normal mode (no-op) | go to Normal mode (no-op) | ported | index.txt:CTRL-\_CTRL-G |
| CTRL-\ CTRL-N | go to Normal mode (no-op) | go to Normal mode (no-op) | ported | index.txt:CTRL-\_CTRL-N |
| CTRL-] | :ta to ident under cursor | CTRL-] = :ta — jumps to the definition (resolved via the language server rather than a tags file) and records the from-position on the tag stack, so CTRL-T returns to it. | ported | index.txt:CTRL-] |
| CTRL-^ | edit Nth alternate file (equivalent to | CTRL-^ | ported | index.txt:CTRL-^ |
| E | cursor forward to the end of WORD N | next WORD end | ported | index.txt:E |
| F{char} | cursor to the Nth occurrence of {char} to | A find that matches nothing now aborts the pending operator instead of running it on the untouched width-1 range. `find_char_then` (zmax-term/src/commands.rs:6838) carries an Rc<Cell<bool>> the motion closure clears on entry (commands.rs:6873) and sets in the match arm (commands.rs:6923); the dispatch tail returns before both `extend_backward_exclusive_vim` and `after(cx)` when nothing matched, reporting `Character not found: {ch}` (commands.rs:6939-6944). `dFz` with no `z` earlier on the line now leaves the buffer exactly as it was; the bare `F` motion path is unchanged (it already stayed put). Upstream: vim normal.c nv_csearch(): `if (IS_SPECIAL(cap->nchar) || searchc(cap, t_cmd) == FAIL) { clearopbeep(cap->oap); ... return; }` — searchc returns FAIL when the char is not on the line, and clearopbeep drops the pending operator | ported | index.txt:F |
| G | cursor to line N, default last line | goto last line | ported | index.txt:G |
| H | cursor to line N from top of screen | goto window top | ported | index.txt:H |
| I | insert text before the first CHAR on the | insert at line start | ported | index.txt:I |
| J | Join N lines; default is 2 | join lines | ported | index.txt:J |
| K | lookup Keyword under the cursor with | vim K -> hover | ported | index.txt:K |
| L | cursor to line N from bottom of screen | goto window bottom | ported | index.txt:L |
| M | cursor to middle line of screen | goto window center | ported | index.txt:M |
| N | repeat the latest '/' or '?' N times in | search prev | ported | index.txt:N |
| O | begin a new line above the cursor and | open line above | ported | index.txt:O |
| Q | replay last recorded register | vim Q macro replay_macro | ported | index.txt:Q |
| R | enter replace mode: overtype existing | vim R = Replace (overtype) mode; zmax R enters replace_mode. | ported | index.txt:R |
| T{char} | cursor till after Nth occurrence of {char} | Two things. (1) The shared operator no-match abort above (commands.rs:6939-6944) — `dTz` no longer eats the character under the cursor. (2) The plan said T's landing was already right; reading vim's searchc against the code showed it is not, so I followed the source: the initial press must test the immediately adjacent character, and zmax started the backward-exclusive scan at `cursor_anchor - 1`, which skips it. commands.rs:6911 now starts vim's `T` at `cursor_anchor` (the helix callers keep the old skip). Concrete case that was wrong: on "aab" with the cursor on 'b', vim's `Ta` does not move (it matches the adjacent 'a' and backs up onto the cursor); zmax jumped to column 1. Upstream: vim search.c searchc(): the count loop steps `col += dir` and tests `p[col] == c && stop` with `stop == TRUE` on the initial press; the one-character skip is set up only for the `;`/`,` repeat (`if (vim_strchr(p_cpo, CPO_SCOLON) == NULL && count == 1 && t_cmd) stop = FALSE;`), i.e. options.txt cpo-; | ported | index.txt:T |
| U | undo all latest changes on one line | U: line's text is stashed before the first change lands on it (vim u_saveline) and swapped back on U, so U undoes U Verified against vim 9.2 with identical keys (A1<Esc>A2<Esc>U -> alpha; U U -> alpha12). | ported | index.txt:U |
| V | start linewise Visual mode | linewise Visual mode | ported | index.txt:V |
| V | force operator to work linewise | vim V -> extend_to_line_bounds | ported | index.txt:o_V |
| W | cursor N WORDS forward | next WORD start | ported | index.txt:W |
| ZQ | close window without writing | vim ZQ -> :quit! | ported | index.txt:ZQ |
| ZZ | write if buffer changed and close window | vim ZZ -> :write-quit | ported | index.txt:ZZ |
| [ CTRL-D | jump to first #define found in current and | jump to first #define found in current and | ported | index.txt:[_CTRL-D |
| [ CTRL-I | jump to first line in current and included | jumps to the first line containing the keyword, leaving a jumplist entry | ported | index.txt:[_CTRL-I |
| ["x]<Del> | same as "x" | ["x]<Del>: delete char (= x) | ported | index.txt: |
| ["x]C | change from the cursor position to the end | vim C = change to end of line (c$); zmax C = extend_to_line_end + change_selection. | ported | index.txt:C |
| ["x]D | delete the characters under the cursor | vim D = delete to end of line (d$); zmax D = extend_to_line_end + delete_selection. | ported | index.txt:D |
| ["x]P | put the text [from register x] before the | ["x]P | ported | index.txt:P |
| ["x]X | delete N characters before the cursor [into | ["x]X | ported | index.txt:X |
| ["x]Y | yank N lines [into register x]; synonym for | vim Y = yank line; zmax Y = extend_to_line_bounds + yank. | ported | index.txt:Y |
| ["x]cc | delete N lines [into register x] and start | change line | ported | index.txt:cc |
| ["x]c{motion} | delete Nmove text [into register x] and | A bare `[±]N` (linewise) search offset now covers the offset's own line. `operator_search` builds the span from line numbers via the new pure helper `linewise_char_span` (zmax-term/src/commands.rs:11781, called at commands.rs:11893) instead of handing a character range to `extend_to_line_bounds`, whose `Range::line_range` walks one grapheme back from the end and so dropped the target line whenever the offset landed on that line's first character — every unindented line. `0d/gamma/+1` on alpha/beta/gamma/delta now empties the buffer and `0d/gamma/-1` leaves gamma+delta. `extend_to_line_bounds` still runs afterwards (idempotent on a whole-line span) so closed folds are still taken whole. `c/`, `c?`, `c%`, `cn`, `c0` are unchanged. Upstream: nvim pattern.txt search-offset: a bare `[+-]N` offset makes the motion linewise and moves N lines from the match line — the target line is part of the operated span | ported | index.txt:c |
| ["x]dd | delete N lines [into register x] | delete line | ported | index.txt:dd |
| ["x]gP | put the text [from register x] before the | ["x]gP | ported | index.txt:gP |
| ["x]gp | put the text [from register x] after the | ["x]gp | ported | index.txt:gp |
| ["x]p | put the text [from register x] after the | ["x]p | ported | index.txt:p |
| ["x]x | delete N characters under and after the | ["x]x | ported | index.txt:x |
| ["x]yy | yank N lines [into register x] | yank line | ported | index.txt:yy |
| [# | cursor to N previous unmatched #if, #else | [# jump to previous unmatched #if/#else (nesting-aware preprocessor scan) | ported | index.txt:[# |
| [' | cursor to previous lowercase mark, on first | [' | ported | index.txt:[' |
| [( | cursor N times back to unmatched '(' | [( | ported | index.txt:[( |
| [* | same as "[/" | [* same as [/ : previous comment | ported | index.txt:[star |
| [/ | cursor to N previous start of a C comment | vim [/ -> goto_prev_comment | ported | index.txt:[/ |
| [<MiddleMouse> | same as "[p" | [<MiddleMouse> = [p: a pending `[` prefix turns the middle click into paste-before at the click. | ported | index.txt:[ |
| [D | list all defines found in current and | lists every #define of the keyword (vim 'define' pattern) | ported | index.txt:[D |
| [I | list all lines found in current and | lists every line containing the keyword in the occur overlay | ported | index.txt:[I |
| [P | same as "[p" | [P paste before | ported | index.txt:[P |
| [[ | cursor N sections backward | vim `[[` - back to the previous section start (movement.rs:576). A real section motion now, not the paragraph motion | ported | index.txt:[[ |
| [] | cursor N SECTIONS backward | [] N sections backward -> prev function | ported | index.txt:[] |
| [` | cursor to previous lowercase mark | [` | ported | index.txt:[` |
| [c | cursor N times backwards to start of change | vim [c: go back to start of previous change/diff hunk (goto_prev_change) | ported | index.txt:[c |
| [f | same as "gf" | vim [f: same as gf: open the file under the cursor (goto_file) | ported | index.txt:[f |
| [i | show first line found in current and | echoes the first line containing the keyword from the top of the file; current buffer only | ported | index.txt:[i |
| [m | cursor N times back to start of member | vim [m -> goto_prev_function | ported | index.txt:[m |
| [p | like "P", but adjust indent to current line | [p | ported | index.txt:[p |
| [s | move to the previous misspelled word | move to the previous misspelled word | ported | index.txt:[s |
| [z | move to start of open fold | [z start of open fold -> fold_prev | ported | index.txt:[z |
| [{ | cursor N times back to unmatched '{' | [{ | ported | index.txt:[{ |
| [{char} | square bracket command (see |[| below) | square bracket command (see |[| below) | ported | index.txt:[ |
| ] CTRL-D | jump to first #define found in current and | jump to first #define found in current and | ported | index.txt:]_CTRL-D |
| ] CTRL-I | jump to first line in current and included | as [CTRL-I, from below the cursor | ported | index.txt:]_CTRL-I |
| ]# | cursor to N next unmatched #endif or #else | ]# jump to next unmatched #endif/#else (nesting-aware preprocessor scan) | ported | index.txt:]# |
| ]' | cursor to next lowercase mark, on first | ]' | ported | index.txt:]' |
| ]) | cursor N times forward to unmatched ')' | ]) | ported | index.txt:]) |
| ]* | same as "]/" | ]* same as ]/ : next comment | ported | index.txt:]star |
| ]/ | cursor to N next end of a C comment | vim ]/ -> goto_next_comment | ported | index.txt:]/ |
| ]<MiddleMouse> | same as "]p" | ]<MiddleMouse> = ]p: a pending `]` prefix turns the middle click into paste-after at the click. | ported | index.txt:] |
| ]D | list all #defines found in current and | as [D, from below the cursor | ported | index.txt:]D |
| ]I | list all lines found in current and | as [I, lines below the cursor only | ported | index.txt:]I |
| ]P | same as "[p" | ]P same as [p | ported | index.txt:]P |
| ][ | cursor N SECTIONS forward | ][ N sections forward -> next function | ported | index.txt:][ |
| ]] | cursor N sections forward | vim `]]` - forward to the next section: a `{` or form-feed in column 1, or an nroff macro line named by 'sections'. A real section motion now (movement.rs:553), not the paragraph motion | ported | index.txt:]] |
| ]` | cursor to next lowercase mark | ]` | ported | index.txt:]` |
| ]c | cursor N times forward to start of change | vim ]c: go forward to start of next change/diff hunk (goto_next_change) | ported | index.txt:]c |
| ]f | same as "gf" | vim ]f: same as gf: open the file under the cursor (goto_file) | ported | index.txt:]f |
| ]i | show first line found in current and | as [i, scanning from below the cursor | ported | index.txt:]i |
| ]m | cursor N times forward to end of member | vim ]m -> goto_next_function | ported | index.txt:]m |
| ]p | like "p", but adjust indent to current line | ]p | ported | index.txt:]p |
| ]s | move to next misspelled word | move to next misspelled word | ported | index.txt:]s |
| ]z | move to end of open fold | ]z end of open fold -> fold_next | ported | index.txt:]z |
| ]{char} | square bracket command (see |]| below) | square bracket command (see |]| below) | ported | index.txt:] |
| ]} | cursor N times forward to unmatched '}' | ]} | ported | index.txt:]} |
| ^ | cursor to the first CHAR of the line | goto first non-whitespace | ported | index.txt:^ |
| _ | cursor to the first CHAR N - 1 lines lower | vim _ = first non-blank of the line, or count-1 lines below with a count (3_ two lines down); goto_first_nonwhitespace_down honours the count. | ported | index.txt:_ |
| `( | cursor to the start of the current sentence | cursor to the start of the current sentence | ported | index.txt:`( |
| `) | cursor to the end of the current sentence | cursor to the end of the current sentence | ported | index.txt:`) |
| `< | cursor to the start of the highlighted area | `< | ported | index.txt:`< |
| `> | cursor to the end of the highlighted area | `> | ported | index.txt:`> |
| `[ | cursor to the start of last operated text | cursor to the start of last operated text | ported | index.txt:`[ |
| `] | cursor to the end of last operated text or | cursor to the end of last operated text or | ported | index.txt:`] |
| `{ | cursor to the start of the current paragraph | vim `{ named marks (set/jump, edit-tracked via map_pos) | ported | index.txt:`{ |
| `{a-zA-Z0-9} | cursor to the mark {a-zA-Z0-9} | vim `{a-zA-Z0-9} named marks (set/jump, edit-tracked via map_pos) | ported | index.txt:` |
| `} | cursor to the end of the current paragraph | cursor to the end of the current paragraph | ported | index.txt:`} |
| a | append text after the cursor N times | append | ported | index.txt:a |
| a" | double quoted string | vim a" via c/d/y + i/a textobject (around) | ported | index.txt:v_aquote |
| a' | single quoted string | vim a' via c/d/y + i/a textobject (around) | ported | index.txt:v_a' |
| a( | same as ab | vim a( via c/d/y + i/a textobject (around) | ported | index.txt:v_a( |
| a) | same as ab | vim a) via c/d/y + i/a textobject (around) | ported | index.txt:v_a) |
| a< | "a <>" from '<' to the matching '>' | vim a< via c/d/y + i/a textobject (around) | ported | index.txt:v_a< |
| a> | same as a< | vim a> via c/d/y + i/a textobject (around) | ported | index.txt:v_a> |
| aB | "a Block" from `[{` to `]}` (with brackets) | textobject via select-mode a base (operator-pending not chained) | ported | index.txt:v_aB |
| aW | "a WORD" (with white space) | vim aW via c/d/y + i/a textobject (around) | ported | index.txt:v_aW |
| a[ | "a []" from '[' to the matching ']' | vim a[ via c/d/y + i/a textobject (around) | ported | index.txt:v_a[ |
| a] | same as a[ | vim a] via c/d/y + i/a textobject (around) | ported | index.txt:v_a] |
| a` | string in backticks | vim a` via c/d/y + i/a textobject (around) | ported | index.txt:v_a` |
| ab | "a block" from "[(" to "])" (with braces) | vim ab = a-block; zmax textobject maps b->( usable in Visual (a) and operator-pending (da/ca/ya). | ported | index.txt:v_ab |
| al | all lines (entire buffer) | textobject via select-mode a base (operator-pending not chained) | ported | index.txt:v_al |
| ap | "a paragraph" (with white space) | vim ap via c/d/y + i/a textobject (around) | ported | index.txt:v_ap |
| as | "a sentence" (with white space) | vim as: a sentence incl. trailing whitespace (textobject_sentence); das/cas/yas | ported | index.txt:v_as |
| at | "a tag block" (with white space) | vim at = a-tag; zmax maps t->enclosing xml/html element (treesitter). | ported | index.txt:v_at |
| aw | "a word" (with white space) | vim aw via c/d/y + i/a textobject (around) | ported | index.txt:v_aw |
| a{ | same as aB | vim a{ via c/d/y + i/a textobject (around) | ported | index.txt:v_a{ |
| a} | same as aB | vim a} via c/d/y + i/a textobject (around) | ported | index.txt:v_a} |
| b | cursor N words backward | prev word start | ported | index.txt:b |
| do | same as ":diffget" | vim do = :diffget on the change under the cursor | ported | index.txt:do |
| dp | same as ":diffput" | dp = :diffput on the change under the cursor - the mirror of `do` (:diffget), which was already bound | ported | index.txt:dp |
| e | cursor forward to the end of word N | next word end | ported | index.txt:e |
| f{char} | cursor to Nth occurrence of {char} to the | Divergence (b) closed by the shared abort in `find_char_then` (zmax-term/src/commands.rs:6939-6944): `dfz` / `d9fa` with no match no longer delete the character under the cursor. Divergence (a) belonged to `t`/`T` and is fixed under those rows (commands.rs:6902-6917); `f`'s own start position (cursor+1) already matched searchc and is untouched, as is the `;`/`,` repeat path `apply_find_char` (commands.rs:7690). Upstream: vim normal.c nv_csearch() clearopbeep on searchc FAIL; vim search.c searchc() for the scan start | ported | index.txt:f |
| g CTRL-G | show information about current cursor | show information about current cursor | ported | index.txt:g_CTRL-G |
| g CTRL-H | start Select block mode | vim gCTRL-H = blockwise Select mode; zmax g C-h enters visual-block mode. | ported | index.txt:g_CTRL-H |
| g CTRL-] | |:tjump| to the tag under the cursor | g CTRL-]: :tjump -> goto_definition | ported | index.txt:g_CTRL-] |
| g# | like "#", but without using "\<" and "\>" | g#: search word backward (no boundaries) | ported | index.txt:g# |
| g$ | when 'wrap' off go to rightmost character of | vim g$ -> goto_line_end | ported | index.txt:g$ |
| g& | repeat last ":s" on all lines | vim g& repeat last :s on whole file | ported | index.txt:g& |
| g'{mark} | like |'| but without changing the jumplist | g'{mark}: goto mark line (jumplist differs) | ported | index.txt:g' |
| g* | like "*", but without using "\<" and "\>" | g*: search word forward (no boundaries) | ported | index.txt:gstar |
| g+ | go to newer text state N times | g+ | ported | index.txt:g+ |
| g, | go to N newer position in change list | g,: newer change-list pos (approx last change) | ported | index.txt:g, |
| g- | go to older text state N times | g- | ported | index.txt:g- |
| g0 | when 'wrap' off go to leftmost character of | vim g0 -> goto_line_start | ported | index.txt:g0 |
| g8 | print hex value of bytes used in UTF-8 | g8 | ported | index.txt:g8 |
| g; | go to N older position in change list | vim g; -> goto_last_modification | ported | index.txt:g; |
| g< | display previous command output | g< display previous command output (echo-area message log) | ported | index.txt:g< |
| g<Down> | same as "gj" | g<Down> = gj | ported | index.txt:g |
| g<End> | same as "g$" but go to the rightmost | g<End> = g$ | ported | index.txt:g |
| g<Home> | same as "g0" | g<Home> = g0 | ported | index.txt:g |
| g<LeftMouse> | same as <C-LeftMouse> | g<LeftMouse> = C-LeftMouse: go to definition at click | ported | index.txt:g |
| g<RightMouse> | same as <C-RightMouse> | g<RightMouse> = C-RightMouse: pop tag/jump stack | ported | index.txt:g |
| g<Tab> | go to last accessed tabpage | g<Tab>: last accessed tab -> alt file | ported | index.txt:g |
| g<Up> | same as "gk" | g<Up> = gk | ported | index.txt:g |
| g? | Rot13 encoding operator | vim g?{motion} = ROT13 operator; zmax g? submap runs rot13 over the motion. | ported | index.txt:g? |
| g?? | Rot13 encode current line | Rot13 encode current line | ported | index.txt:g?g? |
| g?g? | Rot13 encode current line | Rot13 encode current line | ported | index.txt:g?g? |
| g@{motion} | call 'operatorfunc' | map.txt:870 -- g@{motion} calls 'operatorfunc' over the region the MOTION covers. It was bound as a leaf, so the motion argument was never read and the function ran on whatever was selected. `g @` is a motion submap now, mirroring gq's, with operator_func as the operator; `g@@` keeps the bare line-wise form. | ported | index.txt:g@ |
| gD | go to definition of word under the cursor | goto declaration | ported | index.txt:gD |
| gE | go backwards to the end of the previous | vim gE -> move_prev_long_word_end | ported | index.txt:gE |
| gF | start editing the file whose name is under | goto file (no line component) | ported | index.txt:gF |
| gH | start Select line mode | gH: start linewise Select mode | ported | index.txt:gH |
| gI | like "I", but always start in column 1 | vim gI -> insert_at_line_start | ported | index.txt:gI |
| gJ | join lines without inserting space | vim gJ -> join! | ported | index.txt:gJ |
| gM | go to character at middle of the text line | gM | ported | index.txt:gM |
| gN | 1,2 find the previous match with the last used | gn/gN visually select the next/previous match of the last search into Select mode (select_gn_match + select_mode), so an operator or extension can act on it. | ported | index.txt:gN |
| gQ | switch to "Ex" mode with Vim editing | Ex mode: the real ':' line re-opens after each command (so command-line editing and completion are all available, as vim promises); ':visual'/':vi' is the only way out - Esc does not leave it, verified against vim 9.2 Verified by driving the binary: two commands run with no ':' between them, :visual returns to Normal, Esc does not leave. | ported | index.txt:gQ |
| gR | enter Virtual Replace mode | Virtual Replace: a <Tab> absorbs typed characters column by column and is removed only when one takes its last column, so following text holds its columns; byte-for-byte against vim 9.2 Verified end-to-end by driving the binary: gR over a<Tab>b (tabstop 8) gives aXX<Tab>b, 7 chars aXXXXXXXb, 8 chars aXXXXXXXX - vim 9.2's bytes. | ported | index.txt:gR |
| gT | go to the previous tabpage | gT | ported | index.txt:gT |
| gU{motion} | make Nmove text uppercase | vim gU{motion} = uppercase operator; zmax gU submap uppercases over the motion. | ported | index.txt:gU |
| gV | don't reselect the previous Visual area | gV don't reselect the previous Visual area (no-op) | ported | index.txt:gV |
| g] | :tselect on the tag under the cursor | g]: :tselect tag -> goto_definition | ported | index.txt:g] |
| g^ | when 'wrap' off go to leftmost non-white | vim g^ -> goto_first_nonwhitespace | ported | index.txt:g^ |
| g_ | cursor to the last CHAR N - 1 lines lower | vim g_ = last non-blank char of line; zmax binds g_ to goto_line_last_nonblank. | ported | index.txt:g_ |
| g`{mark} | like |`| but without changing the jumplist | g`{mark}: goto mark (jumplist differs) | ported | index.txt:g` |
| ga | print ascii value of character under the | vim ga: print the ascii/unicode value of the character under the cursor (bound to :character-info) | ported | index.txt:ga |
| gd | go to definition of word under the cursor | goto definition | ported | index.txt:gd |
| ge | go backwards to the end of the previous | ge | ported | index.txt:ge |
| gf | start editing the file whose name is under | goto file under cursor | ported | index.txt:gf |
| gg | cursor to line N, default first line | goto file start | ported | index.txt:gg |
| gh | start Select mode | gh: start Select mode | ported | index.txt:gh |
| gi | like "i", but first move to the |'^| mark | vim gi insert at last-insert position (^ mark) | ported | index.txt:gi |
| gj | like "j", but when 'wrap' on go N screen | move display line down | ported | index.txt:gj |
| gk | like "k", but when 'wrap' on go N screen | move display line up | ported | index.txt:gk |
| gm | go to character at middle of the screenline | New `goto_screen_line_middle` (zmax-term/src/commands.rs:3861, registered commands.rs:1883) implements gm properly: it runs g0 first (so a soft-wrapped line measures from the screen line's start), then advances half the window's text width in DISPLAY columns via `char_idx_at_visual_offset`, clamped to the line's last character. `g m` now points at it (zmax-term/src/keymap/vim.rs:1226). The row's plan assumed `goto_line_middle` was gM; reading it showed the opposite — it already implemented gm's half-screenwidth rule (in characters, from the buffer-line start), so with gm repointed it would have been the only binding of a command whose own registry doc says "middle of text line (gM)". I therefore also made `goto_line_middle` the real gM: line width via `visual_coords_at_pos` (linetabsize), `width*count/100` for a count in 1..=100 else `width/2`, then `pos_at_visual_coords` (coladvance), clamped to the last character (commands.rs:3825-3860, `#[allow(deprecated)]` for the two flat column helpers, which ignore softwrap exactly as linetabsize/coladvance do). `g M` still runs it. Upstream: nvim motion.txt gm "Like g0, but half a screenwidth to the right (or as much as possible)" / gM "Like g0, but to halfway the text of the line. With a count it's different: 10gM is near the start of the line, 90gM near the end"; vim normal.c nv_g_home_m_cmd() (gm) and nv_g_cmd case 'M' (linetabsize_no_outer + coladvance(i*count0/100 | i/2)) | ported | index.txt:gm |
| gn | 1,2 find the next match with the last used | gn | ported | index.txt:gn |
| go | cursor to byte N in the buffer | go | ported | index.txt:go |
| gq{motion} | format Nmove text | change.txt:1418 -- "gq{motion}: Format the LINES that {motion} moves over" -- so gq takes ANY motion, where the submap listed a handful (q j k i a G } { gg). The word, line, character, bracket, search and mark motions the `d` and `y` submaps spell out are now in `g q` too, unchanged (exclusive trims included, since vim adjusts the motion first and only then widens it to whole lines), with extend_to_line_bounds as that widening and the reflow operator in place of delete/yank. Tested that each chord runs the reflow operator and that gqw snaps to whole lines first -- gq is linewise, so it formats the LINE the word motion moved over, not the word. | ported | index.txt:gq |
| gr{char} | virtual replace N chars with {char} | New `virtual_replace_char` (zmax-term/src/commands.rs:37387, registered commands.rs:804): reads one key and applies `insert::virtual_overtype_char_impl` `count` times — the same screen-space overtype `gR` uses, so a <Tab> under the cursor is eaten column by column — then puts the block cursor back on the last replaced character and stays in Normal mode. Accepts a plain character and <Tab>. Deliberately left UNBOUND, which is why the row asked for static evidence only: `g r` is nvim's own documented LSP default (zmax keeps `g r` => goto_reference, keymap/vim.rs:1193) and inventing a substitute chord would not be a port. Residual, stated rather than papered over: <CR>, an Insert-mode special, is not modelled. Upstream: nvim change.txt gr{char}: "Replace the virtual characters under the cursor with {char}. This replaces in screen space, not file space. See |gR| ... As with |r| a count may be given. {char} can be entered like with |r|, but characters that have a special meaning in Insert mode, such as most CTRL-keys, cannot be used." plus *gr-default* (lsp-defaults inhibit builtin gr) | ported | index.txt:gr |
| gs | go to sleep for N seconds (default 1) | gs sleep for {count} seconds | ported | index.txt:gs |
| gt | go to the next tabpage | gt | ported | index.txt:gt |
| gu{motion} | make Nmove text lowercase | vim gu{motion} = lowercase operator; zmax gu submap lowercases over the motion. | ported | index.txt:gu |
| gv | reselect the previous Visual area | vim gv reselect last visual area (edit-clamped) | ported | index.txt:gv |
| gw{motion} | format Nmove text and keep cursor | As gq{motion}, through the cursor-restoring operator: change.txt:1445 gives gw the same motion surface, and it now has the same set. | ported | index.txt:gw |
| gx | execute application for filepath at cursor | vim gx: open file/URL under cursor. Bound to goto_file, which opens URLs externally and files in-editor. Partial: gx in vim is URL-only (gf is files); zmax gx==gf handles both. | ported | index.txt:gx |
| g{char} | extended commands, see |g| below | extended commands, see |g| below | ported | index.txt:g |
| g~{motion} | swap case for Nmove text | vim g~{motion} = toggle-case operator; zmax g~ submap toggles case over the motion. | ported | index.txt:g~ |
| h | cursor N chars to the left | move left | ported | index.txt:h |
| i | insert text before the cursor N times | insert | ported | index.txt:i |
| i" | double quoted string without the quotes | vim i" via c/d/y + i/a textobject (inner) | ported | index.txt:v_iquote |
| i' | single quoted string without the quotes | vim i' via c/d/y + i/a textobject (inner) | ported | index.txt:v_i' |
| i( | same as ib | vim i( via c/d/y + i/a textobject (inner) | ported | index.txt:v_i( |
| i) | same as ib | vim i) via c/d/y + i/a textobject (inner) | ported | index.txt:v_i) |
| i< | "inner <>" from '<' to the matching '>' | vim i< via c/d/y + i/a textobject (inner) | ported | index.txt:v_i< |
| i> | same as i< | vim i> via c/d/y + i/a textobject (inner) | ported | index.txt:v_i> |
| iB | "inner Block" from `[{` and `]}` | textobject via select-mode i base (operator-pending not chained) | ported | index.txt:v_iB |
| iW | "inner WORD" | vim iW via c/d/y + i/a textobject (inner) | ported | index.txt:v_iW |
| i[ | "inner []" from '[' to the matching ']' | vim i[ via c/d/y + i/a textobject (inner) | ported | index.txt:v_i[ |
| i] | same as i[ | vim i] via c/d/y + i/a textobject (inner) | ported | index.txt:v_i] |
| i` | string in backticks without the backticks | vim i` via c/d/y + i/a textobject (inner) | ported | index.txt:v_i` |
| ib | "inner block" from "[(" to "])" | vim ib = inner-block; zmax maps b->( in the textobject command. | ported | index.txt:v_ib |
| il | inner line (without surrounding whitespace) | textobject via select-mode i base (operator-pending not chained) | ported | index.txt:v_il |
| ip | "inner paragraph" | vim ip via c/d/y + i/a textobject (inner) | ported | index.txt:v_ip |
| is | "inner sentence" | vim is: inner sentence text object — now a real sentence object (textobject_sentence); dis/cis/yis operate on the sentence under the cursor | ported | index.txt:v_is |
| it | "inner tag block" | vim it = inner-tag; zmax maps t->xml element via treesitter. | ported | index.txt:v_it |
| iw | "inner word" | vim iw via c/d/y + i/a textobject (inner) | ported | index.txt:v_iw |
| i{ | same as iB | vim i{ via c/d/y + i/a textobject (inner) | ported | index.txt:v_i{ |
| i} | same as iB | vim i} via c/d/y + i/a textobject (inner) | ported | index.txt:v_i} |
| j | cursor N lines downward | move down | ported | index.txt:j |
| k | cursor N lines upward | move up | ported | index.txt:k |
| l | cursor N chars to the right | move right | ported | index.txt:l |
| m{A-Za-z} | set mark {A-Za-z} at cursor position | vim m{A-Za-z} named marks (set/jump, edit-tracked via map_pos) | ported | index.txt:m |
| n | repeat the latest '/' or '?' N times | search next | ported | index.txt:n |
| o | begin a new line below the cursor and | open line below | ported | index.txt:o |
| q | (while recording) stops recording | vim q macro vim_record_macro | ported | index.txt:q |
| q/ | edit / command-line in command-line window | q/ is a real command-line window now, not a picker: vim_record_macro's on_next_key dispatch (zmax-term/src/commands.rs:7442-7444) routes `/` to search_cmdline_window (commands.rs:7259) instead of recording into a register named `/`, exactly as vim documents ('this is not possible while recording is in progress'). cmdline_window_impl (commands.rs:7270) fills a split with the `/` register's history oldest-first, sizes it from 'cmdwinheight', sets the buffer's major mode to `cmdline-window` (which puts <CR> on cmdline_window_execute) and refuses a second window with E1292 — so a past search is editable before it runs, which is the point of q/ over a history picker. | ported | index.txt:q/ |
| q: | edit : command-line in command-line window | q: opens the ':' history in a real editable buffer (major mode cmdline-window); <CR> runs the line under the cursor and closes, discarding other edits as vim does; a second one is refused (E1292). Verified end-to-end by driving the built binary in a pty: q: -> type a command -> <CR> runs it. | ported | index.txt:q: |
| q? | edit ? command-line in command-line window | q? is the backward half: commands.rs:7445-7447 routes `?` to rsearch_cmdline_window (commands.rs:7266), the same command-line window over the `/` register with <CR> searching backward and last_search_forward left false, so a following `n` repeats backward exactly as after `?pat`. | ported | index.txt:q? |
| q{0-9a-zA-Z"} | record typed characters into named register | vim q{0-9a-zA-Z"} macro vim_record_macro | ported | index.txt:q |
| r{char} | replace N chars with {char} | replace char | ported | index.txt:r |
| t{char} | cursor till before Nth occurrence of {char} | (a) The initial `t` press no longer skips an already-adjacent target: commands.rs:6910 starts the vim forward-exclusive scan at `cursor_head` (cursor+1) rather than `cursor_head + 1`, so `ta` on "yayaya" from column 0 does not move, `2ta` lands on column 2, and `dta` deletes one character. The `+1` skip stays in `apply_find_char` (commands.rs:7690), which is what `;`/`,` use, and stays in the non-line-bounded helix callers, whose `A-.` repeat replays the whole motion and would otherwise never advance — the `line_bounded` flag is exactly the vim f/F/t/T caller set, so it selects the rule. (b) The shared operator abort, as above. Upstream: vim search.c searchc(): initial press has `stop = TRUE` from the first candidate; the skip is set only for the `;`/`,` repeat under default 'cpoptions' (options.txt cpo-;) | ported | index.txt:t |
| u | undo changes | undo; the cursor lands on the first non-blank of the first changed line, as vim does. Verified against vim 9.2 by driving both: ddu, ddurZ, ddux, xurZ, 2ddurZ and an indented ddurZ (' Zndented one') all match. Gated on Editor::vim_semantics; helix leaves the cursor alone. | ported | index.txt:u |
| v | start charwise Visual mode | charwise Visual mode | ported | index.txt:v |
| v | force operator to work charwise | vim v -> select_mode | ported | index.txt:o_v |
| w | cursor N words forward | next word start | ported | index.txt:w |
| z+ | cursor on line N (default line below | line below the window (or line {count}) to the top, cursor on first non-blank | ported | index.txt:z+ |
| z- | redraw, cursor line at bottom of window, | vim z- -> align_view_bottom | ported | index.txt:z- |
| z. | redraw, cursor line to center of window, | vim z. -> align_view_center | ported | index.txt:z. |
| z<CR> | redraw, cursor line to top of window, | vim z<CR> -> align_view_top | ported | index.txt:z |
| z<Left> | same as "zh" | same as "zh" | ported | index.txt:z |
| z<Right> | same as "zl" | same as "zl" | ported | index.txt:z |
| z= | give spelling suggestions | give spelling suggestions | ported | index.txt:z= |
| zA | open a closed fold or close an open fold | zA now has its own command: keymap/vim.rs binds `z A` to fold_toggle_recursive (commands.rs:51202), which calls Folds::toggle_recursive (zmax-core/src/fold.rs:283) — it reads the innermost fold's closed state and then set_recursive (fold.rs:325) flips that fold and every fold fully contained in it. `za` stays on fold_toggle (the single fold), so the uppercase/lowercase pair no longer resolves to one command. | ported | index.txt:zA |
| zC | close folds recursively | `z C` now runs `fold_close_recursive` (zmax-term/src/keymap/vim.rs:1298) instead of `fold_close`, so the fold under the cursor AND every fold nested in it close, while `z c` keeps closing one. The command body (commands.rs:50689) and its registration (commands.rs:1795) already existed and had no binding. Upstream: nvim fold.txt zC: "Close all folds under the cursor recursively. Folds that don't contain the cursor line are unchanged." | ported | index.txt:zC |
| zD | delete folds recursively | zD is fold_delete_recursive (commands.rs:51820) -> Folds::delete_recursive (zmax-core/src/fold.rs:422), which drops the innermost fold at the cursor and every fold whose range is contained in it. `zd`/fold_delete still deletes only the one, leaving the nested folds behind as vim's fold.txt specifies. | ported | index.txt:zD |
| zE | eliminate all folds | zE | ported | index.txt:zE |
| zF | create a fold for N lines | zF: create a fold for N lines | ported | index.txt:zF |
| zG | temporarily mark word as correctly spelled | The Visual half of the spell-list family. `spell_word_under_cursor` (zmax-term/src/commands.rs:45061) returns the primary selection's fragment verbatim — whitespace included, no word-boundary scan — when the editor is in Select mode, so all four callers (zg/zw/zG/zW) and the undo pair pick it up. The Visual `z` submap (zmax-term/src/keymap/vim.rs:2761-2770) gained `g`/`G`/`w`/`W` and a `u` submap mirroring the normal-mode one, each ending in normal_mode as vim's do. `z G` in Visual therefore adds the whole highlighted phrase to the session-only internal word list; nothing is written to the spell file. Upstream: nvim spell.txt zg lines 74-75: "In Visual mode the selected characters are added as a word (including white space!)." and zG: "Like \"zg\" but add the word to the internal word list |internal-wordlist|." | ported | index.txt:zG |
| zH | when 'wrap' off scroll half a screenwidth | when 'wrap' off scroll half a screenwidth | ported | index.txt:zH |
| zL | when 'wrap' off scroll half a screenwidth | when 'wrap' off scroll half a screenwidth | ported | index.txt:zL |
| zM | set 'foldlevel' to zero | zM | ported | index.txt:zM |
| zN | set 'foldenable' | vim `zN`: "Fold normal: set 'foldenable'. All folds will be as they were before" -- back to 'foldlevel', not closed outright, which is what `zM` does and what `zN` was bound to (fold_close_all). It runs fold_enable_on now. 'foldenable' is real state now, not an approximation. foldenable() reads the option with vim's default-on semantics under both spellings, and set_foldenable (zmax-term/src/commands.rs) writes it and applies it: off opens every fold, on restores them to 'foldlevel' through fold_reapply_level (which is also `zX`, and which recomputes the 'foldmethod' ranges first because folds hold fixed line numbers and go stale after an edit). | ported | index.txt:zN |
| zO | open folds recursively | zO is fold_open_recursive -> Folds::open_recursive (zmax-core/src/fold.rs:313 -> set_recursive(line,false), fold.rs:325), opening the fold at the cursor and every fold nested inside it. `zo`/fold_open still opens only the innermost one. | ported | index.txt:zO |
| zP | paste in block-mode without trailing spaces | paste before, trailing padding stripped | ported | index.txt:zP |
| zR | set 'foldlevel' to the deepest fold | zR | ported | index.txt:zR |
| zW | temporarily mark word as incorrectly spelled | zW is spell_add_bad_internal, which adds to the in-memory internal word list (zmax-core spell.rs:335) that is never persisted — vim's 'temporarily mark as bad'. The persisting form stays on `zw`/spell_add_bad. The two-list model was driven against nvim 0.12.4 for all eight zg/zG/zw/zW x zug/zuG/zuw/zuW combinations (see neovim.normal-mode.zug_1). | ported | index.txt:zW |
| zX | re-apply 'foldlevel' | New `fold_reapply_level` (zmax-term/src/commands.rs:51410, registered commands.rs:1799), bound to `z X` (zmax-term/src/keymap/vim.rs:1318). It merges the current 'foldmethod' ranges in the same evicting way `zM` does ("Also forces recomputing folds"), then re-applies the buffer's live 'foldlevel' with `Folds::set_level(doc.folds().level())` — so a hand-closed fold shallower than the level opens again and a hand-opened fold deeper than it closes. `zX` no longer collapses the buffer: that is `fold_close_all`, i.e. only the level-0 special case, which is what it used to run. Upstream: nvim fold.txt zX: "Undo manually opened and closed folds: re-apply 'foldlevel'. Also forces recomputing folds, like |zx|." | ported | index.txt:zX |
| z^ | cursor on line N (default line above | line above the window to the bottom, cursor on first non-blank | ported | index.txt:z^ |
| za | open a closed fold, close an open fold | za | ported | index.txt:za |
| zb | redraw, cursor line at bottom of window | scroll cursor to bottom | ported | index.txt:zb |
| zc | close a fold | zc | ported | index.txt:zc |
| zd | delete a fold | zd | ported | index.txt:zd |
| ze | when 'wrap' off scroll horizontally to | vim `ze` scrolls horizontally so the cursor sits at the right edge. zmax binds `z e` to scroll_cursor_to_right_edge (commands.rs:34623, keymap/vim.rs:1158), which sets horizontal_offset = cursor_visual_col - (text_area_width - 1 - sidescrolloff) via saturating_sub, reading 'sidescrolloff' through typed::vim_opt_num. The offset is a pure function of the cursor column, so repeated presses are a no-op (unlike zH's half-screen scroll), and it returns early when soft wrap is on, per scroll.txt "This only works when 'wrap' is off". Verified against nvim 0.12.4 in a pty: with nowrap and the cursor on column 101, `zs` then `ze` leaves the cursor on the rightmost text column in both editors (leftcol = col - (width-1)), idempotent on a second `ze`, and with sidescrolloff=5 both reserve exactly 5 columns to the right of the cursor. | ported | index.txt:ze |
| zf{motion} | create a fold for Nmove text | zf{motion} | ported | index.txt:zf |
| zg | permanently mark word as correctly spelled | permanently mark word as correctly spelled | ported | index.txt:zg |
| zh | when 'wrap' off scroll screen N characters | when 'wrap' off scroll screen N characters | ported | index.txt:zh |
| zi | toggle 'foldenable' | vim `zi`: "Toggle 'foldenable'. When off, all folds are open" (fold.txt) -- every fold in the buffer at once. It was bound to fold_toggle, which is `za`: the single fold at the cursor. It runs fold_enable_toggle now. 'foldenable' is real state now, not an approximation. foldenable() reads the option with vim's default-on semantics under both spellings, and set_foldenable (zmax-term/src/commands.rs) writes it and applies it: off opens every fold, on restores them to 'foldlevel' through fold_reapply_level (which is also `zX`, and which recomputes the 'foldmethod' ranges first because folds hold fixed line numbers and go stale after an edit). The default-on read is what makes the first `zi` press turn folding OFF, as vim's does; unit tested. | ported | index.txt:zi |
| zj | move to the start of the next fold | zj | ported | index.txt:zj |
| zk | move to the end of the previous fold | zk | ported | index.txt:zk |
| zl | when 'wrap' off scroll screen N characters | when 'wrap' off scroll screen N characters | ported | index.txt:zl |
| zm | subtract one from 'foldlevel' | zm: fold more (close all approx) | ported | index.txt:zm |
| zn | reset 'foldenable' | vim `zn`: "Fold none: reset 'foldenable'. All folds will be open." It opened every fold without recording the option, so a following `zi` toggled from the wrong state; it runs fold_enable_off now, which does both. 'foldenable' is real state now, not an approximation. foldenable() reads the option with vim's default-on semantics under both spellings, and set_foldenable (zmax-term/src/commands.rs) writes it and applies it: off opens every fold, on restores them to 'foldlevel' through fold_reapply_level (which is also `zX`, and which recomputes the 'foldmethod' ranges first because folds hold fixed line numbers and go stale after an edit). | ported | index.txt:zn |
| zo | open fold | zo | ported | index.txt:zo |
| zp | paste in block-mode without trailing spaces | paste after, trailing padding stripped | ported | index.txt:zp |
| zr | add one to 'foldlevel' | zr: fold reduce (open all approx) | ported | index.txt:zr |
| zs | when 'wrap' off scroll horizontally to | The Visual-mode gap that kept this partial has landed: the whole z view family is now in the Select keymap — `key:select:z s`/`z e`/`z h`/`z l`/`z H`/`z L`/`z z`/`z t`/`z b` all resolve, alongside the pre-existing `z f`. Normal-mode `zs` was already verified against nvim v0.12.4 (column 100 on a 300-char line with 'nowrap' -> leftcol 99, matching), and `zh`/`zH` scroll left as vim does. | ported | index.txt:zs |
| zt | redraw, cursor line at top of window | scroll cursor to top | ported | index.txt:zt |
| zuG | undo |zG| | zuG is spell_undo_internal -> spell::remove_internal (spell.rs:343): it clears only the internal list zG writes (spell.rs:327) and leaves the on-disk spell-good file alone, while zug -> spell_undo -> remove_user (spell.rs:351) does the opposite. Driven against nvim 0.12.4 across all eight zg/zG/zw/zW x zug/zuG/zuw/zuW combinations, zmax matches on every one. (The `:spellundo!` ex form is a separate spec id and is still broken; the normal-mode command this item names is not.) | ported | index.txt:zuG |
| zuW | undo |zW| | zuW is spell_undo_internal -> spell::remove_internal (spell.rs:343), which clears only the session-local internal list `zW` writes; `zuw` stays on spell_undo -> remove_user (spell.rs:351), which touches only the on-disk spell-bad file. Verified against nvim 0.12.4: a zw spellfile entry survives zuW and a zW internal entry survives zuw, matching spell.txt:98-104. | ported | index.txt:zuW |
| zug | undo |zg| | undo |zg| | ported | index.txt:zug |
| zuw | undo |zw| | undo |zw| | ported | index.txt:zuw |
| zv | open enough folds to view the cursor line | zv | ported | index.txt:zv |
| zw | permanently mark word as incorrectly spelled | permanently mark word as incorrectly spelled | ported | index.txt:zw |
| zx | re-apply 'foldlevel' and do "zv" | `zx` is "re-apply 'foldlevel' and do zv" and zmax binds BOTH halves: keymap/vim.rs:1291 runs the sequence [fold_reapply_level, fold_view_cursor], the second being `zv` (view cursor line). fold_reapply_level merges the recomputed 'foldmethod' ranges back in first -- folds hold fixed line numbers and go stale after an edit -- which is options.txt's "also forces recomputing folds". `zX` is the separate leaf that omits the `zv`. | ported | index.txt:zx |
| zy | yank without trailing spaces | yank with each line's trailing whitespace stripped | ported | index.txt:zy |
| zz | redraw, cursor line at center of window | center view on cursor | ported | index.txt:zz |
| z{char} | commands starting with 'z', see |z| below | commands starting with 'z', see |z| below | ported | index.txt:z |
| z{height}<CR> | redraw, make window {height} lines high | vim z<CR> = current line to top + first non-blank; zmax z<CR> = align_view_top + goto_first_nonwhitespace. | ported | index.txt:zN |
| { | cursor N paragraphs backward | prev paragraph | ported | index.txt:{ |
| {count}% | go to N percentage in the file | vim {count}%: jump to {count} percent through the file, first non-blank (match_brackets_or_goto_percent; %% with no count still matches brackets) | ported | index.txt:N% |
| {count}: | start entering an Ex command with range | {count}: opens the Ex line pre-filled with .,.+{count-1} | ported | index.txt:N: |
| {count}<Del> | remove the last digit from {count} | vim <Del> in Normal = delete char under cursor (like x); zmax binds del to delete_selection. | ported | index.txt:N |
| | | cursor to column N | goto column | ported | index.txt:bar |
| } | cursor N paragraphs forward | next paragraph | ported | index.txt:} |
| ~ | 'tildeop' off: switch case of N characters | switch case | ported | index.txt:~ |
| ~{motion} | 'tildeop' on: switch case of Nmove text | ~{motion}: switch case (charwise approx) | ported | index.txt:~ |
| . | repeat last change with count replaced with | repeat the last change. Broader than the old note claimed: verified against neovim, 19 of 20 cases match - x, dd, 2dd, dw, 3dw, de, dt<c>, diw, ciw, A, o, r, ~, J, >>, yy/p/P, counts, and '..'. The one gap is a *counted* charwise delete whose count runs past the line: `3x` on a 2-char line clamps correctly on its own (3x/9x match), but dot-repeating it deletes the newline and merges the lines (`3xj0.` -> nvim '||L3|L4', zmax '|L3|L4'), so the replay is not line-bounded the way the original was. | partial | index.txt:. |
| <Space> | same as "l" | <Space> move right; Space is the leader key, l/<Right> move right | partial | index.txt: |
| CTRL-L | redraw screen | vim CTRL-L = clear and redraw the screen; the default keymap deliberately keeps emacs's recenter on C-l (pinned by keymap::vim::tests::emacs_readline_keys_bound). The redraw itself is :redraw. | partial | index.txt:CTRL-L |
| CTRL-X | subtract N from number at/after cursor | vim `CTRL-X` decrements the number at or after the cursor. Not reachable in the shipped keymap: keymap.rs:14 ships spacemacs, where `C-x` is the emacs prefix (spacemacs.rs:65) and opens a submap — the key waits for a second keystroke instead. Measured against nvim: `3<C-x>` on 'num 7 here' gives 'num 4' there and leaves 'num 7' here, the count and the C-x being swallowed by the pending submap. The capability is present as `g C-x` (vim.rs:894), which the keymap comment calls out deliberately. `C-a` is unshadowed and fully correct, counts, hex and negatives included — the pair is asymmetric. Same category as f/F/t/T being labelled jumps and s/S being sneak: a deliberate default, recorded not argued with. | partial | index.txt:CTRL-X |
| ["x]S | delete N lines [into register x] and start | vim S = cc (delete the line, keep its indent, start insert). The substitute itself is correct - verified against neovim with `:set vim-sneak false`: SQ gives ' Q' and 2SQ collapses two lines to ' Q', both matching nvim, as does ccQ. Partial only because it is not reachable by default: `s`/`S` are bound to sneak_or_substitute_line and the shipped default has vim-sneak on (editor.rs:1484, documented at :459 as overriding s/S with a two-character jump), so bare S starts a sneak. | partial | index.txt:S |
| ["x]d{motion} | delete Nmove text [into register x] | vim {motion} takes ANY motion; zmax has no operator-pending mode and enumerates the motions in each operator's submap. Standard motions, text objects (i/a) and marks (`/') work. Verified missing or wrong against vim 9.2 by driving both: d/pat (search) and dn do nothing; d% (matching paren) does nothing; d0 deletes one char too many ('harlie' vs vim's 'charlie'). c{motion}/y{motion} share the submap shape. | partial | index.txt:d |
| ["x]s | (substitute) delete N characters [into | vim s = cl (delete N characters, start insert). The substitute itself is correct - verified against neovim with `:set vim-sneak false`: 0sQ, 02sQ and ^sQ all match nvim exactly. Partial only because it is not reachable by default: `s` is sneak_or_substitute_char and the shipped default has vim-sneak on, so bare s starts a two-character jump. Same deliberate-override category as f/F/t/T being labelled jumps. | partial | index.txt:s |
| ["x]y{motion} | yank Nmove text [into register x] | vim {motion} takes ANY motion; zmax has no operator-pending mode and enumerates the motions in each operator's submap. Standard motions, text objects (i/a) and marks (`/') work. Verified missing or wrong against vim 9.2 by driving both: d/pat (search) and dn do nothing; d% (matching paren) does nothing; d0 deletes one char too many ('harlie' vs vim's 'charlie'). c{motion}/y{motion} share the submap shape. | partial | index.txt:y |
| [d | show first #define found in current and | [d show first #define ≈ jump to declaration of word under cursor | partial | index.txt:[d |
| ]d | show first #define found in current and | ]d show first #define ≈ jump to definition of word under cursor | partial | index.txt:]d |
neovim / visual-mode (85 keys · 83 ported · 2 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| !{filter} | filter the highlighted lines through the | vim visual !: filters the highlighted lines through an external command via shell_pipe | ported | index.txt:v_! |
| : | start a command-line with the highlighted | command mode | ported | index.txt:v_: |
| < | shift the highlighted lines one | unindent | ported | index.txt:v_< |
| <BS> | Select mode: delete highlighted area | <BS> | ported | index.txt:v_ |
| <Esc> | stop Visual mode | exit select mode | ported | index.txt:v_ |
| = | filter the highlighted lines through the | filters the lines through 'equalprg'; reindents when unset, as vim does | ported | index.txt:v_= |
| > | shift the highlighted lines one | indent | ported | index.txt:v_> |
| A | block mode: append same text in all lines, | vim visual-block A = append at end of each row; zmax Select A = append_mode. | ported | index.txt:v_b_A |
| C | delete the highlighted lines and start | vim visual C: delete highlighted lines and start insert (linewise change) | ported | index.txt:v_C |
| CTRL-A | add N to number in highlighted text | increment | ported | index.txt:v_CTRL-A |
| CTRL-C | stop Visual mode | vim visual CTRL-C: stop Visual mode (back to normal) | ported | index.txt:v_CTRL-C |
| CTRL-H | same as <BS> | CTRL-H | ported | index.txt:v_CTRL-H |
| CTRL-V | make Visual mode blockwise or stop Visual | vim visual CTRL-V = blockwise Visual; zmax Select-mode C-v enters visual-block mode. | ported | index.txt:v_CTRL-V |
| CTRL-X | subtract N from number in highlighted text | decrement | ported | index.txt:v_CTRL-X |
| CTRL-\ CTRL-G | go to Normal mode | CTRL-\ CTRL-G: stop Visual to normal | ported | index.txt:v_CTRL-\_CTRL-G |
| CTRL-\ CTRL-N | stop Visual mode | CTRL-\ CTRL-N: stop Visual to normal | ported | index.txt:v_CTRL-\_CTRL-N |
| CTRL-] | jump to highlighted tag | CTRL-] | ported | index.txt:v_CTRL-] |
| D | delete the highlighted lines | vim visual D: delete the highlighted lines (linewise) | ported | index.txt:v_D |
| I | block mode: insert same text in all lines, | vim visual-block I = insert at start of each row; zmax Select I = insert_mode. | ported | index.txt:v_b_I |
| J | join the highlighted lines | join lines | ported | index.txt:v_J |
| K | run 'keywordprg' on the highlighted area | K | ported | index.txt:v_K |
| O | move horizontally to other corner of area | vim visual O: move to the other end/corner of the selection (flip_selections) | ported | index.txt:v_O |
| P | replace highlighted area with register | vim visual P: replace the highlighted area with the register (replace_with_yanked) | ported | index.txt:v_P |
| R | delete the highlighted lines and start | vim visual R: delete highlighted lines and start insert (linewise change) | ported | index.txt:v_R |
| S | delete the highlighted lines and start | vim visual S: delete highlighted lines and start insert (linewise change) | ported | index.txt:v_S |
| U | make highlighted area uppercase | uppercase | ported | index.txt:v_U |
| V | make Visual mode linewise or stop Visual | linewise select | ported | index.txt:v_V |
| X | delete the highlighted lines | vim visual X: delete the highlighted lines (linewise) | ported | index.txt:v_X |
| Y | yank the highlighted lines | vim visual Y: yank the highlighted lines (linewise) | ported | index.txt:v_Y |
| a" | extend highlighted area with a double | textobject via select-mode a base | ported | index.txt:v_aquote |
| a' | extend highlighted area with a single | textobject via select-mode a base | ported | index.txt:v_a' |
| a( | same as ab | textobject via select-mode a base | ported | index.txt:v_a( |
| a) | same as ab | textobject via select-mode a base | ported | index.txt:v_a) |
| a< | extend highlighted area with a <> block | textobject via select-mode a base | ported | index.txt:v_a< |
| a> | same as a< | textobject via select-mode a base | ported | index.txt:v_a> |
| aB | extend highlighted area with a {} block | textobject via select-mode a base | ported | index.txt:v_aB |
| aW | extend highlighted area with "a WORD" | textobject via select-mode a base | ported | index.txt:v_aW |
| a[ | extend highlighted area with a [] block | textobject via select-mode a base | ported | index.txt:v_a[ |
| a] | same as a[ | textobject via select-mode a base | ported | index.txt:v_a] |
| a` | extend highlighted area with a backtick | textobject via select-mode a base | ported | index.txt:v_a` |
| ab | extend highlighted area with a () block | textobject via select-mode a base | ported | index.txt:v_ab |
| al | extend highlighted area to all lines | textobject via select-mode a base | ported | index.txt:v_al |
| ap | extend highlighted area with a paragraph | textobject via select-mode a base | ported | index.txt:v_ap |
| as | extend highlighted area with a sentence | vim visual as: extend the selection by a sentence incl. trailing whitespace (textobject_sentence) | ported | index.txt:v_as |
| at | extend highlighted area with a tag block | textobject via select-mode a base | ported | index.txt:v_at |
| aw | extend highlighted area with "a word" | textobject via select-mode a base | ported | index.txt:v_aw |
| a{ | same as aB | textobject via select-mode a base | ported | index.txt:v_a{ |
| a} | same as aB | textobject via select-mode a base | ported | index.txt:v_a} |
| c | delete highlighted area and start insert | change selection | ported | index.txt:v_c |
| d | delete highlighted area | delete selection | ported | index.txt:v_d |
| g CTRL-A | add N to number in highlighted text | g CTRL-A | ported | index.txt:v_g_CTRL-A |
| g CTRL-X | subtract N from number in highlighted text | g CTRL-X | ported | index.txt:v_g_CTRL-X |
| gJ | join the highlighted lines without | gJ | ported | index.txt:v_gJ |
| gq | format the highlighted lines | reflows to 'textwidth' (was running the LSP formatter); g w keeps the cursor | ported | index.txt:v_gq |
| gv | exchange current and previous highlighted | reselect the last visual area. Verified against vim 9.2 by driving both, after every exit: ve<Esc>gvd / ve<Esc>gvU (Esc exit), vedgvd (delete exit), veygvd (yank exit) all match. The area is recorded by the first save of each trip through Select mode, so an operator arm's save is not overwritten by the exit_select_mode save that follows it. | ported | index.txt:v_gv |
| i" | extend highlighted area with a double | textobject via select-mode i base | ported | index.txt:v_iquote |
| i' | extend highlighted area with a single | textobject via select-mode i base | ported | index.txt:v_i' |
| i( | same as ib | textobject via select-mode i base | ported | index.txt:v_i( |
| i) | same as ib | textobject via select-mode i base | ported | index.txt:v_i) |
| i< | extend highlighted area with inner <> block | textobject via select-mode i base | ported | index.txt:v_i< |
| i> | same as i< | textobject via select-mode i base | ported | index.txt:v_i> |
| iB | extend highlighted area with inner {} block | textobject via select-mode i base | ported | index.txt:v_iB |
| iW | extend highlighted area with "inner WORD" | textobject via select-mode i base | ported | index.txt:v_iW |
| i[ | extend highlighted area with inner [] block | textobject via select-mode i base | ported | index.txt:v_i[ |
| i] | same as i[ | textobject via select-mode i base | ported | index.txt:v_i] |
| i` | extend highlighted area with a backtick | textobject via select-mode i base | ported | index.txt:v_i` |
| ib | extend highlighted area with inner () block | textobject via select-mode i base | ported | index.txt:v_ib |
| il | select inner line under cursor | textobject via select-mode i base | ported | index.txt:v_il |
| ip | extend highlighted area with inner paragraph | textobject via select-mode i base | ported | index.txt:v_ip |
| is | extend highlighted area with inner sentence | vim visual is: extend the selection by the inner sentence (textobject_sentence) | ported | index.txt:v_is |
| it | extend highlighted area with inner tag block | textobject via select-mode i base | ported | index.txt:v_it |
| iw | extend highlighted area with "inner word" | textobject via select-mode i base | ported | index.txt:v_iw |
| i{ | same as iB | textobject via select-mode i base | ported | index.txt:v_i{ |
| i} | same as iB | textobject via select-mode i base | ported | index.txt:v_i} |
| o | move cursor to other corner of area | flip selection ends | ported | index.txt:v_o |
| p | replace highlighted area with register | paste over selection | ported | index.txt:v_p |
| r | replace highlighted area with a character | replace char | ported | index.txt:v_r |
| s | delete highlighted area and start insert | change selection | ported | index.txt:v_s |
| u | make highlighted area lowercase | lowercase | ported | index.txt:v_u |
| v | make Visual mode charwise or stop | v | ported | index.txt:v_v |
| x | delete the highlighted area | delete selection | ported | index.txt:v_x |
| y | yank the highlighted area | yank selection | ported | index.txt:v_y |
| ~ | swap case for the highlighted area | switch case | ported | index.txt:v_~ |
| CTRL-G | toggle between Visual mode and Select mode | v_CTRL-G toggles Visual<->Select. zmax has one Select mode (Mode is Normal/Select/Insert), so there is no second mode to toggle to; select_mode is the single mode both map onto. | partial | index.txt:v_CTRL-G |
| CTRL-O | switch from Select to Visual mode for one | v_CTRL-O switches Select->Visual for one command. Same single-Select-mode model as v_CTRL-G; no distinct Visual mode exists to switch into. | partial | index.txt:v_CTRL-O |
spacemacs / emacs-prefix (271 keys · 269 ported · 2 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| C-c , J | Semantic [Emacs prefix, active in Spacemacs] | semantic-complete-jump -> workspace_symbol_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Semantic.html#index-C_002dc-_002c-J |
| C-c , SPC | Semantic [Emacs prefix, active in Spacemacs] | semantic-complete-analyze-inline -> completion popup | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Semantic.html#index-C_002dc-_002c-SPC |
| C-c , j | Semantic [Emacs prefix, active in Spacemacs] | goto_definition | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Semantic.html#index-C_002dc-_002c-j |
| C-c , l | Semantic [Emacs prefix, active in Spacemacs] | `C-c , l` is semantic_analyze_possible_completions, which asks the language server for the completions at point and lists them - label, kind and detail per line, under 'Possible completions are:' - in another window, leaving the buffer they were asked about alone. That is what the emacs command does: its own docstring says "When called interactively, displays the list of possible completions in a buffer" (read out of emacs 31.1). The old note - that this was the completion popup at point - described the `completion` command this chord used to run. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Semantic.html#index-C_002dc-_002c-l |
| C-c @ C-M-h | Hideshow [Emacs prefix, active in Spacemacs] | hs-hide-all -> fold_close_all | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html#index-C_002dc-_0040-C_002dM_002dh |
| C-c @ C-M-s | Hideshow [Emacs prefix, active in Spacemacs] | hs-show-all -> fold_open_all | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html#index-C_002dc-_0040-C_002dM_002ds |
| C-c @ C-c | Hideshow [Emacs prefix, active in Spacemacs] | fold_toggle | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html#index-C_002dc-_0040-C_002dc |
| C-c @ C-h | Hideshow [Emacs prefix, active in Spacemacs] | fold_close | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html#index-C_002dc-_0040-C_002dh |
| C-c @ C-l | Hideshow [Emacs prefix, active in Spacemacs] | hs-hide-level (was fold_close_recursive) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html#index-C_002dc-_0040-C_002dl |
| C-c @ C-r | Hideshow [Emacs prefix, active in Spacemacs] | fold_open | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html#index-C_002dc-_0040-C_002dr |
| C-c @ C-s | Hideshow [Emacs prefix, active in Spacemacs] | fold_open | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html#index-C_002dc-_0040-C_002ds |
| C-c C-x | Foldout [Emacs prefix, active in Spacemacs] | foldout-exit-fold: widen back out of the zoomed subtree, point back on its heading | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Foldout.html#index-C_002dc-C_002dx |
| C-c C-z | Foldout [Emacs prefix, active in Spacemacs] | foldout-zoom-subtree: narrow the buffer to the subtree at point | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Foldout.html#index-C_002dc-C_002dz |
| C-h . | Help Echo [Emacs prefix, active in Spacemacs] | display-local-help -> hover | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Echo.html#index-C_002dh-_002e |
| C-h 4 i | Misc Help [Emacs prefix, active in Spacemacs] | `C-h 4 i` is info_search_other_window, emacs's `info-other-window`: with no prefix it goes straight to the Info directory node `(dir)Top` (emacs reads a file name only under a prefix argument, info.el:780-787) and with a prefix it prompts 'Info file name: '; either way display_other_window focuses an existing non-focused view and splits only when this is the sole window. The node now lands in an Info-*mode* buffer rather than a plain scratch dump, which was the recorded gap: info.el's reading keys are live in it, keyed on the major mode in keymap/major_mode.rs - `n`/`p`/`u` walk the node's own Next/Prev/Up pointers (read off the `File: …, Node: …` header the way `Info-extract-pointer` reads them), `l` walks the history `Info-history-back` keeps per buffer, `d` opens the directory of manuals, `t` this manual's Top node, and `RET` follows the menu entry or cross-reference at point. `SPC h i` and the apropos picker open the same kind of buffer. Recorded divergence: nodes are rendered by shelling out to `info`, so each move re-renders rather than re-displaying a cached *info* buffer. Pinned by `commands::info_mode_tests::*` and `tests/test/emacs_keys.rs::c_h_4_i_opens_an_info_mode_buffer`. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Help.html#index-C_002dh-4-i |
| C-h 4 s | Name Help [Emacs prefix, active in Spacemacs] | `C-h 4 s` is help_find_source: it asks the Help panel for the item's source location and, when there is one, opens that file with the cursor on the line and scrolls it into view; with none it reports emacs's 'Source file for the current help item is not defined' and with no help buffer it errors. The resolution is what changed. It searched the *working directory* for `fn <name>(`, which meant it could match a same-named fn in an unrelated project and answered for static commands only; it now searches the tree zmax was built from first (recorded at build time, the analogue of emacs resolving a symbol from the file it was loaded from), then the working directory, and a `:` typable resolves to its `TypableCommand` table entry, which is that command's definition site. The scan also reaches the files the commands are in: the 2 MB size cap skipped `commands.rs` (over 3 MB) and `typed.rs` (over 2 MB), i.e. exactly the two files every zmax command is defined in, so the jump could never answer for one. Pinned by `ui::help::tests::help_view_source_reaches_the_multi_megabyte_command_files`, `::help_view_source_finds_a_typable_commands_table_entry` and `::source_roots_start_at_the_tree_zmax_was_built_from`. Remaining, and stated rather than argued with: an *option* or a help topic has no single definition site to jump to, so those entries still report the undefined-source message. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Name-Help.html#index-C_002dh-4-s |
| C-h C | Coding Systems [Emacs prefix, active in Spacemacs] | describe-coding-system | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Coding-Systems.html#index-C_002dh-C |
| C-h C-\ | Select Input Method [Emacs prefix, active in Spacemacs] | C-h C-\ now runs set_input_method (Select Input Method), the help-map alias of the C-x RET C-\ binding | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Select-Input-Method.html#index-C_002dh-C_002d_005c |
| C-h C-c | Help Files [Emacs prefix, active in Spacemacs] | describe-copying | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002dc |
| C-h C-d | Help Files [Emacs prefix, active in Spacemacs] | describe-distribution | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002dd |
| C-h C-e | Help Files [Emacs prefix, active in Spacemacs] | view-external-packages (rebound from package_search) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002de |
| C-h C-f | Help Files [Emacs prefix, active in Spacemacs] | browse_faq | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002df |
| C-h C-h | Help [Emacs prefix, active in Spacemacs] | help | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help.html#index-C_002dh-C_002dh |
| C-h C-m | Help Files [Emacs prefix, active in Spacemacs] | view-order-manuals (rebound from the generic help browser) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002dm |
| C-h C-n | Help Files [Emacs prefix, active in Spacemacs] | browse_news | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002dn |
| C-h C-o | Help Files [Emacs prefix, active in Spacemacs] | describe-distribution (rebound from the generic help browser) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002do |
| C-h C-p | Help Files [Emacs prefix, active in Spacemacs] | view-emacs-problems (the PROBLEMS file) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002dp |
| C-h C-q | Misc Help [Emacs prefix, active in Spacemacs] | help-quick-toggle (was the help browser) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Help.html#index-C_002dh-C_002dq |
| C-h C-t | Help Files [Emacs prefix, active in Spacemacs] | view-emacs-todo (rebound from the generic help browser) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002dt |
| C-h C-w | Help Files [Emacs prefix, active in Spacemacs] | describe-no-warranty | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-C_002dw |
| C-h F | Name Help [Emacs prefix, active in Spacemacs] | command_palette | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Name-Help.html#index-C_002dh-F |
| C-h I | Select Input Method [Emacs prefix, active in Spacemacs] | Same chord, same command: commands.rs:64788 describe_input_method, defaulting to the buffer's method and printing the documentation plus the key table. The old 'unicode_picker' note is stale — zmax has an input-method table and set/toggle/list commands. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Select-Input-Method.html#index-C_002dh-I |
| C-h K | Key Help [Emacs prefix, active in Spacemacs] | help | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Key-Help.html#index-C_002dh-K |
| C-h L | Language Environments [Emacs prefix, active in Spacemacs] | layer_search | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Language-Environments.html#index-C_002dh-L |
| C-h P | Package Keywords [Emacs prefix, active in Spacemacs] | package_search | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Keywords.html#index-C_002dh-P |
| C-h S | Misc Help [Emacs prefix, active in Spacemacs] | man_page_search | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Help.html#index-C_002dh-S |
| C-h a | Apropos [Emacs prefix, active in Spacemacs] | command_palette | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Apropos.html#index-C_002dh-a |
| C-h b | Misc Help [Emacs prefix, active in Spacemacs] | help | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Help.html#index-C_002dh-b |
| C-h c | Key Help [Emacs prefix, active in Spacemacs] | help | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Key-Help.html#index-C_002dh-c |
| C-h d | Apropos [Emacs prefix, active in Spacemacs] | command_palette | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Apropos.html#index-C_002dh-d |
| C-h e | Misc Help [Emacs prefix, active in Spacemacs] | help | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Help.html#index-C_002dh-e |
| C-h f | Name Help [Emacs prefix, active in Spacemacs] | command_palette | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Name-Help.html#index-C_002dh-f |
| C-h g | Help Files [Emacs prefix, active in Spacemacs] | describe-gnu-project | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Help-Files.html#index-C_002dh-g |
| C-h h | International Chars [Emacs prefix, active in Spacemacs] | help | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/International-Chars.html#index-C_002dh-h |
| C-h i | Misc Help [Emacs prefix, active in Spacemacs] | info_search | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Help.html#index-C_002dh-i |
| C-h k | Key Help [Emacs prefix, active in Spacemacs] | help | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Key-Help.html#index-C_002dh-k |
| C-h l | Misc Help [Emacs prefix, active in Spacemacs] | help | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Help.html#index-C_002dh-l |
| C-h m | Misc Help [Emacs prefix, active in Spacemacs] | describe_current_modes | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Help.html#index-C_002dh-m |
| C-h o | Name Help [Emacs prefix, active in Spacemacs] | command_palette | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Name-Help.html#index-C_002dh-o |
| C-h p | Package Keywords [Emacs prefix, active in Spacemacs] | package_search | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Keywords.html#index-C_002dh-p |
| C-h s | Misc Help [Emacs prefix, active in Spacemacs] | help | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Help.html#index-C_002dh-s |
| C-h t | Basic [Emacs prefix, active in Spacemacs] | help | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic.html#index-C_002dh-t |
| C-h v | Name Help [Emacs prefix, active in Spacemacs] | config_variable_search | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Name-Help.html#index-C_002dh-v |
| C-h w | Key Help [Emacs prefix, active in Spacemacs] | help | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Key-Help.html#index-C_002dh-w |
| C-h x | Name Help [Emacs prefix, active in Spacemacs] | command_palette | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Name-Help.html#index-C_002dh-x |
| C-x # | Invoking emacsclient [Emacs prefix, active in Spacemacs] | C-x #: server-edit | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Invoking-emacsclient.html#index-C_002dx-_0023 |
| C-x $ | Selective Display [Emacs prefix, active in Spacemacs] | set-selective-display (was fold_close_all) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Selective-Display.html#index-C_002dx-_0024 |
| C-x ' | expand-abbrev — expand the abbrev before point [Emacs prefix, active in Spacemacs] | expand_abbrev | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Expanding-Abbrevs.html |
| C-x ) | Basic Keyboard Macro [Emacs prefix, active in Spacemacs] | kmacro-end-macro: ends the macro definition (C-x ( stays the record_macro toggle) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Keyboard-Macro.html#index-C_002dx-_0029 |
| C-x * | calc-dispatch — Calc calculator dispatch prefix [Emacs prefix, active in Spacemacs] | spacemacs C-x * (calc-dispatch) -> zmax calc opens the RPN stack calculator (:calc still evaluates an infix expression/selection) | ported | https://www.gnu.org/software/emacs/manual/html_node/calc/Starting-Calc.html |
| C-x + | Change Window [Emacs prefix, active in Spacemacs] | resize_view_equalize | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Window.html#index-C_002dx-_002b |
| C-x - | Change Window [Emacs prefix, active in Spacemacs] | shrink-window-if-larger-than-buffer: fits the window to its buffer's text | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Window.html#index-C_002dx-_002d |
| C-x . | Fill Prefix [Emacs prefix, active in Spacemacs] | set-fill-prefix | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Fill-Prefix.html#index-C_002dx-_002e |
| C-x 0 | Change Window [Emacs prefix, active in Spacemacs] | wclose | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Window.html#index-C_002dx-0 |
| C-x 1 | Change Window [Emacs prefix, active in Spacemacs] | wonly | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Window.html#index-C_002dx-1 |
| C-x 2 | Split Window [Emacs prefix, active in Spacemacs] | hsplit | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Split-Window.html#index-C_002dx-2 |
| C-x 3 | Split Window [Emacs prefix, active in Spacemacs] | vsplit | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Split-Window.html#index-C_002dx-3 |
| C-x 4 | Pop Up Window [Emacs prefix, active in Spacemacs] | C-x 4 (other-window prefix). Live subtree: C-x 4 f find_file_other_window, C-x 4 b switch_to_buffer_other_window, C-x 4 0 delete_window_and_buffer, C-x 4 . xref_find_definitions_other_window. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Pop-Up-Window.html#index-C_002dx-4 |
| C-x 4 . | Looking Up Identifiers [Emacs prefix, active in Spacemacs] | goto_definition | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Looking-Up-Identifiers.html#index-C_002dx-4-_002e |
| C-x 4 0 | Change Window [Emacs prefix, active in Spacemacs] | wclose | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Window.html#index-C_002dx-4-0 |
| C-x 4 4 | Pop Up Window [Emacs prefix, active in Spacemacs] | C-x 4 4: other-window-prefix | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Pop-Up-Window.html#index-C_002dx-4-4 |
| C-x 4 C-o | Pop Up Window [Emacs prefix, active in Spacemacs] | C-x 4 C-o: display-buffer | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Pop-Up-Window.html#index-C_002dx-4-C_002do |
| C-x 4 a | Change Log Commands [Emacs prefix, active in Spacemacs] | add-change-log-entry-other-window | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Log-Commands.html#index-C_002dx-4-a |
| C-x 4 b | Select Buffer [Emacs prefix, active in Spacemacs] | buffer_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Select-Buffer.html#index-C_002dx-4-b |
| C-x 4 c | Indirect Buffers [Emacs prefix, active in Spacemacs] | clone_indirect_buffer | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Indirect-Buffers.html#index-C_002dx-4-c |
| C-x 4 f | Visiting [Emacs prefix, active in Spacemacs] | goto_file | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Visiting.html#index-C_002dx-4-f |
| C-x 4 m | Sending Mail [Emacs prefix, active in Spacemacs] | `C-x 4 m` is compose-mail-other-window and opens the draft in a split: `compose_mail_other_window` runs `hsplit-new` before `compose_mail`, so the buffer it was called from stays on screen. The old note ('current window') predates that. Pinned by `tests/test/spacemacs_states.rs::compose_mail_other_window_splits_first`, which asserts the view count grew and the new view holds the draft. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Sending-Mail.html#index-C_002dx-4-m |
| C-x 5 | Creating Frames [Emacs prefix, active in Spacemacs] | C-x 5 (frame prefix), 13 chords. A zmax frame is a parked tab-set restored into the live tree (Editor::new_frame) rather than an OS window — the terminal analogue. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Creating-Frames.html#index-C_002dx-5 |
| C-x 5 . | Looking Up Identifiers [Emacs prefix, active in Spacemacs] | Same chord, same command: commands.rs:49372 sets DisplayTarget::Frame before the jump, and zmax's C-x 5 map is a real frame map (make_frame_command, clone_frame, delete_frame, other_frame, delete_other_frames, undelete_frame). The old note ('zmax has no frames') is stale. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Looking-Up-Identifiers.html#index-C_002dx-5-_002e |
| C-x 5 0 | Frame Commands [Emacs prefix, active in Spacemacs] | C-x 5 0: delete-frame | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Frame-Commands.html#index-C_002dx-5-0 |
| C-x 5 1 | Frame Commands [Emacs prefix, active in Spacemacs] | C-x 5 1: delete-other-frames | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Frame-Commands.html#index-C_002dx-5-1 |
| C-x 5 2 | Creating Frames [Emacs prefix, active in Spacemacs] | C-x 5 2: make-frame-command | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Creating-Frames.html#index-C_002dx-5-2 |
| C-x 5 5 | Creating Frames [Emacs prefix, active in Spacemacs] | C-x 5 5: other-frame-prefix | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Creating-Frames.html#index-C_002dx-5-5 |
| C-x 5 b | Select Buffer [Emacs prefix, active in Spacemacs] | C-x 5 b: switch-to-buffer-other-frame | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Select-Buffer.html#index-C_002dx-5-b |
| C-x 5 c | Creating Frames [Emacs prefix, active in Spacemacs] | C-x 5 c: clone-frame | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Creating-Frames.html#index-C_002dx-5-c |
| C-x 5 d | Dired Enter [Emacs prefix, active in Spacemacs] | C-x 5 d: dired-other-frame | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Enter.html#index-C_002dx-5-d |
| C-x 5 f | Visiting [Emacs prefix, active in Spacemacs] | C-x 5 f: find-file-other-frame | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Visiting.html#index-C_002dx-5-f |
| C-x 5 m | Sending Mail [Emacs prefix, active in Spacemacs] | compose-mail-other-frame: the draft opens in a new frame | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Sending-Mail.html#index-C_002dx-5-m |
| C-x 5 o | Frame Commands [Emacs prefix, active in Spacemacs] | C-x 5 o: other-frame | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Frame-Commands.html#index-C_002dx-5-o |
| C-x 5 r | Creating Frames [Emacs prefix, active in Spacemacs] | C-x 5 r: find-file-read-only-other-frame | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Creating-Frames.html#index-C_002dx-5-r |
| C-x 5 u | Frame Commands [Emacs prefix, active in Spacemacs] | C-x 5 u: undelete-frame | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Frame-Commands.html#index-C_002dx-5-u |
| C-x 6 1 | Two-Column [Emacs prefix, active in Spacemacs] | 2C-merge | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Two_002dColumn.html#index-C_002dx-6-1 |
| C-x 6 2 | Two-Column [Emacs prefix, active in Spacemacs] | 2C-two-columns | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Two_002dColumn.html#index-C_002dx-6-2 |
| C-x 6 RET | Two-Column [Emacs prefix, active in Spacemacs] | 2C-newline | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Two_002dColumn.html#index-C_002dx-6-RET |
| C-x 6 b | Two-Column [Emacs prefix, active in Spacemacs] | 2C-associate-buffer | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Two_002dColumn.html#index-C_002dx-6-b |
| C-x 6 d | Two-Column [Emacs prefix, active in Spacemacs] | 2C-dissociate | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Two_002dColumn.html#index-C_002dx-6-d |
| C-x 6 s | Two-Column [Emacs prefix, active in Spacemacs] | 2C-split | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Two_002dColumn.html#index-C_002dx-6-s |
| C-x 8 | Inserting Text [Emacs prefix, active in Spacemacs] | The C-x 8 prefix (Emacs 'Inserting Text'): C-x 8 RET is insert-char, which zmax binds to unicode_picker. Retargeted from the stale key:normal:C-x 8 e, which stopped resolving when C-x 8 e became a prefix for the emoji commands (C-x 8 e e/i/l/s -> emoji_list, e d -> emoji_describe, e r -> emoji_recent). | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Inserting-Text.html#index-C_002dx-8 |
| C-x 8 RET | Input Methods [Emacs prefix, active in Spacemacs] | unicode_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Input-Methods.html#index-C_002dx-8-RET |
| C-x 8 e | Input Methods [Emacs prefix, active in Spacemacs] | Same as emacs.keybinding.c_x_8_e: C-x 8 e is a live prefix whose e/i/l/s reach emoji_list, d reaches emoji_describe and r reaches emoji_recent (commands.rs:45204). The old evidence token key:normal:C-x 8 e was broken. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Input-Methods.html#index-C_002dx-8-e |
| C-x ; | Options for Comments [Emacs prefix, active in Spacemacs] | Same chord, same command: commands.rs:38024 comment_set_column, a port of newcomment.el's comment-set-column including the prefix-argument comment-search-backward branch. The old 'command_palette' note is stale. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Options-for-Comments.html#index-C_002dx-_003b |
| C-x < | Horizontal Scrolling [Emacs prefix, active in Spacemacs] | scroll-left -> scroll_half_column_right (view moves right) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Horizontal-Scrolling.html#index-C_002dx-_003c |
| C-x = | Position Info [Emacs prefix, active in Spacemacs] | file_info | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Position-Info.html#index-C_002dx-_003d |
| C-x =, and international characters | International Chars [Emacs prefix, active in Spacemacs] | C-x =: what-cursor-position - reports the character at point, its codepoint and its coding | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/International-Chars.html#index-C_002dx-_003d_002c-and-international-characters |
| C-x > | Horizontal Scrolling [Emacs prefix, active in Spacemacs] | scroll-right -> scroll_half_column_left | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Horizontal-Scrolling.html#index-C_002dx-_003e |
| C-x C-+ | Text Scale [Emacs prefix, active in Spacemacs] | text-scale-adjust (increase) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dx-C_002d_002b |
| C-x C-- | Text Scale [Emacs prefix, active in Spacemacs] | text-scale-adjust (decrease) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dx-C_002d_002d |
| C-x C-0 | Text Scale [Emacs prefix, active in Spacemacs] | text-scale-adjust (reset) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dx-C_002d0 |
| C-x C-; | Comment Commands [Emacs prefix, active in Spacemacs] | toggle_comments | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Comment-Commands.html#index-C_002dx-C_002d_003b |
| C-x C-= | Text Scale [Emacs prefix, active in Spacemacs] | text-scale-adjust: text_scale_increase | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dx-C_002d_003d |
| C-x C-M-+ | Text Scale [Emacs prefix, active in Spacemacs] | text-scale-adjust (increase) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dx-C_002dM_002d_002b |
| C-x C-M-- | Text Scale [Emacs prefix, active in Spacemacs] | text-scale-adjust (decrease) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dx-C_002dM_002d_002d |
| C-x C-M-0 | Text Scale [Emacs prefix, active in Spacemacs] | text-scale-adjust (reset) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dx-C_002dM_002d0 |
| C-x C-M-= | Text Scale [Emacs prefix, active in Spacemacs] | -> text_scale_increase | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Scale.html#index-C_002dx-C_002dM_002d_003d |
| C-x C-SPC | Global Mark Ring [Emacs prefix, active in Spacemacs] | pop-global-mark -> pop_to_mark (mark ring) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Global-Mark-Ring.html#index-C_002dx-C_002dSPC |
| C-x C-a C-b | Commands of GUD [Emacs prefix, active in Spacemacs] | Same as emacs.keybinding.c_x_c_a_c_b: the chord runs dap_set_breakpoint (commands.rs:70950), which sets a breakpoint on the cursor line and is a no-op when one is already there (:70964-70970), matching gud-break rather than a toggle. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Commands-of-GUD.html#index-C_002dx-C_002da-C_002db |
| C-x C-b | List Buffers [Emacs prefix, active in Spacemacs] | buffer_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/List-Buffers.html#index-C_002dx-C_002db |
| C-x C-c | Exiting [Emacs prefix, active in Spacemacs] | write-quit-all | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Exiting.html#index-C_002dx-C_002dc |
| C-x C-d | Directories [Emacs prefix, active in Spacemacs] | file_picker_in_current_directory | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Directories.html#index-C_002dx-C_002dd |
| C-x C-e | Lisp Eval [Emacs prefix, active in Spacemacs] | `C-x C-e` runs `eval_last_sexp` on the sexp ending at point - emacs's point being the left edge of the block cursor - so with the cursor on the second `(` of `(+ 1 2)(+ 10 20)` it evaluates the first form and echoes `3 (#o3, #x3, ?\\C-c)`, as emacs does; an empty preceding range errors `elisp: end-of-file`. Integer results are echoed in `eval-expression-print-format`'s shape, verified byte-identical to `emacs -Q --batch` on 0, 3, 27, 32, 40, 65, 92, 127, 233 and -5. The three remaining gaps are closed. (1) The prefix arguments are reachable: `M--` is emacs's `negative-argument`, read by `handle_prefix_key` like `M-<digit>` - it used to be a *keymap node* holding the three word-case commands, which swallowed the argument before any other command could see it, so `M-- C-x C-e` (the bare `-` that lifts `eval-expression-print-maximum-character`) had nowhere to put it. The word-case commands read the negative argument themselves now, as emacs gets the same behaviour out of `(interactive \"p\")`, and they leave point where it was, which `(upcase-word -1)` does in emacs. (2) Output truncates to `eval-expression-print-length` (12) and `eval-expression-print-level` (4) and a zero argument lifts both: `(make-list 20 1)` echoes `(1 1 1 1 1 1 1 1 1 1 1 1 ...)`, matching emacs, and `M-0 C-x C-e` prints the whole list. (3) \"This command handles `defvar', `defcustom' and `defface' the same way that `eval-defun' does\": `elisp--eval-defun-1`'s rewrite is ported, so a re-evaluated `defcustom` is re-set through its own `:set` function and a re-evaluated `defface` has its cached `face-defface-spec` / `face-override-spec` cleared first - both used to be no-ops on a symbol that already had a value or a spec. `defvar` needed no rewrite: zmax's evaluator already re-sets it. Pinned by `tests/test/emacs_keys.rs::c_x_c_e_negative_argument_lifts_the_character_limit`, `::c_x_c_e_truncates_unless_the_argument_is_zero`, `::c_x_c_e_reevaluates_defcustom_and_defface`, `::negative_argument_makes_the_word_case_commands_work_backwards` and `commands::elisp_redefinition_tests::*`. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Lisp-Eval.html#index-C_002dx-C_002de |
| C-x C-f | Visiting [Emacs prefix, active in Spacemacs] | file_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Visiting.html#index-C_002dx-C_002df |
| C-x C-j | Dired Enter [Emacs prefix, active in Spacemacs] | file_picker_in_current_buffer_directory | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Enter.html#index-C_002dx-C_002dj |
| C-x C-k C-a | Keyboard Macro Counter [Emacs prefix, active in Spacemacs] | kmacro_add_counter | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Counter.html#index-C_002dx-C_002dk-C_002da |
| C-x C-k C-c | Keyboard Macro Counter [Emacs prefix, active in Spacemacs] | kmacro-set-counter | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Counter.html#index-C_002dx-C_002dk-C_002dc |
| C-x C-k C-e | Edit Keyboard Macro [Emacs prefix, active in Spacemacs] | kmacro-edit-macro (edit the last macro) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Edit-Keyboard-Macro.html#index-C_002dx-C_002dk-C_002de |
| C-x C-k C-f | Keyboard Macro Counter [Emacs prefix, active in Spacemacs] | kmacro-set-format | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Counter.html#index-C_002dx-C_002dk-C_002df |
| C-x C-k C-i | Keyboard Macro Counter [Emacs prefix, active in Spacemacs] | kmacro_insert_counter | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Counter.html#index-C_002dx-C_002dk-C_002di |
| C-x C-k C-k | Keyboard Macro Ring [Emacs prefix, active in Spacemacs] | kmacro-end-or-call-macro-repeat | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Ring.html#index-C_002dx-C_002dk-C_002dk |
| C-x C-k C-n | Keyboard Macro Ring [Emacs prefix, active in Spacemacs] | kmacro_ring_next | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Ring.html#index-C_002dx-C_002dk-C_002dn |
| C-x C-k C-p | Keyboard Macro Ring [Emacs prefix, active in Spacemacs] | kmacro_ring_prev | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Ring.html#index-C_002dx-C_002dk-C_002dp |
| C-x C-k RET | Edit Keyboard Macro [Emacs prefix, active in Spacemacs] | kmacro-edit-macro (edit the last macro) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Edit-Keyboard-Macro.html#index-C_002dx-C_002dk-RET |
| C-x C-k SPC | Keyboard Macro Step-Edit [Emacs prefix, active in Spacemacs] | Same as emacs.keybinding.c_x_c_k_spc: the stepper is real and the whole kmacro-step-edit-map is honoured. Both remaining divergences are closed - TAB (act-repeat) continues on the *command* now, resolving each pending key through the live keymap and comparing command identity the way emacs does (it binds C-n and <down> both to next-line), and recording trims the whole terminator chord, so `C-x ( x x C-x )` records the two keys emacs records rather than three with a trailing <C-x>. Pinned by `tests/test/spacemacs_states.rs::kmacro_step_edit_tab_repeats_on_the_command_not_the_key` and `::kmacro_recording_drops_the_whole_terminator_chord`. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Step_002dEdit.html#index-C_002dx-C_002dk-SPC |
| C-x C-k b | Save Keyboard Macro [Emacs prefix, active in Spacemacs] | Same as emacs.keybinding.c_x_c_k_b: commands.rs:52939 installs the `@<macro>` binding into the running keymap (and the config) via keymap_write, so the chosen key replays the last macro immediately. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Save-Keyboard-Macro.html#index-C_002dx-C_002dk-b |
| C-x C-k d | Basic Keyboard Macro [Emacs prefix, active in Spacemacs] | kmacro-delete-ring-head -> kmacro_ring_delete | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Keyboard-Macro.html#index-C_002dx-C_002dk-d |
| C-x C-k e | Edit Keyboard Macro [Emacs prefix, active in Spacemacs] | `C-x C-k e` prompts for which macro to edit (last / lossage / a named macro or register) and opens emacs's `*Edit Macro*` buffer on it - edmacro.el's own template (the `;; Keyboard Macro Editor.` header, `;; Original keys:`, `Command:`/`Key:` and the `Macro:` section), in `edmacro` major mode. That is where edmacro's map lives, keyed on the mode in keymap/major_mode.rs: `C-c C-c` (edmacro-finish-edit) compiles what the buffer now says and makes it the last macro, `C-c C-q` inserts a literal key's written name, `C-c C-r` sets the macro from the region's lines. It used to be a one-line minibuffer editor, which left the last two commands with no buffer to run in. Pinned by `tests/test/spacemacs_states.rs::edit_kbd_macro_opens_the_edit_macro_buffer` and `::edmacro_finish_edit_installs_the_edited_macro`. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Edit-Keyboard-Macro.html#index-C_002dx-C_002dk-e |
| C-x C-k l | Edit Keyboard Macro [Emacs prefix, active in Spacemacs] | kmacro-edit-lossage | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Edit-Keyboard-Macro.html#index-C_002dx-C_002dk-l |
| C-x C-k n | Save Keyboard Macro [Emacs prefix, active in Spacemacs] | kmacro-name-last-macro | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Save-Keyboard-Macro.html#index-C_002dx-C_002dk-n |
| C-x C-k r | Basic Keyboard Macro [Emacs prefix, active in Spacemacs] | apply-macro-to-region-lines | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Keyboard-Macro.html#index-C_002dx-C_002dk-r |
| C-x C-k x | Keyboard Macro Registers [Emacs prefix, active in Spacemacs] | kmacro_to_register | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Registers.html#index-C_002dx-C_002dk-x |
| C-x C-l | Case [Emacs prefix, active in Spacemacs] | switch_to_lowercase | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Case.html#index-C_002dx-C_002dl |
| C-x C-n | Moving Point [Emacs prefix, active in Spacemacs] | set-goal-column | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-Point.html#index-C_002dx-C_002dn |
| C-x C-o | Blank Lines [Emacs prefix, active in Spacemacs] | delete-blank-lines | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Blank-Lines.html#index-C_002dx-C_002do |
| C-x C-p | Pages [Emacs prefix, active in Spacemacs] | mark-page (rebound from select_all) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Pages.html#index-C_002dx-C_002dp |
| C-x C-q | Misc Buffer [Emacs prefix, active in Spacemacs] | toggle_readonly | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Buffer.html#index-C_002dx-C_002dq |
| C-x C-r | Visiting [Emacs prefix, active in Spacemacs] | file_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Visiting.html#index-C_002dx-C_002dr |
| C-x C-s | Save Commands [Emacs prefix, active in Spacemacs] | write | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Save-Commands.html#index-C_002dx-C_002ds |
| C-x C-t | Transpose [Emacs prefix, active in Spacemacs] | transpose-lines | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Transpose.html#index-C_002dx-C_002dt |
| C-x C-u | Case [Emacs prefix, active in Spacemacs] | switch_to_uppercase | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Case.html#index-C_002dx-C_002du |
| C-x C-v | Visiting [Emacs prefix, active in Spacemacs] | file_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Visiting.html#index-C_002dx-C_002dv |
| C-x C-w | Save Commands [Emacs prefix, active in Spacemacs] | write | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Save-Commands.html#index-C_002dx-C_002dw |
| C-x C-x | Setting Mark [Emacs prefix, active in Spacemacs] | flip_selections | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Setting-Mark.html#index-C_002dx-C_002dx |
| C-x C-x, in rectangle-mark-mode | Rectangles [Emacs prefix, active in Spacemacs] | `C-x C-x` runs `exchange_point_and_mark`, which is rectangle-aware the way emacs's rebinding in `rectangle-mark-mode`'s own map is: with a rectangular region live it moves point to the opposite *corner* (`block_swap_corners`), and with an ordinary region it is the plain swap of the region's ends. The chord ran `flip_selections` in both cases. Pinned by `tests/test/spacemacs_states.rs::c_x_c_x_walks_the_rectangle_corners`, which marks a rectangle spanning three rows and asserts the chord moves the cursor from the last row to the first. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html#index-C_002dx-C_002dx_002c-in-rectangle_002dmark_002dmode |
| C-x C-z | External Lisp [Emacs prefix, active in Spacemacs] | suspend-frame -> suspend | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/External-Lisp.html#index-C_002dx-C_002dz |
| C-x DEL | Sentences [Emacs prefix, active in Spacemacs] | backward-kill-sentence | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Sentences.html#index-C_002dx-DEL |
| C-x ESC ESC | Repetition [Emacs prefix, active in Spacemacs] | command_history_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Repetition.html#index-C_002dx-ESC-ESC |
| C-x LEFT | Select Buffer [Emacs prefix, active in Spacemacs] | previous-buffer -> goto_previous_buffer | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Select-Buffer.html#index-C_002dx-LEFT |
| C-x RET | International Chars [Emacs prefix, active in Spacemacs] | C-x RET (coding-system prefix); C-x RET c maps universal-coding-system-argument. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/International-Chars.html#index-C_002dx-RET |
| C-x RET C-\ | Select Input Method [Emacs prefix, active in Spacemacs] | C-x RET C-\ now runs set_input_method, which prompts for the input method the buffer composes characters with; it sits with the rest of the C-x RET coding-system map | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Select-Input-Method.html#index-C_002dx-RET-C_002d_005c |
| C-x RET F | File Name Coding [Emacs prefix, active in Spacemacs] | set-file-name-coding-system | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/File-Name-Coding.html#index-C_002dx-RET-F |
| C-x RET X | Communication Coding [Emacs prefix, active in Spacemacs] | set-next-selection-coding-system | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Communication-Coding.html#index-C_002dx-RET-X |
| C-x RET c | Text Coding [Emacs prefix, active in Spacemacs] | universal-coding-system-argument | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Coding.html#index-C_002dx-RET-c |
| C-x RET f | Text Coding [Emacs prefix, active in Spacemacs] | set-buffer-file-coding-system | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Coding.html#index-C_002dx-RET-f |
| C-x RET k | Terminal Coding [Emacs prefix, active in Spacemacs] | set-keyboard-coding-system | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Terminal-Coding.html#index-C_002dx-RET-k |
| C-x RET p | Communication Coding [Emacs prefix, active in Spacemacs] | set-buffer-process-coding-system | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Communication-Coding.html#index-C_002dx-RET-p |
| C-x RET r | Text Coding [Emacs prefix, active in Spacemacs] | revert-buffer-with-coding-system | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Coding.html#index-C_002dx-RET-r |
| C-x RET t | Terminal Coding [Emacs prefix, active in Spacemacs] | set-terminal-coding-system | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Terminal-Coding.html#index-C_002dx-RET-t |
| C-x RET x | Communication Coding [Emacs prefix, active in Spacemacs] | set-selection-coding-system | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Communication-Coding.html#index-C_002dx-RET-x |
| C-x RIGHT | Select Buffer [Emacs prefix, active in Spacemacs] | spacemacs C-x RIGHT (next-buffer / Select Buffer) -> zmax goto_next_buffer switches to the next buffer (bound at C-x right in spacemacs.rs) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Select-Buffer.html#index-C_002dx-RIGHT |
| C-x SPC | rectangle-mark-mode — toggle a rectangular region [Emacs prefix, active in Spacemacs] | visual_block_mode | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html |
| C-x TAB | Indentation Commands [Emacs prefix, active in Spacemacs] | C-x TAB: indent-rigidly | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Indentation-Commands.html#index-C_002dx-TAB |
| C-x [ | Pages [Emacs prefix, active in Spacemacs] | backward-page (rebound from page_up, which scrolls a screenful) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Pages.html#index-C_002dx-_005b |
| C-x \ | Select Input Method [Emacs prefix, active in Spacemacs] | `input_method_transient_on` (zmax-term/src/commands.rs:64158) now captures the predecessor unconditionally — `states.get(&doc_id).map(|state| state.method)` — where it used to special-case an already-running transient method and keep that method's own saved predecessor. That special case was an explicit divergence from the source: mule-cmds.el does `(setq previous-transient-input-method current-input-method)` with no condition, so pressing `C-x \\` twice before typing makes the transient method its own predecessor and it stays active after the chunk. The comment now describes the ported behaviour instead of arguing against it. On the exitfun point from the row: zmax has no hook list to remove from — `input_method_chunk_inserted` (commands.rs:64131) is the single chunk hook and already fires the transient clear only when the document's method is transient, so there was nothing to change. The chord itself was already live (keymap/spacemacs.rs:162). Upstream: emacs lisp/international/mule-cmds.el:1606-1618 activate-transient-input-method — (setq previous-transient-input-method current-input-method) is unconditional, followed by (activate-input-method default-transient-input-method) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Select-Input-Method.html#index-C_002dx-_005c |
| C-x ] | Pages [Emacs prefix, active in Spacemacs] | forward-page (rebound from page_down) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Pages.html#index-C_002dx-_005d |
| C-x ^ | Change Window [Emacs prefix, active in Spacemacs] | resize_view_taller | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Window.html#index-C_002dx-_005e |
| C-x ` | Compilation Mode [Emacs prefix, active in Spacemacs] | run_next_error | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Compilation-Mode.html#index-C_002dx-_0060 |
| C-x a g | Defining Abbrevs [Emacs prefix, active in Spacemacs] | define_abbrev | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Defining-Abbrevs.html#index-C_002dx-a-g |
| C-x a i g | Defining Abbrevs [Emacs prefix, active in Spacemacs] | inverse-add-global-abbrev | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Defining-Abbrevs.html#index-C_002dx-a-i-g |
| C-x a i l | Defining Abbrevs [Emacs prefix, active in Spacemacs] | Ports inverse-add-abbrev (lisp/abbrev.el:413-444) for C-x a i l. The name span comes from abbrev_nth_word_span, a faithful port of (forward-word (1+ (- arg))) / (skip-syntax-backward "^w") / (backward-word 1): verified against emacs 30.2 on "alpha beta gamma delta" for arg=1/2/0/-1 -> beta/alpha/gamma/delta. The prompt is verbatim emacs wording, 'Expansion for Mode abbrev "Foo": '. The definition is keyed on (downcase name), and lookup case-folds like abbrev--symbol, so defining on "Foo" and later typing "foo" + C-x ' expands. All three recorded divergences are closed. (a) abbrev-insert's capitalisation adjustment (abbrev.el:861-882) is ported: an all-caps abbrev upcases each word's initial where the expansion is more than one word and the whole of it otherwise (or when `abbrev-all-caps` is set), and an abbrev with only some caps upcases the first initial. Read out of GNU Emacs 31.1 with foo -> "bar baz" and qux -> "quux": foo/fOO -> "bar baz", Foo -> "Bar baz", FOO -> "Bar Baz", Qux -> "Quux", QUX -> "QUUX", and "(bar baz)" -> "(Bar baz)" / "(Bar Baz)". This is the shared expansion path, so plain C-x ' gets it too. (b) The redefine confirmation is `y-or-n-p` now - a single keystroke, y/SPC yes, n/DEL no, C-g quits - not a text prompt needing y+RET. (c) Mode-local tables are written to the store beside the global ones (`mode\tname\texpansion` rows in the same file emacs keeps every table in), so a mode abbrev survives a restart. Pinned by `commands::abbrev_case_tests::*` and `tests/test/mode_abbrev.rs::mode_abbrevs_are_written_to_the_store`. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Defining-Abbrevs.html#index-C_002dx-a-i-l |
| C-x a l | Defining Abbrevs [Emacs prefix, active in Spacemacs] | `C-x a l` (add-mode-abbrev) is implemented and driven end-to-end: the expansion is the word before point or the active region, only the name is prompted for (`Mode abbrev that expands into "X": `, abbrev.el:367), the name is downcased before it is stored (abbrev.el:375), redefining an existing name asks `NAME expands into "OLD"; redefine? (y or n)` (abbrev.el:373) and takes the single keystroke `y-or-n-p` reads, a negative prefix argument switches the prompt to `Undefine Mode abbrev: ` and removes the entry (abbrev.el:368), and a positive prefix argument takes N words back. Definitions land in a per-major-mode table keyed by zmax's language id (`.txt` -> `text`), separate from the global table, matching `only-global-abbrevs` = nil. The three recorded gaps are closed: `only-global-abbrevs` is *observed* rerouting the definition into the global table (driven through `:elisp (setq only-global-abbrevs t)` and read back out of the store); the `C-x a` submap is bound in the emacs preset's Select mode as well, so the region-as-expansion branch - which is only reachable *with* a live region - can be typed there; and mode tables persist, written to the store as `mode\tname\texpansion` rows beside the global ones. Remaining divergence, editor-wide rather than particular to this command: the emacs-style prefix argument (N words, 0 = region, negative = undefine) is reachable in the emacs preset, where `C-u` is universal-argument; under the spacemacs leader a bare count is not a prefix argument. Pinned by `tests/test/mode_abbrev.rs::only_global_abbrevs_reroutes_add_mode_abbrev_to_the_global_table` and `::mode_abbrevs_are_written_to_the_store`. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Defining-Abbrevs.html#index-C_002dx-a-l |
| C-x b | Select Buffer [Emacs prefix, active in Spacemacs] | buffer_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Select-Buffer.html#index-C_002dx-b |
| C-x d | Dired Enter [Emacs prefix, active in Spacemacs] | file_picker_in_current_directory | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Enter.html#index-C_002dx-d |
| C-x e | Basic Keyboard Macro [Emacs prefix, active in Spacemacs] | kmacro-end-and-call-macro | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Keyboard-Macro.html#index-C_002dx-e |
| C-x f | Fill Commands [Emacs prefix, active in Spacemacs] | set-fill-column, 0 args = the cursor column (rebound from toggle_fill_column) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Fill-Commands.html#index-C_002dx-f |
| C-x h | Marking Objects [Emacs prefix, active in Spacemacs] | select_all | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Marking-Objects.html#index-C_002dx-h |
| C-x i | Misc File Ops [Emacs prefix, active in Spacemacs] | insert-file | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-File-Ops.html#index-C_002dx-i |
| C-x k | Kill Buffer [Emacs prefix, active in Spacemacs] | buffer-close | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Kill-Buffer.html#index-C_002dx-k |
| C-x l | Pages [Emacs prefix, active in Spacemacs] | count-lines-page (rebound from document_stats) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Pages.html#index-C_002dx-l |
| C-x m | Sending Mail [Emacs prefix, active in Spacemacs] | compose-mail | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Sending-Mail.html#index-C_002dx-m |
| C-x n d | Narrowing [Emacs prefix, active in Spacemacs] | narrow_to_function | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Narrowing.html#index-C_002dx-n-d |
| C-x n n | Narrowing [Emacs prefix, active in Spacemacs] | narrow_to_region | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Narrowing.html#index-C_002dx-n-n |
| C-x n p | Narrowing [Emacs prefix, active in Spacemacs] | narrow_to_page | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Narrowing.html#index-C_002dx-n-p |
| C-x n w | Narrowing [Emacs prefix, active in Spacemacs] | widen | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Narrowing.html#index-C_002dx-n-w |
| C-x o | Other Window [Emacs prefix, active in Spacemacs] | rotate_view | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Other-Window.html#index-C_002dx-o |
| C-x q | Keyboard Macro Query [Emacs prefix, active in Spacemacs] | Same chord, same command: commands.rs:75314 kbd_macro_query with the full SPC/y, DEL/n, RET/q, C-r answer set at commands.rs:75332. The old 'command_palette' note is stale. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macro-Query.html#index-C_002dx-q |
| C-x r + | Number Registers [Emacs prefix, active in Spacemacs] | increment_register | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Number-Registers.html#index-C_002dx-r-_002b |
| C-x r M | Bookmarks [Emacs prefix, active in Spacemacs] | bookmark-set-no-overwrite | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Bookmarks.html#index-C_002dx-r-M |
| C-x r M-w | Rectangles [Emacs prefix, active in Spacemacs] | copy_rectangle_as_kill | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html#index-C_002dx-r-M_002dw |
| C-x r N | Rectangles [Emacs prefix, active in Spacemacs] | `C-x r N` runs `:rectangle-number-lines` now (keymap/spacemacs.rs, keymap/emacs.rs): the numbers go in at the rectangle's left edge with emacs's START/FORMAT arguments. The chord ran `:number-lines`, which numbers whole lines - the one table row each map was missing. Pinned by `tests/test/spacemacs_states.rs::c_x_r_n_numbers_at_the_rectangle_edge`, which marks a rectangle two columns in and asserts the first two columns of every line survive. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html#index-C_002dx-r-N |
| C-x r SPC | Position Registers [Emacs prefix, active in Spacemacs] | point_to_register | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Position-Registers.html#index-C_002dx-r-SPC |
| C-x r b | Bookmarks [Emacs prefix, active in Spacemacs] | bookmark_jump | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Bookmarks.html#index-C_002dx-r-b |
| C-x r c | Rectangles [Emacs prefix, active in Spacemacs] | clear_rectangle | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html#index-C_002dx-r-c |
| C-x r d | Rectangles [Emacs prefix, active in Spacemacs] | delete_rectangle | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html#index-C_002dx-r-d |
| C-x r f | Configuration Registers [Emacs prefix, active in Spacemacs] | frameset-to-register: zmax runs in one terminal frame, so the frameset is that frame's window configuration, restored by C-x r j | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Configuration-Registers.html#index-C_002dx-r-f |
| C-x r i | Text Registers [Emacs prefix, active in Spacemacs] | emacs_insert_register | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Registers.html#index-C_002dx-r-i |
| C-x r j | Position Registers [Emacs prefix, active in Spacemacs] | jump_to_register | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Position-Registers.html#index-C_002dx-r-j |
| C-x r k | Rectangles [Emacs prefix, active in Spacemacs] | kill_rectangle | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html#index-C_002dx-r-k |
| C-x r l | Bookmarks [Emacs prefix, active in Spacemacs] | bookmark_jump | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Bookmarks.html#index-C_002dx-r-l |
| C-x r m | Bookmarks [Emacs prefix, active in Spacemacs] | bookmark_set | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Bookmarks.html#index-C_002dx-r-m |
| C-x r n | Number Registers [Emacs prefix, active in Spacemacs] | number_to_register | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Number-Registers.html#index-C_002dx-r-n |
| C-x r o | Rectangles [Emacs prefix, active in Spacemacs] | open-rectangle | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html#index-C_002dx-r-o |
| C-x r r | Rectangle Registers [Emacs prefix, active in Spacemacs] | copy-rectangle-to-register (rebound from copy_rectangle_as_kill) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangle-Registers.html#index-C_002dx-r-r |
| C-x r s | Text Registers [Emacs prefix, active in Spacemacs] | copy-to-register (rebound from point_to_register, which is C-x r SPC) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Registers.html#index-C_002dx-r-s |
| C-x r t | Rectangles [Emacs prefix, active in Spacemacs] | string-rectangle | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html#index-C_002dx-r-t |
| C-x r w | Configuration Registers [Emacs prefix, active in Spacemacs] | window-configuration-to-register: restored by jump-to-register (C-x r j) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Configuration-Registers.html#index-C_002dx-r-w |
| C-x r y | Rectangles [Emacs prefix, active in Spacemacs] | yank_rectangle | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html#index-C_002dx-r-y |
| C-x s | Save Commands [Emacs prefix, active in Spacemacs] | write-all | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Save-Commands.html#index-C_002dx-s |
| C-x t | Tab Bars [Emacs prefix, active in Spacemacs] | C-x t (tab-bar prefix); C-x t 1 tab_only, C-x t t other_tab_prefix. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t |
| C-x t 0 | Tab Bars [Emacs prefix, active in Spacemacs] | close_tab | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-0 |
| C-x t 1 | Tab Bars [Emacs prefix, active in Spacemacs] | tab_only | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-1 |
| C-x t 2 | Tab Bars [Emacs prefix, active in Spacemacs] | new_tab | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-2 |
| C-x t RET | Tab Bars [Emacs prefix, active in Spacemacs] | tab-switch: prompts for the tab by name (or 1-based number) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-RET |
| C-x t b | Tab Bars [Emacs prefix, active in Spacemacs] | switch-to-buffer-other-tab: the buffer opens in a new tab | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-b |
| C-x t d | Tab Bars [Emacs prefix, active in Spacemacs] | `C-x t d` is dired-other-tab and opens the listing in a new tab: `dired_other_tab` prompts for the directory with the current buffer's own as the default (emacs's `dired-read-dir-and-switches`), calls `Editor::new_tab`, and pushes the Dired component there. The old note ('file explorer in the current tab') predates that. Pinned by `tests/test/spacemacs_states.rs::dired_other_tab_opens_a_new_tab`, which drives the chord in the shipped preset and asserts `tab_count` grew. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-d |
| C-x t f | Tab Bars [Emacs prefix, active in Spacemacs] | find-file-other-tab: the file opens in a new tab | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-f |
| C-x t m | Tab Bars [Emacs prefix, active in Spacemacs] | C-x t m is tab_move_right (commands.rs:30932), a port of tab-bar-move-tab's `(mod (+ from-index arg) (length tabs))` — one position right per count, wrapping. vim's :tabmove (move to last) is deliberately a different command. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-m |
| C-x t o | Tab Bars [Emacs prefix, active in Spacemacs] | goto_next_tabpage | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-o |
| C-x t r | Tab Bars [Emacs prefix, active in Spacemacs] | tab-rename | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-r |
| C-x t t | Tab Bars [Emacs prefix, active in Spacemacs] | C-x t t: other-tab-prefix | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html#index-C_002dx-t-t |
| C-x u | Undo [Emacs prefix, active in Spacemacs] | undo | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Undo.html#index-C_002dx-u |
| C-x v ! | Editing VC Commands [Emacs prefix, active in Spacemacs] | `C-x v !` is `vc-edit-next-command`: it arms the next VC command to be shown in the minibuffer for editing before it runs, so a flag can be added (`--force-with-lease`, another remote) on the way. `vc_edit_next_command` (commands.rs) sets a one-shot flag that `git_async` - the entry point every network VC command goes through - takes as it fires, opening the assembled `git ...` line in the prompt and running the edited line instead. The chord ran `git_status`, a different command. Pinned by `tests/test/spacemacs_states.rs::c_x_v_bang_arms_the_next_vc_command`, which arms it and shows the following push going to the prompt rather than out to git. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Editing-VC-Commands.html#index-C_002dx-v-_0021 |
| C-x v + | Pulling / Pushing [Emacs prefix, active in Spacemacs] | git_pull | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Pulling-_002f-Pushing.html#index-C_002dx-v-_002b |
| C-x v = | Old Revisions [Emacs prefix, active in Spacemacs] | git_diff | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Old-Revisions.html#index-C_002dx-v-_003d |
| C-x v D | Old Revisions [Emacs prefix, active in Spacemacs] | vc-root-diff (rebound from git_diff, which diffs the current file) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Old-Revisions.html#index-C_002dx-v-D |
| C-x v G | VC Ignore [Emacs prefix, active in Spacemacs] | vc-ignore (rebound from the git_file_dispatch menu) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Ignore.html#index-C_002dx-v-G |
| C-x v I | VC Change Log [Emacs prefix, active in Spacemacs] | vc-log-incoming (rebound from git_repo_log_picker) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Change-Log.html#index-C_002dx-v-I |
| C-x v L | VC Change Log [Emacs prefix, active in Spacemacs] | git_repo_log_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Change-Log.html#index-C_002dx-v-L |
| C-x v O | VC Change Log [Emacs prefix, active in Spacemacs] | vc-log-outgoing (rebound from git_repo_log_picker) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Change-Log.html#index-C_002dx-v-O |
| C-x v P | Pulling / Pushing [Emacs prefix, active in Spacemacs] | git_push | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Pulling-_002f-Pushing.html#index-C_002dx-v-P |
| C-x v a | Change Logs and VC [Emacs prefix, active in Spacemacs] | vc-update-change-log (rebound from git_file_log_picker) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Logs-and-VC.html#index-C_002dx-v-a |
| C-x v b c | Creating Branches [Emacs prefix, active in Spacemacs] | vc-create-branch (rebound from git_branch_picker) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Creating-Branches.html#index-C_002dx-v-b-c |
| C-x v b l | VC Change Log [Emacs prefix, active in Spacemacs] | vc-print-branch-log (rebound from git_repo_log_picker) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Change-Log.html#index-C_002dx-v-b-l |
| C-x v b s | Switching Branches [Emacs prefix, active in Spacemacs] | git_branch_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Switching-Branches.html#index-C_002dx-v-b-s |
| C-x v d | VC Directory Mode [Emacs prefix, active in Spacemacs] | git_status | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Directory-Mode.html#index-C_002dx-v-d |
| C-x v g | Old Revisions [Emacs prefix, active in Spacemacs] | git_blame_line | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Old-Revisions.html#index-C_002dx-v-g |
| C-x v h | VC Change Log [Emacs prefix, active in Spacemacs] | vc-region-history (rebound from git_file_log_picker) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Change-Log.html#index-C_002dx-v-h |
| C-x v i | Registering [Emacs prefix, active in Spacemacs] | vc-register (rebound from the git_file_dispatch menu) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Registering.html#index-C_002dx-v-i |
| C-x v l | VC Change Log [Emacs prefix, active in Spacemacs] | git_file_log_picker | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Change-Log.html#index-C_002dx-v-l |
| C-x v r | Revision Tags [Emacs prefix, active in Spacemacs] | vc-retrieve-tag (rebound from git_branch_picker) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Revision-Tags.html#index-C_002dx-v-r |
| C-x v s | Revision Tags [Emacs prefix, active in Spacemacs] | vc-create-tag (rebound from git_branch_picker) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Revision-Tags.html#index-C_002dx-v-s |
| C-x v u | VC Undo [Emacs prefix, active in Spacemacs] | vc-revert (rebound from the git_file_dispatch menu) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Undo.html#index-C_002dx-v-u |
| C-x v v | Basic VC Editing [Emacs prefix, active in Spacemacs] | vc-next-action (rebound from git_status) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-VC-Editing.html#index-C_002dx-v-v |
| C-x v ~ | Old Revisions [Emacs prefix, active in Spacemacs] | view_file_at_rev | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Old-Revisions.html#index-C_002dx-v-_007e |
| C-x w . | Highlight Interactively [Emacs prefix, active in Spacemacs] | toggle_auto_highlight | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-C_002dx-w-_002e |
| C-x w b | Highlight Interactively [Emacs prefix, active in Spacemacs] | hi-lock-write-interactive-patterns (rebound from toggle_auto_highlight) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-C_002dx-w-b |
| C-x w d | Displaying Buffers [Emacs prefix, active in Spacemacs] | `C-x w d` is toggle_window_dedication, a real tri-state on the view: it drops any dedication first and applies the strong flag only when turning it on, echoing emacs's 'Window is {no longer|now|now strongly} dedicated to buffer %s' verbatim; a strongly dedicated window refuses a buffer switch and a weakly dedicated one causes display-buffer-style redirection into an existing other window. The prefix mapping matches emacs now: `(if (consp flag) t ...)` means only a *raw* `C-u` dedicates strongly, while a numeric prefix (or a leading count, the spacemacs/vim keymaps having no `C-u` prefix command) is a non-nil non-t FLAG - which `toggle-window-dedicated-flag`'s own docstring, read out of emacs 31.1, says gives "the same kind of non-strong dedication" as its default value `interactive`. It was the other way round: any leading count dedicated strongly and a bare `C-u` weakly. That docstring also settles the old note's second point: `interactive` is not a third dedication state, it is an ordinary non-strong one. Pinned by `tests/test/emacs_keys.rs::c_x_w_d_dedicates_strongly_only_for_a_raw_prefix`. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Displaying-Buffers.html#index-C_002dx-w-d |
| C-x w h | Highlight Interactively [Emacs prefix, active in Spacemacs] | highlight-regexp | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-C_002dx-w-h |
| C-x w i | Highlight Interactively [Emacs prefix, active in Spacemacs] | hi-lock-find-patterns (rebound from select_regex) | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-C_002dx-w-i |
| C-x w l | Highlight Interactively [Emacs prefix, active in Spacemacs] | highlight-lines-matching-regexp | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-C_002dx-w-l |
| C-x w p | Highlight Interactively [Emacs prefix, active in Spacemacs] | highlight-phrase | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-C_002dx-w-p |
| C-x w r | Highlight Interactively [Emacs prefix, active in Spacemacs] | clear_search_highlight | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html#index-C_002dx-w-r |
| C-x x g | Reverting [Emacs prefix, active in Spacemacs] | spacemacs C-x x g (revert-buffer-quick / Reverting) -> zmax :reload discards changes and reloads the file from disk | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Reverting.html#index-C_002dx-x-g |
| C-x x i | Misc Buffer [Emacs prefix, active in Spacemacs] | insert-buffer: insert another buffer's text at point | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Buffer.html#index-C_002dx-x-i |
| C-x x r | Misc Buffer [Emacs prefix, active in Spacemacs] | rename-buffer: prompts for the new buffer name | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Buffer.html#index-C_002dx-x-r |
| C-x x t | Line Truncation [Emacs prefix, active in Spacemacs] | toggle_soft_wrap | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Line-Truncation.html#index-C_002dx-x-t |
| C-x x u | Misc Buffer [Emacs prefix, active in Spacemacs] | rename-uniquely | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Misc-Buffer.html#index-C_002dx-x-u |
| C-x z | Repeating [Emacs prefix, active in Spacemacs] | `C-x z` is emacs `repeat`: it runs the *last command* again, whatever that was. `repeat_last_command` (commands.rs) replays the command the key dispatcher recorded in LAST_COMMAND — every dispatched command except the repeat itself, so `C-x z z z` keeps repeating the command that came before it. It then arms `repeat`'s own transient map through `emacs_repeat::arm_command_repeat`, which is not gated on `repeat-mode` (emacs installs that map from the command, mode or no mode), so a bare `z` repeats again. The chord used to run `repeat_last_motion`, which could only repeat a motion - an edit before it was not repeatable at all. Pinned by `tests/test/spacemacs_states.rs::c_x_z_repeats_the_last_command`: `x` then `C-x z` then `z` deletes three characters. | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Repeating.html#index-C_002dx-z |
| C-x } | Change Window [Emacs prefix, active in Spacemacs] | resize_view_wider | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Window.html#index-C_002dx-_007d |
| M-x | M-x [Emacs prefix, active in Spacemacs] | M-x | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/M_002dx.html#index-M_002dx |
| M-x list-keyboard-macros RET | Kmacro Menu [Emacs prefix, active in Spacemacs] | same command: M-x list-keyboard-macros | ported | https://www.gnu.org/software/emacs/manual/html_node/emacs/Kmacro-Menu.html#index-M_002dx-list_002dkeyboard_002dmacros-RET |
| C-x 4 C-j | Dired Enter [Emacs prefix, active in Spacemacs] | dired-jump-other-window (no other window: zmax Dired is a modal overlay) | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Enter.html#index-C_002dx-4-C_002dj |
| C-x 4 d | Dired Enter [Emacs prefix, active in Spacemacs] | dired-other-window (no other window: zmax Dired is a modal overlay) | partial | https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-Enter.html#index-C_002dx-4-d |
spacemacs / keybinding (782 keys · 782 ported · 0 partial)
| Key | Action (in editor) | → zmax | Status | Source ref |
|---|---|---|---|---|
| C-TAB/C-S tab | cycle backward/forward through previous visited buffers (i.e. scroll helm buffer list) | `C-TAB` cycles through the buffers this window has visited - `cycle_buffer_backward` rotates `View::docs_access_history` one step per press, so holding it walks back through the ring and round again rather than toggling between the last two (`goto_last_accessed_file`, which the chord used to run). `C-M-TAB` (`cycle_buffer_forward`) is the other direction: spacemacs puts that half on `C-S-TAB`, which in zmax is emacs's own `tab-previous` - ported, and cited by `emacs.keybinding.s_c_tab` - so the ring's forward half takes the free chord instead of displacing a binding that is equally real. Pinned by `tests/test/spacemacs_states.rs::c_tab_cycles_the_visited_buffer_ring`, which visits three files and walks the ring in both directions. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| C-c C-c | toggle display text and image display | doc-view-toggle-display: `C-c C-c` in the DocView overlay leaves the rendered page and shows the document buffer's text again (`:doc-view` renders it back); `C-c C-t` in the same prefix is doc-view-open-text. The evidence is the `C-c` prefix because the report's component-keymap scanner records the prefix key, not the two-key chord | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| C-c C-t | open new buffer with doc's text contents | doc-view C-c C-t: extract the document's text | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| S * | sort by GitHub stars | `S *` sorts by paradox's GitHub-star column. zmax carries no star count per row, so every package ties and the sort falls through to the name predicate — which is what paradox itself shows before its async star fetch fills in | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| S P | sort by package name | `S P` in the package menu sorts by package name; the key already worked and had no command to cite, so the sort now goes through PackageMenuView::sort_by, which both the key and package_menu_sort_by_name call. A second press reverses the order (tabulated-list-sort) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| S S | sort by status (installed, available, etc...) | `S S` sorts by status in package.el's order (available, installed, external, obsolete), ties broken by name; a second press reverses it | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC * | search with the first found tool with default input | search with default input (symbol at point) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC / | search in project with the best search tool available | SPC / (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC 1 | go to window number 1 | go to window 1 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC 2 | go to window number 2 | go to window 2 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC 3 | go to window number 3 | go to window 3 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC 4 | go to window number 4 | go to window 4 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC 5 | go to window number 5 | go to window 5 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC 6 | go to window number 6 | go to window 6 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC 7 | go to window number 7 | go to window 7 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC 8 | go to window number 8 | go to window 8 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC 9 | go to window number 9 | go to window 9 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC ; | comment operator | spacemacs SPC ; -> toggle_comments | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D B | ask for a file and run ediff with its backup file | `SPC D B` now opens a real two-pane ediff session: new `ediff_backup` (zmax-term/src/commands.rs:16157, registered commands.rs:654) resolves the file pair — the buffer's `file~`, or, when the buffer IS a backup, that file against its original — reads the backup as pane A and the buffer text as pane B, and pushes a read-only `ui::merge::DiffView` through the same job callback `ediff_regions_impl` uses (so it also registers in the SPC D s session list). The chord points at it (zmax-term/src/keymap/vim.rs:401). DEVIATION from the plan, deliberate: I did not convert `diff_backup` itself. port/mapping.json records emacs.command.diff_backup as *ported* with the note "runs diff -u between file~ and the file", which is exactly what emacs's diff-backup does; rewriting it would have falsified a ported entry to satisfy this one. Both commands now exist side by side, which is how emacs has them. Upstream: emacs lisp/vc/ediff.el:405-419 ediff-backup — "Run Ediff on FILE and its backup file ... If this file is a backup, `ediff' it with its original", ending in (ediff-files bak ori) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D b 3 | ask for 3 opened buffers and start an ediff session with them | key:normal:space D b 3 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D b b | ask for 2 opened buffers and start an ediff session with them | key:normal:space D b b | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D b p | ask for a buffer or file that contains a patch to apply to a buffer and start an ediff session with the result | SPC D b p binds the existing ediff_patch_buffer: take a patch from a buffer/file, pick the buffer to apply it to, and review the result side by side. Command existed; the chord did not | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D d 3 | ask for 3 directories and run ediff on them comparing files that have the same name in all of them | SPC D d 3 (ediff-directories3): ediff_directories3 prompts for three directories and lists the same-name files present in all three that are not byte-identical | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D d d | ask for 2 directories and run ediff on them comparing files that have the same name in both | SPC D d d (ediff-directories): ediff_directories prompts for two directories and renders the same-name files that differ, plus files unique to each side, into a scratch overview (top-level, like Emacs) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D d r | run ediff on a directory comparing its files with their revisions if under version control | `SPC D d r` opens the session *group* emacs opens: the files under DIR whose working copy differs from HEAD, plus the untracked ones marked unregistered. Choosing an entry opens that file and puts its working copy against `git show HEAD:<file>` in the ediff view - one working-copy-vs-revision session, which is what entering a group entry does in emacs; an unregistered file just opens, having no revision to compare against. An empty answer means the current directory, emacs's own default. The group is DIR's own entries now, not everything beneath it: emacs reads DIR with `directory-files`, which does not recurse, while git reports every path under the argument, so the listing is trimmed to the level emacs shows. Recorded divergences, both editor-wide rather than particular to this command: revisions come from git, which is zmax's only VCS backend (`zmax-vcs` is git), and REGEXP is a Rust regex. Chord pinned by `tests/test/spacemacs_states.rs::spc_d_d_r_lists_the_changed_files_as_a_group`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D f . | start an ediff session between your .spacemacs and its default template in Spacemacs core | SPC D f . diffs zmax's config file against the shipped template, which is the .spacemacs-vs-dotspacemacs-template.el session. Command existed; the chord did not | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D f 3 | ask for 3 files and start an ediff session with them | key:normal:space D f 3 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D f f | ask for 2 files and start an ediff session with them | key:normal:space D f f | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D f p | ask for a buffer or file that contains a patch to apply to a file and start an ediff session with the result | `SPC D f p` runs `ediff_patch_file`, a real port of emacs `ediff-patch-file`: it asks for the patch first (an open buffer's name, else a file to read - `ediff-get-patch-buffer`), then for the file to patch, defaulting to the one the current buffer is visiting, and opens original vs patched in the ediff view where applying writes the reviewed result back. The chord used to run `diff_ediff_patch`, which is emacs's `diff-ediff-patch`: it takes the patch from the buffer it is called in and never asks. Pinned by `tests/test/spacemacs_states.rs::spc_d_f_p_asks_for_the_patch_and_the_file`, which answers both prompts and checks the file on disk is left for the review to write. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D f v | start ediff between versions of a file | key:normal:space D f v | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D h | open ediff documentation within Emacs | Chord: `SPC D h` is now bound (zmax-term/src/keymap/vim.rs:404) — it was palette-only. Content: `ediff_documentation` (zmax-term/src/commands.rs:16073) now tries `render_info_node("(ediff)Top")` first and shows the real Ediff manual, falling back to the hand-written EDIFF_MANUAL constant plus the generated ediff-command listing only when info(1) or the manual is not installed. I did not add the NODE prompt the plan suggested: emacs's ediff-documentation is `(interactive)` with no argument reading — NODE is a Lisp-caller argument only — so prompting would have been an invention. Upstream: emacs lisp/vc/ediff.el ediff-documentation: pops to *info* and calls (info "ediff"), with (Info-goto-node node) only when a NODE argument is passed programmatically | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D m b 3 | start an ediff merge session between 2 buffers and their ancestor | ediff-merge-buffers-with-ancestor -> emerge_buffers_with_ancestor | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D m b b | start an ediff merge session between 2 buffers | ediff-merge-buffers -> emerge_buffers | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D m d 3 | start an ediff merge session between files with the same name in 2 directories and with a 3rd directory containing their ancestor | `SPC D m d 3` opens the session group emacs opens, now including the half it used to drop. `ediff-intersect-directories` returns `(common-list diff-list)`: the names A and B share are merge sessions - three-way where ANCESTOR holds the same name, two-way where it does not, which is emacs's own fallback - and every name that is not in all three directories goes to `ediff-dir-difference-list`, which the group buffer lists but cannot enter. The picker now carries both: sessions first, then the differences marked `only in A` / `only in B` / `only in ancestor`, choosing one of which reports rather than merges. REGEXP filters the whole listing. Pinned by `commands::ediff_group_tests::merge_group_lists_sessions_then_directory_differences` and `::merge_group_regexp_filters_sessions_and_differences`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D m d d | start an ediff merge session between files with the same name in 2 directories | prompts for two directories and an optional file-name regexp and lists the session group: the names present in both (each mergeable with SPC D m f f) and, separately, the names only one side has. Mirrors the existing SPC D m d 3 with-ancestor command | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D m f 3 | start an ediff merge session between 2 files and their ancestor | ediff-merge-files-with-ancestor -> emerge_files_with_ancestor | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D m f f | start an ediff merge session between 2 files | spacemacs SPC D m f f -> merge a file into current buffer -> ediff_merge_file | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D m r 3 | start an ediff merge session between two revisions of a file with a common ancestor | SPC D m r 3 binds the existing ediff_merge_revisions_with_ancestor (two revisions of this file plus their merge base). Command existed; the chord did not | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D m r r | start an ediff merge session between two revisions of a file | SPC D m r r binds the existing ediff_merge_revisions (two revisions of this file, no ancestor). Command existed; the chord did not | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D r l | start an ediff session between two regions to perform a linewise diff (use this for large regions) | spacemacs SPC D r l -> ediff two regions linewise -> ediff_regions | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D r w | start an ediff session between two regions to perform a wordwise diff (use this for small regions) | `SPC D r w` marks region A, then diffs the second region against it at emacs's word granularity. Three parts, all verified against emacs rather than assumed. (1) The four-class `ediff-forward-word` tokenizer reproduces `ediff-wordify`: `emacs -Q --batch` prints `foo|(|bar|)|baz-qux|12|.5,|hello|!` for `foo(bar) baz-qux 12.5, hello!`, including the `12` / `.5,` split, and `$var` staying one token. (2) The panes show the regions as written and the refinement is painted back onto them, as emacs paints it onto the originals rather than showing the wordified scratch text. (3) The difference blocks come from the word stream now, not a line-wise alignment: emacs diffs the wordified copies, so where a line breaks is invisible to the comparison. Checked in emacs - `ediff-wordify` of `"foo bar\nbaz"` and of `"foo\nbar baz"` are `equal`, i.e. zero differences - and `align_wordwise` now agrees, pairing the leftover lines as unchanged instead of reporting a difference. Pinned by `ui::merge::tests::wordwise_alignment_ignores_where_the_lines_break`, `::wordwise_alignment_marks_the_line_holding_the_changed_word` and the three refinement tests beside them. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D s | display ediff registries | prints the *Ediff Registry* buffer. Every SPC D session is built through ui::merge::DiffView::new, which now registers its title, so the listing is the real set of sessions started in this run, newest first — Emacs lists live control buffers, zmax lists started sessions | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D w l | compare linewise the portions of visible text of 2 windows which are selected by clicking | key:normal:space D w l | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC D w w | compare wordwise the portions of visible text of 2 windows which are selected by clicking | key:normal:space D w w | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC F B | open a buffer in another frame (but don't switch) | Reachable by chord now: `C-x 5 C-o` is `display-buffer-other-frame` in emacs's own `ctl-x-5-map` (verified against `emacs -Q --batch`, which prints `C-o -> display-buffer-other-frame`), and both the spacemacs and emacs presets bind it - `SPC F B` stays the fzf `:BTags` picker by design. Two behaviour gaps closed with it: `ui::completers::buffer` now offers `display_name`, the name every command it feeds resolves with (a buffer renamed by `:rename-buffer` used to be suggested under a name its own command refused, and `:buffer-close` now accepts that name too), and the command runs `display-buffer-reuse-window` first, as `display-buffer--other-frame-action` does - a buffer already shown in another frame is reported there instead of making a second frame. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC F D | delete all other frames | SPC F D: delete all other frames | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC F O | open a dired buffer in another frame | SPC F O: open a dired buffer in another frame | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC F b | open a buffer in another frame | `SPC F b` now runs `switch_to_buffer_other_frame` (zmax-term/src/keymap/vim.rs:2275), which arms DisplayTarget::Frame and opens the buffer picker. fzf.vim's `:Buffers` moved to `SPC F E` (keymap/vim.rs:87), a free capital chosen because both `b` (this chord) and `B` (fzf's own `:BTags`) are taken; the comment says exactly that. Same mapping check as SPC F f: key:normal:space F b was cited only by this partial entry. Upstream: spacemacs SPC F b = switch-to-buffer-other-frame (Frames map); emacs switch-to-buffer-other-frame | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC F d | delete the current frame (unless it's the only one) | SPC F d deletes the displayed frame (refusing when it is the only one). The fzf `:Todo` binding that squatted on the key moved to SPC F x | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC F f | open a file in another frame | `SPC F f` now runs `find_file_other_frame` (zmax-term/src/keymap/vim.rs:2274), added to the Frames submap; it arms DisplayTarget::Frame and opens the file picker, which is emacs's own mechanism. fzf.vim's `:Files` moved to `SPC F F` (keymap/vim.rs:85) — a free capital, since `b`/`B` and `f` are claimed — and the block comment that declared SPC F f/b unavailable was rewritten. Checked first that port/mapping.json cites key:normal:space F f from no ported entry (only from this partial one), so nothing was falsified by the move. Upstream: spacemacs SPC F f = find-file-other-frame (Frames map); emacs find-file-other-frame | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC F n | create a new frame | SPC F n: make-frame-command - a real new frame (was layout_create, a workspace, which is not a frame) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC F o | cycle focus between frames | SPC F o cycles focus to the next frame, wrapping. The fzf `:Locate` binding that squatted on the key moved to SPC F u | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC K K | stop recording macro, if no macro is recording then run last macro | kmacro-end-or-call-macro: stops recording, else runs the last macro | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC K c C | set the macro counter | kmacro-set-counter | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC K c a | increment macro counter | spacemacs spc_k_c_a -> increment macro counter | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC K c c | insert the current value of the macro counter | spacemacs spc_k_c_c -> insert macro counter value, then increment | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC K c f | set the display format for the macro counter | kmacro-set-format | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC K e b | assign a key binding to the last macro | SPC K e b is bound and kmacro_bind_to_key (zmax-term/src/commands.rs:52939) now assigns the key live — it parses `@<macro>` and calls keymap_write over KEYMAP_GLOBAL_MODES, so the key replays the last macro from the next press rather than merely reporting what to put in the config. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC K e e | edit last macro in a buffer | edit the last macro in a buffer | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC K e l | edit a macro from lossage information (last 300 executed commands) | edit a macro from lossage | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC K e n | give a name to the last macro | key:normal:space K e n | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC K e r | write the last macro to a register (use SPC r r to call it) | key:normal:space K e r | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC K e s | step by step edit of the last macro | kmacro-step-edit-macro is a real interleaved stepper, and the last two divergences are closed. The full kmacro-step-edit-map is honoured -- y/SPC execute, d/n/DEL/C-d skip and advance, f keeps a key without executing it, !/c run the rest, C-k skips the rest but SAVES the accepted prefix, i/I/r/R/a/A all behave per kmacro.el (I and R consume exactly one key sequence; i and r loop until C-j; a executes the current key before appending; A runs the rest then appends at end), ? toggles the help block without advancing, and an unbound key re-asks at the same index; q and C-g leave already-accepted edits applied while leaving last_kbd_macro unrewritten (kmacro.el:1290-1293); the prompt renders as "Macro: <kept> [<pending>] <future>" with "[n/m] : Next command: <key>" and the response list in the info body. TAB (act-repeat) now continues on the *command*, as emacs does - it binds C-n and <down> both to next-line and carries on across the pair - by resolving each pending key through the live keymap and comparing command identity, falling back to keystroke equality for a key that opens a prefix map. And recording no longer keeps the terminating C-x of `C-x )`: the whole terminator chord is trimmed, its length read back out of the keymap (one key for `Q`, two for `C-x )`), so `C-x ( x x C-x )` records the two keys emacs records instead of three. Pinned by `tests/test/spacemacs_states.rs::kmacro_step_edit_tab_repeats_on_the_command_not_the_key` and `::kmacro_recording_drops_the_whole_terminator_chord`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC K k | start recording macro, if already recording then insert the macro counter | kmacro-start-macro-or-insert-counter | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC K r L | view head macro in ring | key:normal:space K r L | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC K r d | delete head macro in ring | key:normal:space K r d | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC K r l | run second macro in ring | SPC K r l binds the existing kmacro_call_ring_2nd (run the second macro in the ring). Command existed; the chord did not | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC K r n | cycle to next macro in ring | key:normal:space K r n | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC K r p | cycle to previous macro in ring | key:normal:space K r p | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC K r s | swap the first two macros in ring | key:normal:space K r s | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC K v | view last macro string in minibuffer | kmacro_ring_view shows the last macro's keys | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC SPC | Emacs (M-x) | spacemacs SPC SPC -> command_palette | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC T | display =~= in the fringe on empty lines | the item's name is a truncated `SPC T ~`; same binding as spacemacs.keybinding.spc_tU_tilde — sets/clears `fillchars` `eob:~`, which draws the ~ on the rows past the end of the buffer | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC T B | toggle frame background transparency | SPC T B (toggle frame background transparency): :toggle transparent-background, same terminal background-transparency toggle | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC T F | toggle frame fullscreen | SPC T F binds the existing toggle_frame_fullscreen; the frame's fullscreen parameter round-trips, with no visible effect on a tty exactly as in Emacs. Command existed; the chord did not | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC T M | toggle frame maximize | SPC T M binds the existing toggle_frame_maximized; same tty semantics as SPC T F. Command existed; the chord did not | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC T T | toggle frame transparency (transient state) | SPC T T (toggle frame transparency): :toggle transparent-background flips the editor's transparent-background option, the terminal's only kind of transparency (the GUI window then shows through) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC T f | toggle fringe display | SPC T f (fringe-mode): toggle_fringe hides/shows the whole gutter column strip (the terminal fringe), stashing and restoring the gutter layout | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC T m | toggle menu bar | SPC T m runs menu_bar_mode, which toggles whether the menu bar is displayed; F10 / M-` still open it | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC T n | cycle to next theme | SPC T n -> space T n | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC T p | change to previous theme | SPC T p -> space T p | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC T s | select an installed theme | SPC T s -> space T s | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC T t | toggle tool bar | SPC T t runs tool_bar_mode; the state round-trips, and as on a tty in Emacs there is nothing to draw | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC T ~ | display tilde in fringe on empty lines | sets and clears the `eob:~` item of vim's `fillchars`, which is what draws the rows past the end of the buffer; zmax's renderer already honoured that option and nothing toggled it | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC TAB | switch to alternate buffer in the current window (switch back and forth) | spacemacs SPC TAB -> goto_last_accessed_file | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC a c | calc-dispatch | spacemacs spc_a_c -> calc-dispatch | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/doc/DOCUMENTATION.org |
| SPC a k | launch paradox | `SPC a k` opens the package listing (zmax's Package Menu, paradox's role in the layer). The chord was zmax's AI shell-command generator, which cursor.edit.terminal cited; that capability is unchanged and keeps a chord of its own at `SPC a K`, so nothing was lost to make room. Pinned by `tests/test/spacemacs_states.rs::spc_a_k_opens_the_package_listing`, which resolves both chords through the shipped keymap. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC a t r d | deer / dirvish single column | spacemacs spc_a_t_r_d -> deer single column (file explorer) | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/layers/+tools/ranger/README.org |
| SPC a t r r | launch ranger / dirvish full layout | spacemacs spc_a_t_r_r -> ranger full layout (file explorer) | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/layers/+tools/ranger/README.org |
| SPC b . | initiate transient state | SPC b . initiates the buffer transient state (sticky node) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b . 1..9 | move current buffer to nth window | key:normal:space b . 1 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b . C-1..C-9 | switch focus to nth window | key:normal:space b . C-1 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b . C-d | bury current buffer | bury current buffer | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b . M-1..M-9 | swap current buffer with nth window | key:normal:space b . A-1 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b . N | go to previous buffer (avoid useless buffers) | SPC b . N | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b . b | list all buffers with helm/ivy (avoid useless buffers) | SPC b . b | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b . d | kill current buffer (transient state) | SPC b . d | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b . n | go to next buffer (avoid useless buffers) | SPC b . n | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b . o | switch focus to other window | SPC b . o | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b . p | go to previous buffer (avoid useless buffers) | SPC b . p | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b . q | quit transient state | key:normal:space b . q | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b . x | kill buffer and window | SPC b . x | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b . z | recenter buffer in window | SPC b . z | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b C-D | kill buffers using a regular expression | kill buffers by regex -> kill_buffers_by_regex | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b C-d | kill other buffers | spacemacs SPC b C-d: bound in the SPC leader (buffer-close-others) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b D | kill a visible buffer using ace-window | SPC b D (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b H | open or select the *Help* buffer | spacemacs spc_b_hU -> Help buffer (inline Help browser) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b M | kill all buffers matching the regexp | key:normal:space b M | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b N C-i | create an indirect buffer from an existing opened buffer | indirect buffer from existing -> clone_indirect_from_buffer (buffer picker opens chosen buffer in a shared-doc split) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b N I | create an indirect buffer that is clone of currently opened buffer, and open it in other window | indirect buffer clone of current -> clone_indirect_buffer | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b N h | create new empty buffer in a new window on the left | new buffer window left -> hsplit_new | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b N i | create an indirect buffer that is clone of currently opened buffer | make-indirect-buffer -> clone_indirect_buffer (split = new view of same shared Document) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b N j | create new empty buffer in a new window at the bottom | new buffer window below -> hsplit_new | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b N k | create new empty buffer in a new window above | new buffer window above -> hsplit_new | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b N l | create new empty buffer in a new window below | new buffer window right -> hsplit_new | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b N n | create new empty buffer in current window | new buffer current window -> :new | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b P | copy clipboard and replace buffer (useful when pasting from a browser) | SPC b P | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b R | revert the current buffer (reload from disk) | spacemacs SPC b R -> reload | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b W | go to workspace and window by buffer | goto-buffer-window -> goto_buffer_window (focus existing window showing the buffer, else open) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b Y | copy whole buffer to clipboard (useful when copying to a browser) | spacemacs SPC b Y -> select_all | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b b | switch to a buffer | spacemacs SPC b b -> buffer_picker | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b d | kill the current buffer (does not delete the visited file) | spacemacs SPC b d -> buffer-close | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b e | erase the content of the buffer (ask for confirmation) | spacemacs SPC b e: bound in the SPC leader (reload) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b h | open *spacemacs* home buffer | spacemacs spc_b_h -> home buffer (dashboard) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b m | open *Messages* buffer | spacemacs SPC b m -> changed_file_picker | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b n | switch to next buffer avoiding buffers matching spacemacs-useless-buffers-regexp | spacemacs SPC b n -> goto_next_buffer | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b p | switch to previous buffer avoiding buffers matching spacemacs-useless-buffers-regexp | spacemacs SPC b p -> goto_previous_buffer | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b s | switch to the *scratch* buffer (create it if needed) | spacemacs SPC b s -> new | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b u | reopen the most recently killed file buffer | spacemacs spc_b_u -> reopen most recently killed buffer | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b w | toggle read-only (writable state) | spacemacs spc_b_w -> toggle read-only (writable state) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC b x | kill the current buffer and window (does not delete the visited file) | spacemacs SPC b x: bound in the SPC leader (buffer-close) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC c C | compile | spacemacs spc_c_cU -> compile (run active config) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC c L | invert comment lines | SPC c L | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC c P | invert comment paragraphs | spacemacs spc_c_pU -> invert comment paragraphs | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC c T | invert comment to line | invert comment to line -> invert_comment_to_line (per-line toggle over the range) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC c Y | invert comment and yank | SPC c Y | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC c c | use helm-make via projectile | spacemacs SPC c c -> toggle_comments | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC c d | close compilation window | close compilation window -> wclose | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC c h | hide/show comments | SPC c h | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC c k | kill compilation | key:normal:space c k | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC c l | comment lines | spacemacs SPC c l -> toggle_line_comments | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC c m | helm-make | spacemacs spc_c_m -> pick build/run target (helm-make) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC c p | comment paragraphs | spacemacs SPC c p: SPC leader -> toggle_comments (approximate) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC c r | recompile | spacemacs spc_c_r -> recompile (re-run last) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC c t | comment to line | comment-to-line -> comment_to_line (prompt for target line, line-comment the range) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC c y | comment and yank | comment and yank -> yank+toggle_comments | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC e . | error transient state | spacemacs SPC e . -> goto_last_diag | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC e c | clear all errors | clear all errors -> clear_diagnostics (clears doc diagnostics per language server; flycheck-clear semantics) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC e h | describe a flycheck checker | describe flycheck checker -> describe_diagnostics_checker (lang servers + advertised features) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC e l | toggle the display of the flycheck list of errors/warnings | spacemacs SPC e l -> diagnostics_picker | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC e n | go to the next error | spacemacs SPC e n -> goto_next_diag | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC e p | go to the previous error | spacemacs SPC e p -> goto_prev_diag | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC e v | verify flycheck setup (useful to debug 3rd party tools configuration) | verify flycheck setup -> diagnostics_verify_setup (lang servers + diag providers + counts) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC e y | copy each error at cursor position into kill ring | copy error at point -> :yank-diagnostic | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f A | open a file and replace the current buffer with the new file | find-file-and-replace-buffer -> find_file_replace_buffer (open w/ Action::Replace, close old buffer) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f C d | convert file from unix to dos encoding | unix->dos -> :line-ending crlf | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f C u | convert file from dos to unix encoding | dos->unix -> :line-ending lf | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f D | delete a file and the associated buffer without confirmation | spacemacs spc_f_dU -> delete file + buffer | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/doc/DOCUMENTATION.org |
| SPC f E | open a file with elevated privileges (sudo edit) | SPC f E now opens the file through `sudo cat` (and saves back through `sudo tee` with :sudo-write); the JetBrains reveal-in-Finder binding that held the key moved to SPC f O | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f F | try to open the file under point | open file under point -> goto_file | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/doc/DOCUMENTATION.org |
| SPC f J | open a junk file, in mode determined by the file extension (defaulting to fundamental mode) | key:normal:space f J | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/doc/DOCUMENTATION.org |
| SPC f L | Locate a file (using locate) | helm-locate -> locate_file (dynamic picker over system locate, mdfind fallback) | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/doc/DOCUMENTATION.org |
| SPC f R | rename the current file | spacemacs SPC f R -> move | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f S | save all files | SPC f S (already bound) | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/doc/DOCUMENTATION.org |
| SPC f b | go to file bookmarks | file bookmarks -> marks picker | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f c | copy current file to a different location | key:normal:space f c | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f d | delete a file and the associated buffer (ask for confirmation) | spacemacs SPC f d -> file_explorer_in_current_buffer_directory | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f e C-e | reinitialize the /.spacemacs.env file by importing system and shell environment variables | reinit .spacemacs.env -> reimport_shell_env (run login shell env, set_var into editor process) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f e D | open ediff buffer of ~/.spacemacs and dotspacemacs-template.el | SPC f e D opens the same config-vs-shipped-template diff SPC D f . opens, which is the ~/.spacemacs vs dotspacemacs-template.el session | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/doc/DOCUMENTATION.org |
| SPC f e E | reload the environment variables by executing dotspacemacs/user-env | reload env via user-env -> reimport_shell_env | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/doc/DOCUMENTATION.org |
| SPC f e I | open the early-init.el | opens <config-dir>/init.toml, the file zmax's loader reads before the editor comes up — the early-init.el slot — creating it with a comment header on first use. Ported as zmax's own pre-config rather than Emacs's early-init.el | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/doc/DOCUMENTATION.org |
| SPC f e R | resync the dotfile with spacemacs | resync dotfile -> :config-reload | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f e U | update packages | runs `:zmax-native update`, which re-resolves and reinstalls every installed zmax plugin from its recorded source (unloading the live cdylib first). Ported to zmax's own package manager rather than ELPA, which zmax has no analogue of | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f e c | recompile all elpa packages | runs `:zmax-native recompile` (new verb): rebuilds every installed plugin from the copy already in the store without re-fetching, dropping the stale cdylib and unloading it first. The zmax equivalent of recompiling elpa | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f e d | open the spacemacs dotfile (/.spacemacs) | SPC f e d | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f e e | open the /.spacemacs.env file where environment variables are set or goes to dotspacemacs/user-env | user-env / .spacemacs.env -> show_environment (display inherited env vars in scratch) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f e i | open the all mighty init.el | open init.el -> :config-open (opens the user config.toml, the zmax init file) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f e l | locate an Emacs library | prompts for a library name and reports the file it resolves to, searching ~/.zmax/elpa (top level and one package directory deep) then the config directory; the path is also copied to the clipboard register. Errors with Emacs's `Can't find library:` when nothing matches | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f e v | display and copy the spacemacs version | display and copy version -> copy_version | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f f | open file | spacemacs SPC f f -> file_picker | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f h | open binary file with hexl (a hex editor) | key:normal:space f h | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f j | jump to the current buffer file in dired | spacemacs SPC f j -> file_explorer_in_current_buffer_directory | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f l | open file literally in fundamental mode | find-file-literally -> open_file_literally (open then set_language(None): no syntax) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f o | open a file using the default external program | open external -> goto_file | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f r | open a recent file | SPC f r (already bound) | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/doc/DOCUMENTATION.org |
| SPC f s | save a file | spacemacs SPC f s -> write | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f t | toggle file tree side bar using Treemacs | spacemacs SPC f t -> file_explorer | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f v d | add a directory variable | SPC f v d: add-dir-local-variable - set a variable for the whole tree in .dir-locals.el | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f v f | add a local variable to the current file | add-file-local-variable (prompts for VAR VALUE) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f v p | add a local variable to the first line of the current file | add-file-local-variable-prop-line | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f y C | show and copy current file path relative to the project root with line and column number | SPC f y C | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/doc/DOCUMENTATION.org |
| SPC f y D | show and copy current directory path relative to the project root | SPC f y D | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/doc/DOCUMENTATION.org |
| SPC f y L | show and copy current file path relative to the project root with line number | SPC f y L | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/doc/DOCUMENTATION.org |
| SPC f y N | show and copy current file name without extension in the minibuffer | SPC f y N | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/doc/DOCUMENTATION.org |
| SPC f y Y | show and copy current file path relative to the project root | SPC f y Y | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/doc/DOCUMENTATION.org |
| SPC f y c | show and copy current file absolute path with line and column number in the minibuffer | SPC f y c | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f y d | show and copy current directory absolute path in the minibuffer | SPC f y d | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f y l | show and copy current file absolute path with line number in the minibuffer | SPC f y l | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f y n | show and copy current file name with extension in the minibuffer | SPC f y n | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC f y y | show and copy current file absolute path in the minibuffer | SPC f y y | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC g H c | clear commit highlights | smeargle-clear: takes the commit-age tint off. SPC g H became the smeargle prefix; the call-hierarchy command that held the bare key moved to SPC g O | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g H h | highlight regions by age of commits | smeargle-commits: ranks the commits that touched the file oldest-first from git blame and paints each visible line's whole-line range with the theme scope for its rank (6 bands), so the oldest and newest commits sit at the ends of the palette; uncommitted lines stay unpainted | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g H t | highlight regions by last updated time | smeargle: same painting, but the band is the line's wall-clock age in fixed bands (day, week, month, quarter, year, older), so two files compare against each other. Only the visible line range is turned into ranges each frame | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g L | open magit-repolist | magit-repolist -> repo commit log picker | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g M | display the last commit message of the current line | spacemacs spc_g_mU -> last commit message of current line | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g S | stage current file | spacemacs spc_g_sU -> stage current file | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g U | unstage current file | spacemacs spc_g_uU -> unstage current file | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g b | open a magit blame | key:normal:space g b | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g f d | diff for current file | key:normal:space g f d | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g f f | view a file at a specific branch or commit | view file at branch/commit -> view_file_at_rev (git show <rev>:<file> in scratch buffer) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g f l | commits log for current file | commits log for current file -> git_file_log_picker | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g f m | magit dispatch popup for file operations | magit-file-dispatch -> git_file_dispatch (on_next_key transient: stage/unstage/diff/log/blame/status) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g i | initialize a new git repository | key:normal:space g i | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g l C | create link to the file at a commit and copy it | spacemacs spc_g_l_cU -> copy link at a commit | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g l L | create a link to the file highlighting the selected lines | spacemacs spc_g_l_lU -> copy link to selected lines | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g l P | create a link with permalink highlighting selected lines | spacemacs spc_g_l_pU -> copy permalink to lines | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g l c | browse to the current file at a commit | spacemacs spc_g_l_c -> browse to file at a commit | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g l l | browse to file at current lines position | spacemacs spc_g_l_l -> browse to file at current line | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g l p | browse to file at current lines position using permalink | spacemacs spc_g_l_p -> browse using permalink | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g m | magit dispatch popup | spacemacs spc_g_m -> magit dispatch (focus Git panel) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g s | open a magit status window | spacemacs spc_g_s -> git status (focus Git panel) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g t | launch the git time machine | spacemacs spc_g_t -> git time machine (file history) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC g u | select a remote repository | the git README's "use the universal argument SPC u to select a remote repository" for the SPC g l link commands: SPC u SPC g l prompts over `git remote` and records the choice, and current_line_permalink now builds its URL from that remote instead of hardcoding origin | ported | https://github.com/syl20bnr/spacemacs/blob/develop/layers/+source-control/git/README.org |
| SPC h . | search dotfile variables | search dotfile variables -> config_variable_search (picker over editor config vars; copies path) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h I | Open Spacemacs GitHub issue page with pre-filled information | SPC h I opens the pre-filled new-issue URL (description / reproduction sections plus a System Info block). Command existed; the chord did not | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h P k | stop the profiler | SPC h P k: profiler_stop disables the profiler, keeping its samples for the report | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h P r | display the profiler report | SPC h P r: profiler_report renders per-command call count / total ms / avg µs, slowest first, into a scratch buffer | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h P s | start the profiler | SPC h P s: profiler_start resets and enables the command profiler, which instruments MappableCommand::execute (the single dispatch point) to time every command run | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h P w | write the report to file | SPC h P w: profiler_write_report prompts for a path and writes the profiler report text to it | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h SPC | discover Spacemacs documentation, layers and packages | discover docs -> command palette | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h T v | access evil-tutor lessons | SPC h T v -> space h T v | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h d F | describe a face | prompts for a face — zmax's faces are the active theme's scopes — and shows its resolved foreground, background, attributes and underline in a *Help*-style scratch buffer, naming the theme and the `:highlight` line that changes it. An unknown name is refused | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h d K | describe a keymap | describe_keymap | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h d P | describe a package (Spacemacs layer information) | `SPC h d P` now runs `describe_package` (zmax-term/src/keymap/vim.rs:425), which prompts for a package name and prints its version, home page, keywords and dependencies (commands.rs:73000-ish body, registered commands.rs:1311) — emacs's `C-h P`. It used to run `package_search`, whose own registry doc says it is spacemacs's SPC h p; that chord keeps it (keymap/vim.rs:2532). The two comment lines that justified the picker were replaced with the reason for the repoint. Upstream: emacs describe-package (C-h P) — reads a package name and describes that package; spacemacs SPC h d P maps to describe-package | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h d T | describe a theme | describe a theme -> :describe-theme | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h d a | describe current expression under point | describe expression -> hover | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h d b | describe bindings | describe bindings -> command palette | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h d c | describe current character under point | describe char -> :character-info | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h d f | describe a function | describe function -> command palette | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h d k | describe a key | describe key -> command palette | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h d l | copy last pressed keys that you can paste in gitter chat | describe-last-keys -> copy_last_keys (bounded last-keys ring in Editor; copies to clipboard) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h d m | describe current modes | describe-mode -> describe_current_modes (mode/language/encoding/line-ending/indent/servers) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h d p | describe a package (Emacs built-in function) | describe-package -> describe_language_package (language config: grammar/filetypes/comments/formatter/servers) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h d s | copy system information that you can paste in gitter chat | describe-system-info -> copy_system_info (version/OS/arch/term to clipboard) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h d t | describe text properties | describe-text-properties -> describe_text_properties (tree-sitter node stack + char at point) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h d v | describe a variable | describe variable -> command palette | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h d x | describe an evil ex-command | describe ex-command -> command palette | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h f | discover the FAQ | discover the FAQ -> browse_faq (embedded FAQ.md shown in scratch) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h i | search in info pages with the symbol at point | helm-info-at-point -> info_search (info --apropos picker seeded at point, renders node to scratch) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h k | show top-level bindings with which-key | spacemacs SPC h k: bound in the SPC leader (command_palette) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h l | search layers | search layers -> layer_search (picker over zmax capability areas, the baked-in analogue of Spacemacs layers) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h m | search available man pages | search man pages -> man_page_search (apropos dynamic picker, renders man into scratch) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h n | browse emacs news | view-emacs-news -> browse_news (embedded CHANGELOG.md shown in scratch) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h p | search packages | search packages -> package_search (picker over configured language packages; describes the chosen one) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h r | search documentation files | search documentation -> command palette | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC h t | search toggles | spacemacs SPC h t: bound in the SPC leader (tutor) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC i U 1 | insert UUIDv1 (use universal argument to insert with CID format) | spacemacs spc_i_u_1 -> insert time-based UUIDv1 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC i U 4 | insert UUIDv4 (use universal argument to insert with CID format) | spacemacs spc_i_u_4 -> insert random UUIDv4 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC i U U | insert UUIDv4 (use universal argument to insert with CID format) | spacemacs spc_i_u_u -> insert random UUIDv4 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC i l l | insert lorem-ipsum list | spacemacs spc_i_l_l -> insert lorem-ipsum list | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC i l p | insert lorem-ipsum paragraph | spacemacs spc_i_l_p -> insert lorem-ipsum paragraph | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC i l s | insert lorem-ipsum sentence | spacemacs spc_i_l_s -> insert lorem-ipsum sentence | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC i p 1 | insert simple password | spacemacs spc_i_p_1 -> insert simple password | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC i p 2 | insert stronger password | spacemacs spc_i_p_2 -> insert stronger password | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC i p 3 | insert password for paranoids | spacemacs spc_i_p_3 -> insert password for paranoids | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC i p n | insert a numerical password | spacemacs spc_i_p_n -> insert numerical password | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC i p p | insert a phonetically easy password | spacemacs spc_i_p_p -> insert phonetic password | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC i u | Search for Unicode characters and insert them into the active buffer. | helm-unicode -> unicode/digraph picker | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j $ | go to the end of line (and set a mark at the previous location in the line) | spacemacs SPC j $ -> goto_line_end | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j ( | jump to first unbalanced parentheses | jump to unbalanced paren | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j + | format the marked region or entire buffer also cleanup whitespace | format region/buffer (alt) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j 0 | go to the beginning of line (and set a mark at the previous location in the line) | spacemacs SPC j 0 -> goto_line_start | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j = | format the marked region or entire buffer | format region/buffer | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j D | jump to a listing of the current directory (other window) | SPC j D | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j I | jump to a definition in any buffer (imenu) | imenu -> workspace symbol picker | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j S | split a quoted string or s-expression, insert a new line and auto-indent | key:normal:space j S | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j U | select a URL in the current buffer and follow it | SPC j U | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j b | go back to the previous location (before the jump) | spacemacs SPC j b -> jump_backward | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j c | go to last change | spacemacs SPC j c -> goto_last_change | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j d | jump to a listing of the current directory | spacemacs SPC j d -> file_explorer_in_current_buffer_directory | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j f | jump to the definition of an Emacs Lisp function | jump to elisp function def -> goto_definition | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j i | jump to a definition in buffer (imenu) | spacemacs SPC j i -> symbol_picker | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j j | initiate avy jump char | spacemacs SPC j j -> jumplist_picker | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j k | jump to next line and indent it using auto-indent rules | spacemacs SPC j k -> move_visual_line_down | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j l | initiate avy jump line | avy jump line -> goto_word | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j n | split the current line at point, insert a new line and auto-indent | spacemacs SPC j n -> split-line | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j o | split the current line at point but let point on current line | SPC j o | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j s | split a quoted string or s-expression in place | key:normal:space j s | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j u | jump to a URL in the current buffer | spacemacs SPC j u: bound in the SPC leader (goto_file) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j v | jump to the definition/declaration of an Emacs Lisp variable | jump to elisp variable def -> goto_definition | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC j w | initiate avy jump word | avy jump to word -> goto_word | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k $ | go forward to the end of current sexp | spacemacs SPC k $: tree-sitter sexp -> move_parent_node_end | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k % | go to other paren of the same pair | spacemacs spc_k_x -> go to other paren of the pair | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k ( | insert sexp before current one | spacemacs spc_k_x_2 -> insert sexp before current | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k ) | insert sexp after current one | spacemacs spc_k_x_3 -> insert sexp after current | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k 0 | go backward to the beginning of current sexp | spacemacs SPC k 0: tree-sitter sexp -> move_parent_node_start | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k : | ex command | spacemacs spc_k_x_4 -> ex command | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k B | barf backward | spacemacs spc_k_bU -> barf backward | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k C-r | redo | SPC k C-r | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k C-v | switch to visual state and begin block-wise selection | SPC k C-v | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k Ds | delete symbol backward | spacemacs spc_k_dUs -> delete symbol backward | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k Dw | delete word backward | spacemacs spc_k_dUw -> delete word backward | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k Dx | delete sexp backward | spacemacs spc_k_dUx -> delete sexp backward | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k E | splice, killing backward | spacemacs spc_k_eU -> splice, killing backward | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k H | go backward to previous sexp | spacemacs spc_k_hU -> backward to previous sexp | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k I | go back to beginning of current expression and switch to insert state | spacemacs SPC k I: tree-sitter sexp -> move_parent_node_start | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k I (insert) | switch to insert state at beginning of current line | spacemacs spc_k_iU_xinsertx -> begin of expression + insert | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k J | join sexp | spacemacs spc_k_jU -> join sexp (join lines) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k L | go forward to next sexp | spacemacs spc_k_lU -> forward to next sexp | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k P | paste before | spacemacs spc_k_pU -> paste before | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k S | slurp backward | spacemacs spc_k_sU -> slurp backward | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k U | go "up": to parent sexp backward | spacemacs SPC k U: tree-sitter sexp -> expand_selection | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k V | switch to visual state and begin line-wise selection | spacemacs spc_k_vU -> line-wise visual select | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k W | unwrap sexp | spacemacs spc_k_wU -> unwrap (splice) sexp | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k ` k | hybrid delete sexp | spacemacs spc_k_bt_k -> hybrid delete sexp | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k ` p | hybrid push: <point>as bs -> <point>bs as | spacemacs spc_k_p -> hybrid push (swap) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k ` s | hybrid slurp forward | spacemacs spc_k_bt_s -> hybrid slurp forward | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k ` t | hybrid transpose | spacemacs spc_k_bt_t -> hybrid transpose | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k a | absorb: (a (bs <point> ..)) -> ((bs a <point> ..)) | key:normal:space k a | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k b | barf forward: (a bs c) -> (a bs) c | spacemacs spc_k_b -> barf forward | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k c | convolute: (as (bs <point> ..)) -> (bs (as <point> ..)) | key:normal:space k c | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k ds | delete symbol | SPC k ds | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k dw | delete word | SPC k dw | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k dx | delete sexp: (as <point> a ..) -> (as <point> ..) | SPC k dx | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k e | splice, killing forward: (as (bs <point> cs) ds) -> (as bs ds) | spacemacs spc_k_e -> splice, killing forward | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k h | go backward to previous symbol | spacemacs SPC k h: tree-sitter sexp -> select_prev_sibling | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k i | switch to insert state | spacemacs spc_k_i_2 -> switch to insert state | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k j | go forward to next closing parenthesis | spacemacs SPC k j: tree-sitter sexp -> shrink_selection (approximate) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k k | go backward to previous opening parenthesis | spacemacs SPC k k: tree-sitter sexp -> expand_selection (approximate) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k l | go forward to next symbol | spacemacs SPC k l: tree-sitter sexp -> select_next_sibling | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k p | paste after | spacemacs spc_k_p_2 -> paste after | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k r | raise: (as <point> b ..) -> <point>b | spacemacs spc_k_r -> raise sexp | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k s | slurp forward: a (bs) c -> a (bs c) | spacemacs spc_k_s -> slurp forward | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k t | transpose: (as <point> bs) -> (bs <point> as) | spacemacs spc_k_t -> transpose sexps | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k u | undo | spacemacs spc_k_u_2 -> undo | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k v | switch to visual state and begin character-wise selection | spacemacs SPC k v: tree-sitter sexp -> select_mode | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k w | wrap a symbol with parenthesis | spacemacs SPC k w: tree-sitter sexp -> wrap_sexp | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC k y | copy expression | spacemacs SPC k y: tree-sitter sexp -> expand_selection | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l | initiate transient state | SPC l is already the sticky Layouts transient state (keymap/vim.rs, `"l" => { "Layouts / LSP" sticky=true`): n/p/C-l/C-h and the digits repeat under bare presses and RET leaves. No code change; the chord had no mapping entry. Evidence cites a leaf inside the state because the report records leaves, not prefixes | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l 0..9 | switch to nth layout | key:normal:space l 1 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l A | add all the buffers from another layout in the current one | add buffers from another layout -> layout_add_buffers | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l C-0..C-9 | switch to nth layout and keep the transient state active | switch to nth layout (transient) -> layout_goto C-1..C-9 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l C-h | previous layout in list | key:normal:space l C-h | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l C-l | next layout in list | key:normal:space l C-l | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l D | delete the other layouts and keep their buffers | key:normal:space l D | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l L | load layouts from file | key:normal:space l L | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l N | previous layout in list | key:normal:space l N | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l R | rename current layout | SPC l R -> layout_rename | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l TAB | switch to the latest layout | key:normal:space l tab | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l X | kill other layouts with their buffers | key:normal:space l X | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l a | add a buffer to the current layout | SPC l a (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l b | select a buffer in the current layout | key:normal:space l b | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l d | delete the current layout and keep its buffers | key:normal:space l d | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l h | go to default layout | key:normal:space l h | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l l | select/create a layout | key:normal:space l l | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l n | next layout in list | key:normal:space l n | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l o | open a custom layout | SPC l o -> layout_load | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l p | previous layout in list | key:normal:space l p | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l r | remove current buffer from layout | SPC l r (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l s | save layouts to file | save layouts to file | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l t | display a buffer without adding it to the current layout | key:normal:space l t | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l w | initiate transient state | key:normal:space l w w | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l w 0..9 | switch to nth workspace | key:normal:space l w 1 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l w C-0..C-9 | switch to nth workspace and keep the transient state active | switch to nth workspace (transient) -> layout_goto C-1..C-9 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l w N | switch to previous workspace | key:normal:space l w N | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l w R | rename current workspace | SPC l w R -> layout_rename | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l w TAB | switch to last active workspace | key:normal:space l w tab | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l w d | close current workspace | key:normal:space l w d | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l w h | switch to previous workspace | key:normal:space l w h | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l w l | switch to next workspace | key:normal:space l w l | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l w n | switch to next workspace | key:normal:space l w n | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l w p | switch to previous workspace | key:normal:space l w p | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l w w | switch to tagged workspace | key:normal:space l w w | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC l x | kill current layout with its buffers | key:normal:space l x | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC m , | commit changes with the entered message (git commit buffer) | `SPC m ,` is the same action as `SPC m c` (two names for one command). zmax's commit buffer is `ui::magit::MagitCommit`, and it is modal now, as spacemacs's is: `git-commit-mode` opens in evil insert state, `ESC` leaves for normal state (it used to abandon the commit), and the `SPC m` major-mode leader is live there. Bound inside the component rather than in a keymap preset, so the evidence is the command; the chord is pinned by `tests/test/spacemacs_states.rs::spc_m_c_commits_from_the_commit_buffer`, which drives `:magit`, `c`, types a message, `ESC`, `SPC m c` and reads the commit back out of git. `C-c C-c` / `C-c C-k` keep working in both states. | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/layers/+source-control/git/README.org |
| SPC m C | checkout pull request (not for issues) (forge) | forge-checkout-pullreq: `C` runs `gh pr checkout <n>` on the selected topic, and says so when the topic is an issue rather than a pull request | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/layers/+source-control/git/README.org |
| SPC m D | delete comment under cursor (forge) | forge-delete-comment: `D` inside a topic's post list deletes the post under the cursor (`gh api -X DELETE .../issues/comments/<id>`), asking for a second `D` to confirm; the opening post cannot be deleted, matching forge | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/layers/+source-control/git/README.org |
| SPC m M | create mark to use with topics (forge) | forge-create-mark: `M` prompts for a name and adds it to the repo's known-mark list without putting it on a topic | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/layers/+source-control/git/README.org |
| SPC m a | discard message and abort the commit (git commit buffer) | `SPC m a` discards the message and leaves without committing (`with-editor-cancel`). zmax's commit buffer is `ui::magit::MagitCommit`, and it is modal now, as spacemacs's is: `git-commit-mode` opens in evil insert state, `ESC` leaves for normal state (it used to abandon the commit), and the `SPC m` major-mode leader is live there. Bound inside the component rather than in a keymap preset, so the evidence is the command; the chord is pinned by `tests/test/spacemacs_states.rs::spc_m_c_commits_from_the_commit_buffer`, which drives `:magit`, `c`, types a message, `ESC`, `SPC m c` and reads the commit back out of git. `C-c C-c` / `C-c C-k` keep working in both states. | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/layers/+source-control/git/README.org |
| SPC m b | browse topic (open in web browser) (forge) | forge-browse-topic: `b` in the forge topic list opens the selected issue/PR's URL in the system browser. Spacemacs's SPC m is the major-mode leader; in zmax the topic list is a modal component that owns its keys, so the letter lives in that map | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/layers/+source-control/git/README.org |
| SPC m c | commit changes with the entered message (git commit buffer) | `SPC m c` runs the commit (`with-editor-finish`). zmax's commit buffer is `ui::magit::MagitCommit`, and it is modal now, as spacemacs's is: `git-commit-mode` opens in evil insert state, `ESC` leaves for normal state (it used to abandon the commit), and the `SPC m` major-mode leader is live there. Bound inside the component rather than in a keymap preset, so the evidence is the command; the chord is pinned by `tests/test/spacemacs_states.rs::spc_m_c_commits_from_the_commit_buffer`, which drives `:magit`, `c`, types a message, `ESC`, `SPC m c` and reads the commit back out of git. `C-c C-c` / `C-c C-k` keep working in both states. | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/layers/+source-control/git/README.org |
| SPC m d | toggle draft pull request (forge) | forge-toggle-draft: `d` flips the selected pull request between draft and ready via `gh pr ready` / `gh pr ready --undo`, refusing on issues | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/layers/+source-control/git/README.org |
| SPC m e | edit topic body (forge) | forge-edit-post: `e` opens the multi-line body editor over the selected topic, pre-filled with its current body | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/layers/+source-control/git/README.org |
| SPC m e $ | go to end of line and evaluate last sexp | key:normal:space m e $ | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC m e b | evaluate buffer | key:normal:space m e b | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC m e c | evaluate current form (a def or a set) | key:normal:space m e c | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC m e e | evaluate last sexp | key:normal:space m e e | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC m e f | evaluate current defun | key:normal:space m e f | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC m e l | go to end of line and evaluate last sexp | key:normal:space m e l | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC m e r | evaluate region | key:normal:space m e r | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC m g G | go to definition in another window | xref-find-definitions-other-window | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC m g g | go to definition | SPC m g g | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC m h h | describe elisp thing at point (show documentation) | SPC m h h | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC m k | discard message and abort the commit (git commit buffer) | `SPC m k` is the same action as `SPC m a`. zmax's commit buffer is `ui::magit::MagitCommit`, and it is modal now, as spacemacs's is: `git-commit-mode` opens in evil insert state, `ESC` leaves for normal state (it used to abandon the commit), and the `SPC m` major-mode leader is live there. Bound inside the component rather than in a keymap preset, so the evidence is the command; the chord is pinned by `tests/test/spacemacs_states.rs::spc_m_c_commits_from_the_commit_buffer`, which drives `:magit`, `c`, types a message, `ESC`, `SPC m c` and reads the commit back out of git. `C-c C-c` / `C-c C-k` keep working in both states. | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/layers/+source-control/git/README.org |
| SPC m m | edit topic marks (mark is an unshared label) (forge) | forge-edit-topic-marks: `m` edits the topic's marks. A mark is forge's unshared label, so zmax keeps them in .git/zmax-forge-marks.json (alongside the personal notes) and never sends them to the forge; a name typed here that is not a known mark yet is added. Server-side labels moved to `l` | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/layers/+source-control/git/README.org |
| SPC m n | edit personal note (adds to top of topic) (forge) | forge-edit-topic-note: `n` edits the topic's personal note, which forge keeps locally; zmax stores it in .git/zmax-forge-notes.json | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/layers/+source-control/git/README.org |
| SPC m r | edit list of people to review an existing topic (forge) | forge-edit-topic-review-requests: `r` reads comma-separated logins and runs `gh pr edit <n> --add-reviewer`, refusing on issues | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/layers/+source-control/git/README.org |
| SPC m s | change topic state (open, closed, draft, etc.) (forge) | forge-edit-topic-state: `s` reads open/closed/draft/ready and runs the matching gh verb (issue|pr reopen / close, pr ready [--undo]), then re-reads the list; an unknown word is refused by name | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/layers/+source-control/git/README.org |
| SPC m t | edit topic title (forge) | forge-edit-topic-title: `t` opens the title pre-filled and runs `gh issue|pr edit <n> --title` when it changes | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/layers/+source-control/git/README.org |
| SPC m t b | execute buffer tests | `:test-buffer` runs the current file's tests into the compilation list, writing the buffers first. The chord resolves (keymap/major_mode.rs binds `space m t b` per language, shadowing the base `SPC m t` org-todo leaf the way an Emacs major-mode map shadows the global one), and the runner covers the languages whose layer binds the chord: ruby (rspec/minitest), python, elixir, go, rust, javascript/typescript, java/kotlin, scala, clojure, c-sharp, php, haskell and elisp - each the shell form of that layer's own file runner, documented per language at `buffer_test_command`. The rspec/minitest split tests the *project-relative* path, so a checkout living under some ancestor named `spec` does not route every ruby file to rspec. The last gap is closed: `run_compile` no longer shells out with `Command::output()` on the UI thread, so a long test run does not freeze the editor. It spawns the build on the job runtime and fills the error list, the `:recompile` command and the status line from the callback, which is what emacs's asynchronous `compile` does - the whole compile family (`:compile`, `SPC p T`, the cargo and PlatformIO builds) is non-blocking with it. vim's `:make` keeps the synchronous path (`run_compile_capture`), since it has to jump to the first error the moment it returns. Pinned by `tests/test/spacemacs_states.rs::compile_does_not_block_the_editor`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC m t q | ask for test function to execute | `:test-function` runs one named test - the argument, else the identifier under the cursor - through the language's single-test filter (cargo test NAME, go test -run NAME, pytest -k NAME, bundle exec rspec -e NAME, npm test -- -t NAME, mvn -Dtest=NAME, mix test --only NAME), with the output in the compilation list and the buffers written first. The chord resolves now: spacemacs binds the test runners under each language layer's `SPC m` map, so keymap/major_mode.rs binds `space m t q` in those languages' overlays, where the prefix shadows the base map's `SPC m t` org-todo leaf exactly as an Emacs major-mode map shadows the global one - org buffers keep org-todo. Pinned by `tests/test/spacemacs_states.rs::major_mode_test_chords_shadow_the_org_leaf`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC m u | copy URL of topic (add to kill ring) (forge) | forge-copy-url-at-point-as-kill: `u` pushes the selected topic's web URL onto the kill ring | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/layers/+source-control/git/README.org |
| SPC n + | increase the number under point by one and initiate transient state | increment number | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC n - | decrease the number under point by one and initiate transient state | decrement number | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC n = | increase the number under point by one and initiate transient state | increment number | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC n F | narrow to the current function in an indirect buffer | narrow-to-function in indirect buffer -> narrow_to_function_indirect (clone split + per-view narrow; original view stays full) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC n P | narrow to the visible page in an indirect buffer | narrow-to-page in indirect buffer -> narrow_to_page_indirect (clone split + per-view narrow) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC n R | narrow to the selected text in an indirect buffer | narrow to selected text in indirect buffer -> narrow_region_indirect (clone split + per-view narrow to selection) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC n _ | decrease the number under point by one and initiate transient state | decrement number | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC n f | narrow the buffer to the current function | key:normal:space n f | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC n p | narrow the buffer to the visible page | key:normal:space n p | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC n r | narrow the buffer to the selected text | narrow-to-region -> narrow_to_region (true narrowing: Document.narrow bounds confine point-min/max, select-all, gg/G, last-line; region tracks edits; SPC n w widens) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC n w | widen, i.e. show the whole buffer again | spacemacs spc_n_w -> widen (show whole buffer again) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC o c | example user binding: run org mode capture (SPC o is reserved for user) | key:normal:space o c | ported | https://raw.githubusercontent.com/syl20bnr/spacemacs/develop/doc/DOCUMENTATION.org |
| SPC p ! | run shell command in project's root | project-shell-command | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p % | replace a regexp | SPC p % replace a regexp in project -> :project-replace does a regex search/replace across workspace files | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p & | run async shell command in project's root | project-async-shell-command | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p ' | open a shell in project's root (with the shell layer) | spacemacs spc_p -> open shell in project root | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p D | open project root in =dired= | dired opens the workspace (project) root | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p E | find references | xref_find_references | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p F | find file based on path around point | goto_file opens the file whose path is around point | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p G | regenerate the project's =etags= / =gtags= | `:regenerate-tags` (alias `:projectile-regenerate-tags`) rebuilds the project's tag index at its root and makes it the table the tag commands read. All three of the old gaps are closed. The chord is bound: `space p G` in the leader's Project group (keymap/vim.rs). The generator is configurable the way projectile's `projectile-tags-command` is - `:regenerate-tags <command>` runs that command line and remembers it for this root (PROJECTILE_TAGS_CMDS), a bare re-run repeats it, and the default is `ctags -Re -f TAGS .`. Both projectile tag backends are covered, chosen by what the command wrote: an etags `TAGS` file is parsed directly, and a `GTAGS` database - what the ggtags backend's `gtags` builds - is read back through `global -x -e '.*'` and converted into the same name/line/file rows (`global_index_to_tags`), so lookups work against a GLOBAL-indexed project without the tag machinery knowing which generator ran. Conversion pinned by `commands::typed::tags_backend_tests::global_x_rows_become_a_tags_table`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p I | invalidate the projectile cache | SPC p I runs :projectile-invalidate-cache. zmax's file picker walks the project fresh on every open, so there is no cached listing to purge and the command reports the invalidation projectile reports | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p R | replace a string | project-replace across the workspace | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p T | test project | SPC p T runs :projectile-test-project — the project's test command from the project root, remembered per root, with the output in the compilation list. The command existed; the chord was taken by an fzf `:Todo` binding, which moved to SPC F x | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p a | toggle between implementation and test | toggle impl/test -> goto_next_test | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p b | switch to project buffer | spacemacs SPC p b -> buffer_picker | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p c | compile project using projectile | spacemacs spc_p_c -> compile project (run active config) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p d | find directory | spacemacs SPC p d: SPC leader -> file_explorer (approximate) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p e | edit dir-locals.el | edit dir-locals -> edit_project_config (open/create <workspace>/.zmax/config.toml) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p f | find file | spacemacs SPC p f -> file_picker | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p g | find tags | find tags -> symbol picker | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p h | find file | spacemacs SPC p h -> file_picker | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p i | install the project | spacemacs spc_p_i -> install project (run config manager) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p k | kill all project buffers | spacemacs SPC p k: SPC leader -> buffer-close-all (approximate) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p o | run multi-occur | multi-occur -> global search | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p p | switch project | spacemacs SPC p p -> file_picker | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p r | open a recent file | spacemacs SPC p r -> goto_last_modified_file | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p t | open Treemacs and add current projectile root to its list of projects | spacemacs SPC p t: SPC leader -> file_explorer (approximate) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p u | run project using projectile | spacemacs spc_p_u -> run project (run active config) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC p v | open project root in vc-dir or magit | open project in magit -> git_status | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC q Q | Quit Emacs and kill the server, lose all unsaved changes | SPC q Q (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC q T | Restart Emacs and debug with --adv-timers | the finer-grained sibling of SPC q t: restarts with ZMAX_STARTUP_TIMING=advanced so plugin loads are timed alongside the phases. Ported as zmax's timing instrumentation, not Emacs's --adv-timers | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC q f | Kill the current frame | SPC q f | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC q q | Quit Emacs and kill the server, prompt for changed buffers to save | spacemacs SPC q q -> quit-all | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC q r | Restart both Emacs and the server, prompting to save any changed buffers | SPC q r (restart-emacs): restart_editor refuses on unsaved buffers, else closes every view and sets a flag that main_impl reads after the UI loop exits (terminal restored) to re-exec the binary with the same arguments | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC q s | Save the buffers, quit Emacs and kill the server | spacemacs SPC q s -> write-quit-all | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC q t | Restart Emacs and debug with --with-timed-requires | sets ZMAX_STARTUP_TIMING=1 and restarts (refusing on unsaved buffers, like SPC q r), so the next run logs its start-up phase timings. Ported as zmax's own timing instrumentation rather than Emacs's --with-timed-requires, which times `require` calls zmax has none of | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC r e | show evil yank and named registers | spacemacs SPC r e: browse registers in a picker (register_picker) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC r l | resume the last completion buffer | spacemacs SPC r l -> last_picker | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC r m | show marks register | marks register -> marks picker (jump to mark) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC r r | show helm register | spacemacs SPC r r: show registers + paste chosen (register_picker) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC r s | resume search buffer (completion or converted search buffer) | key:normal:space r s | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC r y | show kill ring | spacemacs SPC r y: kill-ring browser (register_picker) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s B | search all open buffers with the first found tool with default input | search buffers -> global_search | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s D | search current directory with the first found tool with default input | SPC s D | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s F | search files in an arbitrary directory with the first found tool with default input | SPC s F | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s H | go to the last searched occurrence of the last highlighted symbol | last occurrence -> search_next | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s P | search in a project with the first found tool with default input | search project -> global_search | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s S | search current file with the first found tool with default input | SPC s S (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s ` | go back to the previous place before jump | SPC s ` | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s a A | search current file with ag with default input | SPC s a A | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s a B | search all open buffers with ag with default text | SPC s a B | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s a D | search current directory with ag with default text | SPC s a D | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s a F | search files in an arbitrary directory with ag with default text | SPC s a F | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s a P | search in a project with ag with default text | SPC s a P | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s a a | ag | spacemacs SPC s a a: bound in the SPC leader (global_search) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s a b | ag | spacemacs SPC s a b: bound in the SPC leader (global_search) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s a d | ag | spacemacs SPC s a d: bound in the SPC leader (global_search) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s a f | ag | spacemacs SPC s a f: bound in the SPC leader (global_search) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s a p | ag | spacemacs SPC s a p: bound in the SPC leader (global_search) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s b | search with the first found tool | spacemacs SPC s b -> global_search | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s c | clear persistent search highlighting | clear persistent search highlight | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s d | search current directory with the first found tool | search dir -> global_search | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s e | edit all occurrences of the current symbol(/) | spacemacs SPC s e -> select_references_to_symbol_under_cursor | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s f | search with the first found tool | spacemacs SPC s f -> global_search | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s g B | search all open buffers with grep with default text | SPC s g B | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s g F | search files in an arbitrary directory with grep with default text | SPC s g F | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s g G | search current file with grep with default input | SPC s g G | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s g b | grep | spacemacs SPC s g b: bound in the SPC leader (global_search) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s g d | grep with default text | spacemacs SPC s g d: bound in the SPC leader (global_search) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s g f | grep | spacemacs SPC s g f: bound in the SPC leader (global_search) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s g g | grep | spacemacs SPC s g g: bound in the SPC leader (global_search) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s g p | grep with default text | spacemacs SPC s g p: bound in the SPC leader (global_search) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s h | highlight the current symbol and all its occurrence within the current range | spacemacs SPC s h: bound in the SPC leader (select_references_to_symbol_under_cursor) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s j | list all the symbols of a buffer by semantic | SPC s j (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s k B | search all open buffers with ack with default text | SPC s k B | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s k D | search current directory with ack with default text | SPC s k D | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s k F | search files in an arbitrary directory with ack with default text | SPC s k F | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s k P | search in a project with ack with default text | SPC s k P | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s k b | ack | spacemacs SPC s k b: bound in the SPC leader (global_search) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s k d | ack | spacemacs SPC s k d: bound in the SPC leader (global_search) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s k f | ack | spacemacs SPC s k f: bound in the SPC leader (global_search) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s k p | ack | spacemacs SPC s k p: bound in the SPC leader (global_search) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s l | resume search buffer (completion or converted search buffer) | resume search -> last_picker | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s p | see searching in a project | spacemacs SPC s p -> global_search | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s r B | search all open buffers with rg with default text | SPC s r B | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s r D | search current directory with rg with default text | SPC s r D | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s r F | search files in an arbitrary directory with rg with default text | SPC s r F | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s r P | search in a project with rg with default text | SPC s r P | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s r R | search current file with rg with default input | SPC s r R | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s r b | rg | SPC s r b | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s r d | rg | SPC s r d | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s r f | rg | SPC s r f | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s r p | rg | SPC s r p | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s r r | rg | SPC s r r | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s s | search with the first found tool | spacemacs SPC s s -> global_search | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC s w g | Get Google suggestions in emacs. Opens Google results in Browser. | SPC s w g runs helm_google_suggest: fetches Google's suggestion list for the typed query and opens the chosen result in the system browser | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t - | centered-cursor mode | key:normal:space t - | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t 8 | highlight any character past the 80th column | key:normal:space t 8 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t C-- | global centered cursor | SPC t C-- global centered cursor -> toggle_centered_cursor keeps cursor vertically centered (scrolloff=9999) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t C-8 | global toggle highlight of characters for long lines | key:normal:space t C-8 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t C-S-l | visual line navigation globally | visual line nav -> :toggle soft-wrap | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t C-W | global automatic whitespace cleanup | key:normal:space t C-W | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t C-i | global indentation guide | global indent guide -> :toggle indent-guides | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t C-p | global smartparens | global smartparens -> :toggle auto-pairs | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t C-w | global whitespace | SPC t C-w | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t E e | emacs editing style (holy mode) | holy mode -> :keymap emacs (switches the live preset) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t E h | hybrid editing style (hybrid mode) | `SPC t E h` selects a real hybrid editing style now: `keymap::spacemacs::hybrid` is the spacemacs keymap with the *emacs* preset's Insert mode grafted in, which is what spacemacs's `hybrid-mode` does (it swaps `evil-insert-state-map` for `emacs-state-map` and leaves normal and visual states alone). It used to run `:keymap spacemacs`, i.e. nothing. `ESC` is the one key that cannot come across verbatim - hybrid mode is still evil, so it leaves for normal state instead of opening emacs's `ESC ESC ESC` prefix. Selectable as `keymap = "hybrid"` too. Pinned by `keymap::spacemacs::tests::hybrid_style_is_evil_with_an_emacs_insert_state`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t F | toggle auto-fill mode | spacemacs SPC t F -> toggle_auto_fill (Emacs auto-fill: wrap at text_width while typing) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t G | ggtags mode | ggtags-mode: while on, goto_definition resolves the identifier out of the visited etags table (etags_goto_definition) instead of asking a language server, and ` GG` lights in the minor-mode area | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t I | toggle aggressive indent mode | All three recorded gaps closed. (1) The chord: `SPC t I` is bound in the spacemacs leader's toggle map. (2) The prefix argument no longer widens the re-indent - the textobject count is pinned to 1, because aggressive-indent.el calls `beginning-of-defun`/`end-of-defun`, which is always the enclosing form. (3) Every selection re-indents its own defun (overlapping spans merged), not the primary alone. Two more beyond those: the mode is buffer-local, as `define-minor-mode` makes it in aggressive-indent.el (it was a process-global flag shared with the electric modes, which in emacs really are global), and it now hangs off every change - a paste, a kill, an undo or a `:s///` re-indents, not just typing, which is what `after-change-functions` gives emacs. Recorded divergence: the re-indent runs synchronously off `PostCommand` rather than emacs's 0.05s idle timer (`aggressive-indent-sit-for-time`). Pinned by `tests/test/spacemacs_states.rs::spc_t_i_reindents_the_defun_around_every_cursor` and `::aggressive_indent_follows_changes_outside_insert_mode`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t K | which-key mode | which-key mode -> :toggle auto-info | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t L | toggle visual lines | key:normal:space t L | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t S | toggle spell checking (flyspell) | flyspell_mode | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t V | toggle visual line numbers | spacemacs SPC t V: SPC leader -> toggle line-number absolute relative | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t W | toggle automatic whitespace cleanup | key:normal:space t W | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t a | auto-completion | spacemacs SPC t a -> toggle auto-completion | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t c | toggle camel case (subword) motion | spacemacs SPC t c -> toggle_subword (sub-word w/b/e motions + operators) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t f | display the fill column (by default the fill column is set to 80) | key:normal:space t f | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t g | toggle golden-ratio mode | key:normal:space t g | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t h a | toggle automatic highlight of symbol under point after ahs-idle-interval seconds | toggle automatic symbol highlight -> toggle_auto_highlight (auto_document_highlight config) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t h c | toggle highlight indentation current column | highlight current column -> :toggle cursorcolumn | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t h h | toggle highlight of the current line | spacemacs SPC t h h -> toggle cursorline | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t h i | toggle highlight indentation levels | highlight indentation -> :toggle indent-guides | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t h s | toggle syntax highlighting | toggle syntax highlighting -> toggle_syntax_highlighting (set_language None / detect) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t i | toggle indentation guide at point | spacemacs SPC t i -> toggle indent-guides.render | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t k M | show persistent full-major-mode keymap. Toggle off with ~SPC t k k~ | Spacemacs's `SPC t k` family pins a which-key popup that stays up until `SPC t k k` takes it down, which is now what these chords do: `Editor::persistent_autoinfo` holds the pinned listing and the key handler falls back to it whenever no pending chord has claimed the popup, so it survives keystrokes instead of living for one chord. Re-running the same chord toggles it off, as in spacemacs. Pinned by `tests/test/spacemacs_states.rs::spc_t_k_pins_a_persistent_which_key_popup`, which shows the popup surviving a keystroke and going away on `SPC t k k`. `SPC t k M` (`which_key_major_mode_full`) pins the full listing: the major-mode overlay plus the leader's `SPC m` group, which is the rest of what spacemacs shows for a major mode. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t k k | toggle which-key persistent state | key:normal:space t k k | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t k m | show persistent major-mode keymap. Toggle off with SPC t k k | Spacemacs's `SPC t k` family pins a which-key popup that stays up until `SPC t k k` takes it down, which is now what these chords do: `Editor::persistent_autoinfo` holds the pinned listing and the key handler falls back to it whenever no pending chord has claimed the popup, so it survives keystrokes instead of living for one chord. Re-running the same chord toggles it off, as in spacemacs. Pinned by `tests/test/spacemacs_states.rs::spc_t_k_pins_a_persistent_which_key_popup`, which shows the popup surviving a keystroke and going away on `SPC t k k`. `SPC t k m` (`which_key_major_mode`) pins the major-mode overlay for the buffer's language, titled with it. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t k t | show persistent top-level keymap. Toggle off with SPC t k k | Spacemacs's `SPC t k` family pins a which-key popup that stays up until `SPC t k k` takes it down, which is now what these chords do: `Editor::persistent_autoinfo` holds the pinned listing and the key handler falls back to it whenever no pending chord has claimed the popup, so it survives keystrokes instead of living for one chord. Re-running the same chord toggles it off, as in spacemacs. Pinned by `tests/test/spacemacs_states.rs::spc_t_k_pins_a_persistent_which_key_popup`, which shows the popup surviving a keystroke and going away on `SPC t k k`. `SPC t k t` (`which_key_top_level`) pins the top-level keymap of the current mode. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t l | toggle truncate lines | spacemacs SPC t l: SPC leader -> toggle soft-wrap.enable | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t m M | toggle major mode | SPC t m M binds the existing toggle_modeline_major_mode, which adds or removes the FileType element (the buffer's language = its major mode here) from the status line. Command existed; the chord did not | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t m T | toggle mode line itself | SPC t m T (toggle mode line itself): :toggle render-statusline turns the per-window status line off/on | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t m V | toggle new version lighter | shows `⇪<version>` in the status line when a release newer than the running build has been recorded (spacemacs_keys::set_new_version); with nothing recorded the lighter draws nothing even while the toggle is on | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t m b | toggle the battery status | display-battery-mode: battery charge in the mode line | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t m c | toggle the org task clock (available in org layer) | shows `⏱ H:MM <heading>` in the status line while an org clock runs; org_clock_toggle (org-clock-in/out) starts and stops it, so the construct tracks the real CLOCK line | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t m m | toggle the minor mode lighters | shows or hides the status line's minor-mode lighter area (Abbrev/Fill/Ovwrt/Fly/Hi/CWarn, plus GG for ggtags and yas for yasnippet) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t m n | toggle the cat! (if colors layer is declared in your dotfile) | draws nyan-mode's scroll-position bar (rainbow trail, cat face, outerspace) in the status line; the renderer already existed and had no toggle command | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t m p | toggle the point character position | key:normal:space t m p | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t m r | toggle responsivness of the mode-line | with it on, an optional status-line construct (buffer size, clock, battery, cat, org clock, new-version lighter) is dropped once left+right+its own width would exceed the window; the mandatory elements are never dropped | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t m s | toggle system monitor (displayed in the minibuffer) | All three recorded gaps closed. (a) The chord: `SPC t m s` is bound in the spacemacs leader's toggle map. (b) The display is idle-gated now, as symon's is: symon.el arms `(run-with-idle-timer symon-delay t 'symon-display)` with `symon-delay` 2 and takes the display down from `pre-command-hook`, so zmax clears it after every command (`symon_display_end`, off `PostCommand`) and puts the last reading back once the editor has been idle for two seconds - the reading no longer waits up to a full 4s `symon-refresh-rate` tick to reappear, and what reappears is the last sample rather than a stale one. (c) The generation guard now covers the write it documents: the dispatched closure re-checks `symon_live(generation)`, not just `SYMON_ON`, so a retired loop with a dispatch in flight cannot write over the live one. `symon--display-update` skips while point is in the echo area or minibuffer; the port skips while a prompt layer is up. Pinned by `tests/test/spacemacs_states.rs::spc_t_m_s_toggles_the_system_monitor`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t m t | toggle the time | display-time: time of day in the mode line | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t m v | toggle the version control info | key:normal:space t m v | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t n | toggle line numbers | SPC t n toggle line numbers -> toggle_line_numbers toggles the line-number gutter | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t n a | toggle absolute line numbers | spacemacs SPC t n a -> toggle line-number relative absolute | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t n n | toggle line numbers as configured in .spacemacs | SPC t n n | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t n r | toggle relative line numbers | spacemacs SPC t n r -> toggle line-number absolute relative | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t n v | toggle smooth scrolling | flips vim's `smoothscroll` option and pushes it into the view (zmax_view::view::set_smoothscroll), so a wrapped line scrolls by screen row instead of whole line; reports the new state | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t p | smartparens mode | smartparens -> :toggle auto-pairs | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t s | syntax checking (flycheck) | toggle flycheck/syntax checking -> toggle_diagnostics (end-of-line diag filter + diagnostics gutter) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t w | whitespace mode | spacemacs SPC t w -> toggle whitespace.render all none | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t y | yasnippet mode | yas-minor-mode: while off, try_user_snippet_expand returns early so a snippet key stays ordinary text; ` yas` lights in the minor-mode area while on (on by default) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC t z | toggle 0/1 based column indexing | toggle 0/1-based column indexing in statusline | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC u | universal argument | universal_argument: C-u universal prefix argument (SPC u) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC u SPC b D | kill a visible buffer and its window using ace-window | key:normal:space u space b D | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC u SPC b d | kill the current buffer and window (does not delete the visited file) | kill buffer+window -> :buffer-close | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC u SPC b m | kill all buffers and windows except the current one | kill other buffers -> :buffer-close-others | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC u SPC h I | Open Spacemacs GitHub issue page with pre-filled information - include last pressed keys | opens the pre-filled new-issue URL with the `Emacs last keys` section included; SPC u is a literal chord in zmax rather than a real prefix argument, so this is its own entry point onto the same body builder report_spacemacs_issue uses | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC u SPC w 1 | make 1 window layout with force delete | single-window layout -> wonly | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC u SPC w 2 | make 2 windows layout (split vertically) with force delete | 2-window layout (force) -> vsplit | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC u SPC w 3 | make 3 windows layout (split vertically) with force delete | 3-window layout (force) -> vsplit | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC u SPC w 4 | make 4 windows layout (split in 2x2 grid) with force delete | 4-window layout (force) -> vsplit | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC u SPC w D | delete another window and its current buffer using ace-window | key:normal:space u space w D | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC u SPC w d | delete a window and its current buffer (does not delete the file) | delete window+buffer -> wclose | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC v | initiate expand-region mode then... | spacemacs SPC v -> expand_selection | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w - | horizontal split | SPC w - (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . | initiate window transient state | SPC w . initiates the window transient state (sticky node) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . - | horizontal split (transient state) | SPC w . - | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . / | vertical split (transient state) | SPC w . / | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . 0..9 | go to window number n | go to window N (transient) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . D | delete other windows | SPC w . D | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . H | move window to the left | spacemacs spc_w_x_hU -> move window left | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . J | move window to the bottom | spacemacs spc_w_x_jU -> move window down | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . K | move bottom to the top | spacemacs spc_w_x_kU -> move window up | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . L | move window to the right | spacemacs spc_w_x_lU -> move window right | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . R | rotate windows backward | spacemacs spc_w_x_rU -> rotate windows backward | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . S | horizontal split and focus new window | spacemacs spc_w_x_sU -> horizontal split and focus | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . U | redo window layout | SPC w . U -> winner_redo (winner-mode window-layout undo/redo) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . V | vertical split and focus new window | spacemacs spc_w_x_vU -> vertical split and focus | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . [ | shrink window horizontally (transient state) | spacemacs spc_w_x_x_3 -> shrink window horizontally | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . ] | enlarge window horizontally (transient state) | spacemacs spc_w_x_x_4 -> enlarge window horizontally | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . _ | maximize window horizontally (transient state) | spacemacs spc_w_x_x_2 -> maximize window horizontally | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . a | call ace window mode | ace-window -> ace_window (on_next_key reads window number 1-9 and jumps) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . d | delete window | SPC w . d | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . g | toggle golden-ratio on and off | key:normal:space w . g | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . h | go to window on the left | SPC w . h | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . j | go to window below | SPC w . j | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . k | go to window above | SPC w . k | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . l | go to window on the right | SPC w . l | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . m | toggle maximization of current window | maximize current window | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . o | focus other frame | SPC w . o | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . r | rotate windows forward | spacemacs spc_w_x_r -> rotate windows forward | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . s | horizontal split | spacemacs spc_w_x_s -> horizontal split | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . u | undo window layout (used to effectively undo a closed window) | SPC w . u -> winner_undo (winner-mode window-layout undo/redo) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . v | vertical split | spacemacs spc_w_x_v -> vertical split | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . w | focus other window | spacemacs spc_w_x_w -> focus other window | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . x | delete window and kill buffer | delete window and kill buffer | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . { | shrink window vertically (transient state) | spacemacs spc_w_x_x_5 -> shrink window vertically | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . | | maximize window vertically (transient state) | spacemacs spc_w_x_x -> maximize window vertically | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w . } | enlarge window vertically (transient state) | spacemacs spc_w_x_x_6 -> enlarge window vertically | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w / | vertical split | SPC w / (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w 1 | make 1 window layout | 1-window layout -> wonly | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w 2 | make 2 windows layout (split vertically) | 2-window layout -> vsplit | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w 3 | make 3 windows layout (split vertically) | 3-window layout -> vsplit | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w 4 | make 4 windows layout (split in 2x2 grid) | 4-window layout -> vsplit | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w = | balance split windows | balance/equalize windows | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w D | delete another window using ace-window | SPC w D | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w F | create new frame | SPC w F (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w H | move window to the left | SPC w H (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w J | move window to the bottom | SPC w J (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w K | move window to the top | SPC w K (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w L | move window to the right | SPC w L (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w M | swap windows using ace-window | SPC w M | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w R | rotate windows backward | SPC w R (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w S | horizontal split and focus new window | spacemacs SPC w S: SPC leader -> hsplit | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w TAB | switch to alternate window in the current frame (switch back and forth) | alternate window -> rotate_view | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w V | vertical split and focus new window | spacemacs SPC w V: SPC leader -> vsplit | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w W | select window using ace-window | SPC w W (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w [ | shrink window horizontally (enter transient state) | spacemacs spc_w_x_4 -> shrink window horizontally | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w \vert | maximize window vertically | maximize window -> wonly | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w ] | enlarge window horizontally (enter transient state) | SPC w ] (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w _ | maximize window horizontally | SPC w _ | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w b | force the focus back to the minibuffer | `SPC w b` is bound now: the spacemacs leader carries `spacemacs/switch-to-minibuffer-window` while vim's `C-w b` keeps go-to-bottom-window (the divergence VIM_OWNS in keymap.rs allows, pinned by `aliased_modes_are_same_in_default_keymap`); `SPC w C-b` stays the bottom-window alias. Recorded divergence: zmax's minibuffer is the prompt layer, which holds the keyboard for as long as it is open, so the `(select-window (active-minibuffer-window))` half has no reachable state to run in and the command reports whether a minibuffer is active. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w c . | center buffer and enable centering transient state | centered-cursor prefix -> align_view_center | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w c C | toggle visual distraction free mode | centered-cursor prefix -> toggle_centered_cursor | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w c c | toggle visual centering of the current buffer | centered-cursor prefix -> toggle_centered_cursor | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w d | delete a window | spacemacs SPC w d -> wclose | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w f | toggle follow mode | spacemacs SPC w f -> toggle_follow_mode (windows on same doc scroll as one continuous view) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w h | move to window on the left | spacemacs SPC w h -> jump_view_left | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w j | move to window below | spacemacs SPC w j -> jump_view_down | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w k | move to window above | spacemacs SPC w k -> jump_view_up | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w l | move to window on the right | spacemacs SPC w l -> jump_view_right | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w m | maximize/minimize a window (maximize is similar to delete-other-windows) | spacemacs SPC w m: bound in the SPC leader (wonly) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w o | cycle and focus between frames | spacemacs SPC w o -> wonly | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w p m | open messages buffer in a popup window | SPC w p m is bound to view_echo_area_messages (zmax-term/src/commands.rs:32154), which reads Editor::messages — the persistent status/error log (zmax-view/src/editor.rs:2344, pushed at :2742, capped by vim 'messagesopt' history:N, editor.rs:1955) — tags each row E/W/blank by severity and draws it as an autoinfo popup titled *Messages*, erroring 'no messages' when the log is empty. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w p p | close the current sticky popup window | `SPC w p p` is bound under the spacemacs popup prefix (`SPC w p`, the popwin map): close_sticky_popup pops the topmost compositor layer and errors when only the editor view is up. vim's `C-w p` keeps go-to-previous-window. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w r | rotate windows forward | spacemacs SPC w r -> rotate_view | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w s | horizontal split | SPC w s (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w t | toggle window dedication (dedicated window cannot be reused by a mode) | spacemacs SPC w t -> toggle_window_dedication (dedicated window splits on opening other buffers) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w u | undo window layout (used to effectively undo a closed window) | SPC w u -> winner_undo (winner-mode window-layout undo/redo) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w v | vertical split | SPC w v (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w w | cycle and focus between windows | spacemacs SPC w w -> rotate_view | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w x | delete a window and its current buffer (does not delete the file) | spacemacs SPC w x: bound in the SPC leader (transpose_view) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w { | shrink window vertically (enter transient state) | spacemacs spc_w_x_6 -> shrink window vertically | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w | | maximize window vertically | SPC w | (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC w } | enlarge window vertically (enter transient state) | SPC w } (already bound) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x . | enter the drag stuff transient state | key:normal:space x . j | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x A | open all visible links | SPC x A (link-hint-open-all-links): open_all_buffer_links scans the current buffer for URLs and opens each in the OS browser (capped at 50) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x J | drag down a line of text (enter drag stuff transient state) | spacemacs SPC x J -> move-line-down | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x K | drag up a line of text (enter drag stuff transient state) | spacemacs SPC x K -> move-line-up | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x O | use avy to select multiple links in the frame and open them | SPC x O (link-hint-open-link): link_hint_open_link pickers over the buffer's URLs; confirming one opens it in the browser | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x TAB | indent or dedent a region rigidly | spacemacs SPC x TAB -> indent | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x U | set the selected text to upper case | spacemacs spc_x_uU -> uppercase the selection | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x Y | use avy to copy multiple links in the frame | SPC x Y (link-hint-copy-all-links): copy_all_buffer_links copies every URL in the buffer to the clipboard, one per line | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a & | align region at & | SPC x a & | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a ( | align region at ( | align at ( -> align_selections | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a ) | align region at ) | align at ) -> align_selections | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a , | align region at , | align at , -> align_selections | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a . | align region at . (for numeric tables) | align at . -> align_selections | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a : | align region at : | align at : -> align_selections | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a ; | align region at ; | align at ; -> align_selections | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a = | align region at = | align at = -> align_selections | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a L | right-align with evil-lion | align at L -> align_selections | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a [ | align region at [ | align at [ -> align_selections | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a ] | align region at ] | align at ] -> align_selections | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a a | align region (or guessed section) using default rules | spacemacs SPC x a a -> align_selections | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a c | align current indentation region using default rules | SPC x a c | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a l | left-align with evil-lion | SPC x a l | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a m | align region at arithmetic operators (+-*/) | SPC x a m | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a r | align region using user-specified regexp | SPC x a r | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a { | align region at { | align at { -> align_selections | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a } | align region at } | align at } -> align_selections | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a ¦ | align region at ¦ | `SPC x a |` is align_at_bar on the ASCII `|` (keybindings.el:712 binds "xa|"; the `¦` in DOCUMENTATION.org is an org-table artifact), implementing align-regexp's REPEAT=t column by column and walking outward over the contiguous matching lines when there is no region - byte-identical to spacemacs/align-repeat-bar driven under `emacs -Q --batch`. The prefix-arg branch is reachable now: `SPC u SPC x a |` runs align_at_bar_after, which pads the whitespace after the bar. Under this keymap `C-u` is evil's scroll-up, so the leader carries the prefix argument as an explicit `SPC u` chord - the same shape as `SPC u SPC b d` and the other prefixed leader chords here. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x a , | align region at , | SPC x a , align region at , -> align_at_comma aligns region on commas | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x c | count the number of chars/words/lines in the selection region | SPC x c | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x d SPC | Delete all spaces and tabs around point, leaving one space | spacemacs SPC x d SPC -> just-one-space | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x d l | delete blank lines but one or the single blank line | spacemacs SPC x d l -> delete-blank-lines | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x d w | delete trailing whitespaces | spacemacs SPC x d w -> delete-trailing-whitespace | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x e | Edit strings in place | SPC x e edit strings in place (iedit) -> select_all_occurrences places cursors on every occurrence of the selection for simultaneous editing | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x g T | reverse source and target languages | reverse translate languages | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x g l | set languages used by translate commands | set translate source/target languages | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x g t | translate current word using Google Translate | translate word under cursor (google-translate-at-point) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x i - | change symbol style to kebab-case | SPC x i - | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x i C | change symbol style to UpperCamelCase | spacemacs spc_x_i_cU -> change symbol style to UpperCamelCase | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x i U | change symbol style to UP_CASE | spacemacs spc_x_i_uU -> change symbol style to UP_CASE | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x i _ | change symbol style to under_score | spacemacs spc_x_i_x -> change symbol style to under_score | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x i c | change symbol style to lowerCamelCase | spacemacs SPC x i c -> change-case camel | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x i i | cycle symbol naming styles (i to keep cycling) | spacemacs SPC x i i -> cycle-case | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x i k | change symbol style to kebab-case | spacemacs SPC x i k -> change-case kebab | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x i u | change symbol style to under_score | spacemacs SPC x i u -> change-case snake | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x j c | set the justification to center | justify center -> format_selections | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x j f | set the justification to full | justify full -> format_selections | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x j l | set the justification to left | justify left -> format_selections | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x j n | set the justification to none | justify none -> format_selections | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x j r | set the justification to right | justify right -> format_selections | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x l d | duplicate line or region | spacemacs SPC x l d -> duplicate-line | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x l r | randomize lines in region | spacemacs spc_x_l_r -> randomize lines in region | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x l s | sort lines | spacemacs SPC x l s -> sort | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x l u | uniquify lines | spacemacs SPC x l u -> uniquify-lines | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x o | use avy to select a link in the frame and open it | avy open link -> goto_file | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x r ' | generate strings given by a regexp given this list is finite | SPC x r ': regexp_generate_strings prompts for a finite regexp and lists every string it matches; enumerate_regex parses a PCRE subset (literals, ( ), |, [ ], ?, {n,m}) and rejects infinite constructs | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x r ' | Generate strings given by a regexp given this list is finite | duplicate inventory entry for SPC x r ' (generate strings from a finite regexp): regexp_generate_strings | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x r / | Explain the regexp around point with rx | key:normal:space x r / | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x r c | Convert regexp around point to the other form and display the result in the minibuffer | key:normal:space x r c | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x r e ' | generate strings from Emacs Lisp regexp | SPC x r e ': regexp_generate_strings_emacs translates Emacs regexp syntax (\( \| \{ \}) to the PCRE subset via emacs_regex_to_pcre_subset, then enumerates | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x r e ' | Generate strings from Emacs Lisp regexp | duplicate inventory entry for SPC x r e ' (finite Emacs regexp): regexp_generate_strings_emacs | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x r e / | Explain Emacs Lisp regexp | key:normal:space x r e / | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x r e p | Convert Emacs Lisp regexp to PCRE | key:normal:space x r e p | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x r e t | Replace Emacs Lisp regexp by rx form or vice versa | replace Emacs regexp by rx form -> regex_emacs_to_rx_replace | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x r e x | Convert Emacs Lisp regexp to rx form | key:normal:space x r e x | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x r p ' | generate strings from PCRE regexp | SPC x r p ': same finite-regexp string generator, PCRE syntax (regexp_generate_strings) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x r p ' | Generate strings from PCRE regexp | duplicate inventory entry for SPC x r p ' (finite PCRE regexp): regexp_generate_strings | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x r p / | Explain PCRE regexp | key:normal:space x r p / | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x r p e | Convert PCRE regexp to Emacs Lisp | key:normal:space x r p e | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x r p x | Convert PCRE to rx form | key:normal:space x r p x | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x r t | Replace regexp around point by the rx form or vice versa | key:normal:space x r t | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x r x | Convert regexp around point in rx form and display the result in the minibuffer | key:normal:space x r x | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x t c | swap (transpose) the current character with the previous one | spacemacs SPC x t c -> transpose-chars | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x t e | swap (transpose) the current sexp with the previous one | key:normal:space x t e | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x t l | swap (transpose) the current line with the previous one | spacemacs SPC x t l -> move-line-up | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x t p | swap (transpose) the current paragraph with the previous one | key:normal:space x t p | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x t s | swap (transpose) the current sentence with the previous one | key:normal:space x t s | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x t w | swap (transpose) the current word with the previous one | spacemacs SPC x t w -> transpose-words | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x u | set the selected text to lower case | spacemacs SPC x u -> switch_to_lowercase | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x w c | count the number of occurrences per word in the select region | count word occurrences -> count_selection | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x w d | show dictionary entry of word from wordnik.com | `:dictionary-search` (the command `space x w d` already resolves to) gained define-word's wordnik backend and now defaults to it. New `fetch_wordnik` (typed.rs:33808-33821) GETs https://wordnik.com/words/{word downcased} with define-word's Chrome User-Agent (the site returns a definition-less page to url.el's default agent, which is why the elisp overrides it); `parse_wordnik` (typed.rs:33747-33784) is the port of `define-word--parse-wordnik` — `<li><abbr…>{part of speech}</abbr> {text}</li>`, part-of-speech prefix, inline markup reduced to text by `strip_inline_html`, capped at `define-word-limit` = 10; an empty result is reported as define-word's own "0 definitions found". The lookup runs on a spawn_blocking task behind the job/EditorCompositor callback (the `:Thesaurus` idiom at typed.rs:36603), so the UI never blocks. The offline RFC 2229 client stays available: `:dictionary-search --dict word` (new DICTIONARY_DICT_FLAG, typed.rs:33721-33729), and a wordnik lookup that fails falls back to it automatically — the status line always names the backend that answered, so the fallback is never silent. Aliases define-word / define-word-at-point added; command doc updated. Note on the spec: the row's premise checks out against the primary source (Spacemacs DOCUMENTATION.org:3093 — "SPC x w d | show dictionary entry of word from wordnik.com"), though the +os/osx layer rebinds "xwd" to osx-dictionary-search-pointer when it is enabled (layers/+os/osx/packages.el:91). Upstream: define-word.el:49 (define-word-limit), :65 (wordnik service URL), :104-108 (user agent), :112 (word downcased), :220-235 (define-word--parse-wordnik), :204-212 (tag→face table); Spacemacs doc/DOCUMENTATION.org:3093 | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x w r | randomize words in region | spacemacs spc_x_w_r -> randomize words in region | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x x | smart quickrun or quickrun-region | quickrun -> :run-shell-command | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC x y | use avy to copy a link in the frame | SPC x y (link-hint-copy-link): link_hint_copy_link pickers over the buffer's URLs; confirming one copies it to the clipboard register | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC z f + | zoom in the frame content and initiate the frame scaling transient state | frame_zoom_in inside the `SPC z f` frame-scaling transient state (keymap/vim.rs:2213, `sticky=true`): `+`/`=`/`k` zoom in, `-`/`_`/`j` zoom out, `0` unzooms and `q` leaves, with the state staying up between keys. A terminal frame has no font of its own, so this drives the same OSC 50 steps as the text family while keeping its own `Editor::frame_scale` counter for `zoom-frm-unzoom` to report and reset. Pinned by `tests/test/spacemacs_states.rs::frame_scaling_transient_state_keeps_zooming`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC z f - | zoom out the frame content and initiate the frame scaling transient state | frame_zoom_out inside the `SPC z f` frame-scaling transient state (keymap/vim.rs:2213, `sticky=true`): `+`/`=`/`k` zoom in, `-`/`_`/`j` zoom out, `0` unzooms and `q` leaves, with the state staying up between keys. A terminal frame has no font of its own, so this drives the same OSC 50 steps as the text family while keeping its own `Editor::frame_scale` counter for `zoom-frm-unzoom` to report and reset. Pinned by `tests/test/spacemacs_states.rs::frame_scaling_transient_state_keeps_zooming`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC z f 0 | reset the frame content size and initiate the frame scaling transient state | frame_zoom_reset inside the `SPC z f` frame-scaling transient state (keymap/vim.rs:2213, `sticky=true`): `+`/`=`/`k` zoom in, `-`/`_`/`j` zoom out, `0` unzooms and `q` leaves, with the state staying up between keys. A terminal frame has no font of its own, so this drives the same OSC 50 steps as the text family while keeping its own `Editor::frame_scale` counter for `zoom-frm-unzoom` to report and reset. Pinned by `tests/test/spacemacs_states.rs::frame_scaling_transient_state_keeps_zooming`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC z f = | zoom in the frame content and initiate the frame scaling transient state | frame_zoom_in inside the `SPC z f` frame-scaling transient state (keymap/vim.rs:2213, `sticky=true`): `+`/`=`/`k` zoom in, `-`/`_`/`j` zoom out, `0` unzooms and `q` leaves, with the state staying up between keys. A terminal frame has no font of its own, so this drives the same OSC 50 steps as the text family while keeping its own `Editor::frame_scale` counter for `zoom-frm-unzoom` to report and reset. Pinned by `tests/test/spacemacs_states.rs::frame_scaling_transient_state_keeps_zooming`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC z f _ | zoom out the frame content and initiate the frame scaling transient state | frame_zoom_out inside the `SPC z f` frame-scaling transient state (keymap/vim.rs:2213, `sticky=true`): `+`/`=`/`k` zoom in, `-`/`_`/`j` zoom out, `0` unzooms and `q` leaves, with the state staying up between keys. A terminal frame has no font of its own, so this drives the same OSC 50 steps as the text family while keeping its own `Editor::frame_scale` counter for `zoom-frm-unzoom` to report and reset. Pinned by `tests/test/spacemacs_states.rs::frame_scaling_transient_state_keeps_zooming`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC z f j | zoom out the frame content and initiate the frame scaling transient state | frame_zoom_out inside the `SPC z f` frame-scaling transient state (keymap/vim.rs:2213, `sticky=true`): `+`/`=`/`k` zoom in, `-`/`_`/`j` zoom out, `0` unzooms and `q` leaves, with the state staying up between keys. A terminal frame has no font of its own, so this drives the same OSC 50 steps as the text family while keeping its own `Editor::frame_scale` counter for `zoom-frm-unzoom` to report and reset. Pinned by `tests/test/spacemacs_states.rs::frame_scaling_transient_state_keeps_zooming`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC z f k | zoom in the frame content and initiate the frame scaling transient state | frame_zoom_in inside the `SPC z f` frame-scaling transient state (keymap/vim.rs:2213, `sticky=true`): `+`/`=`/`k` zoom in, `-`/`_`/`j` zoom out, `0` unzooms and `q` leaves, with the state staying up between keys. A terminal frame has no font of its own, so this drives the same OSC 50 steps as the text family while keeping its own `Editor::frame_scale` counter for `zoom-frm-unzoom` to report and reset. Pinned by `tests/test/spacemacs_states.rs::frame_scaling_transient_state_keeps_zooming`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC z x + | scale up the font and initiate the font scaling transient state | text_scale_increase inside the `SPC z x` font-scaling transient state (keymap/vim.rs:2207, `sticky=true`): the state stays up after the key acts, so `+`/`=`/`k` keep scaling, `-`/`_`/`j` keep shrinking, `0` resets and `q` leaves - spacemacs's zoom transient state. The scale is `Editor::text_scale`, stepped on the terminal with OSC 50 and reported on the status line. Pinned by `tests/test/spacemacs_states.rs::font_scaling_transient_state_keeps_scaling`, which enters with `+` and keeps scaling with bare `+`/`k` to +3, then resets with `0`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC z x - | scale down the font and initiate the font scaling transient state | text_scale_decrease inside the `SPC z x` font-scaling transient state (keymap/vim.rs:2207, `sticky=true`): the state stays up after the key acts, so `+`/`=`/`k` keep scaling, `-`/`_`/`j` keep shrinking, `0` resets and `q` leaves - spacemacs's zoom transient state. The scale is `Editor::text_scale`, stepped on the terminal with OSC 50 and reported on the status line. Pinned by `tests/test/spacemacs_states.rs::font_scaling_transient_state_keeps_scaling`, which enters with `+` and keeps scaling with bare `+`/`k` to +3, then resets with `0`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC z x 0 | reset the font size (no scaling) and initiate the font scaling transient state | text_scale_reset inside the `SPC z x` font-scaling transient state (keymap/vim.rs:2207, `sticky=true`): the state stays up after the key acts, so `+`/`=`/`k` keep scaling, `-`/`_`/`j` keep shrinking, `0` resets and `q` leaves - spacemacs's zoom transient state. The scale is `Editor::text_scale`, stepped on the terminal with OSC 50 and reported on the status line. Pinned by `tests/test/spacemacs_states.rs::font_scaling_transient_state_keeps_scaling`, which enters with `+` and keeps scaling with bare `+`/`k` to +3, then resets with `0`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC z x = | scale up the font and initiate the font scaling transient state | text_scale_increase inside the `SPC z x` font-scaling transient state (keymap/vim.rs:2207, `sticky=true`): the state stays up after the key acts, so `+`/`=`/`k` keep scaling, `-`/`_`/`j` keep shrinking, `0` resets and `q` leaves - spacemacs's zoom transient state. The scale is `Editor::text_scale`, stepped on the terminal with OSC 50 and reported on the status line. Pinned by `tests/test/spacemacs_states.rs::font_scaling_transient_state_keeps_scaling`, which enters with `+` and keeps scaling with bare `+`/`k` to +3, then resets with `0`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC z x _ | scale down the font and initiate the font scaling transient state | text_scale_decrease inside the `SPC z x` font-scaling transient state (keymap/vim.rs:2207, `sticky=true`): the state stays up after the key acts, so `+`/`=`/`k` keep scaling, `-`/`_`/`j` keep shrinking, `0` resets and `q` leaves - spacemacs's zoom transient state. The scale is `Editor::text_scale`, stepped on the terminal with OSC 50 and reported on the status line. Pinned by `tests/test/spacemacs_states.rs::font_scaling_transient_state_keeps_scaling`, which enters with `+` and keeps scaling with bare `+`/`k` to +3, then resets with `0`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC z x j | scale down the font and initiate the font scaling transient state | text_scale_decrease inside the `SPC z x` font-scaling transient state (keymap/vim.rs:2207, `sticky=true`): the state stays up after the key acts, so `+`/`=`/`k` keep scaling, `-`/`_`/`j` keep shrinking, `0` resets and `q` leaves - spacemacs's zoom transient state. The scale is `Editor::text_scale`, stepped on the terminal with OSC 50 and reported on the status line. Pinned by `tests/test/spacemacs_states.rs::font_scaling_transient_state_keeps_scaling`, which enters with `+` and keeps scaling with bare `+`/`k` to +3, then resets with `0`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| SPC z x k | scale up the font and initiate the font scaling transient state | text_scale_increase inside the `SPC z x` font-scaling transient state (keymap/vim.rs:2207, `sticky=true`): the state stays up after the key acts, so `+`/`=`/`k` keep scaling, `-`/`_`/`j` keep shrinking, `0` resets and `q` leaves - spacemacs's zoom transient state. The scale is `Editor::text_scale`, stepped on the terminal with OSC 50 and reported on the status line. Pinned by `tests/test/spacemacs_states.rs::font_scaling_transient_state_keeps_scaling`, which enters with `+` and keeps scaling with bare `+`/`k` to +3, then resets with `0`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| [ SPC | Insert space above | [ SPC insert space above -> add_newline_above inserts a blank line above without entering insert | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| [ b | Go to previous buffer | [ b previous buffer -> goto_previous_buffer cycles to prior buffer | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| [ e | Move line up | [ e move line up -> drag_line_up relocates the current line above the previous one | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| [ f | Go to previous file in directory | prev file in directory (reachable by name; the [f chord stays vim goto-file) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| [ h | Go to the previous vcs hunk | [ h previous vcs hunk -> goto_prev_change navigates to previous git diff hunk | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| [ l | Go to the previous error | [ l previous error -> loclist_prev jumps to previous location-list entry | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| [ p | Paste above current line | [p paste before/above (paste_before) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| [ q | Go to the previous error | [ q previous error -> quickfix_prev steps to previous quickfix entry | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| [ t | Go to the previous frame | New `previous_frame` (zmax-term/src/commands.rs:71312, registered commands.rs:2724) steps back through the real frame ring — `(current + n - count % n) % n`, with the same `n < 2` "only one frame" status as `other_frame` — and `[ t` now runs it (zmax-term/src/keymap/vim.rs:1376) instead of `rotate_view_reverse`, which cycles windows. `] t` keeps `other_frame`; `[ w` / `] w` keep the window rotations (asserted by keymap::vim::tests::spacemacs_leader_gap_chords_bound, which passes). The stale "zmax has no frames" comments on both keys are gone. Upstream: spacemacs [t / ]t: previous / next frame (the frame ring, not the window ring); mirrors emacs other-frame's wrap | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| [ w | Go to the previous window | previous window -> rotate_view_reverse | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| ] SPC | Insert space below | ] SPC insert space below -> add_newline_below inserts a blank line below | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| ] b | Go to next buffer | ] b next buffer -> goto_next_buffer cycles to next buffer | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| ] e | Move line down | ] e move line down -> drag_line_down relocates the current line below the next one | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| ] f | Go to next file in directory | next file in directory (reachable by name; the ]f chord stays vim goto-file) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| ] h | Go to the next vcs hunk | ] h next vcs hunk -> goto_next_change navigates to next git diff hunk | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| ] l | Go to the next error | ] l next error -> loclist_next jumps to next location-list entry | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| ] p | Paste below current line | ]p paste after/below (paste_after) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| ] q | Go to the next error | ] q next error -> quickfix_next steps to next quickfix entry | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| ] t | Go to the next frame | ]t: go to the next frame -> other_frame (wraps, like emacs's). zmax has real frames now; it used to rotate windows | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| ] w | Go to the next window | next window -> rotate_view | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| f k | filter by keywords | paradox's `f` filter prefix now arms the package menu's filter map alongside `/`, so `f k` reads a keyword and narrows the listing to the packages carrying it — the same filter package_menu_filter_by_keyword applies | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| f r | filter by regexp | `f r` (and `/ r`) reads a regexp and keeps the packages whose name or summary matches it — a new Filter::Regexp in zmax_core::package, since the other filters all match a substring. An unparseable regexp matches nothing rather than everything | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| f u | display only installed package with updates available | `f u` applies the upgradable filter with no prompt, leaving only installed packages with a newer version available — the same filter package_menu_filter_upgradable applies | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| g b | go back (same as clicking on =[back]= button) | help-mode back button -> help_go_back | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| g f | go forward (same as clicking on =[forward]= button) | `g f` is bound in the Help browser's own map, which is where spacemacs binds it - evil-help-mode, not the global map, so vim's `g f` (goto-file) is untouched. While a topic is visited (the read-only `*Help*` state where `l`/`r`/`n`/`p`/`s` already live), `g` arms a prefix and `g f` runs `go_forward`, the counterpart of `g b`. While browsing, `g` is still search input. Pinned by `ui::help::tests::g_prefix_walks_help_history_only_while_visiting`. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| g h | go to help for symbol under point | `g h` is bound in the Help browser's own map alongside `g b`/`g f`, which is where spacemacs binds it (evil-help-mode) - vim's `g h` (Select mode) is untouched. It follows the cross-reference at point, which is what `help-follow-symbol` does inside `*Help*`: the selected entry is visited and recorded in the history the other two walk. Pinned by `ui::help::tests::g_prefix_walks_help_history_only_while_visiting`, which drives the same prefix. | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| g p | Select pasted text | New `SPACEMACS_OVERRIDES` table at zmax-term/src/keymap/spacemacs.rs:637-655 holding `("g p", "Goto", "select_pasted_text")`, applied with the existing add_chord helper at the end of default() (spacemacs.rs:741-748). `add_command` descends into vim's existing `g` node, so only `p` is replaced and the rest of the g map (g P, g v, g t, …) survives. Deviation from the plan, driven by the primary source: the plan said Normal **and** Select; upstream binds it in `evil-normal-state-map` only, so I applied it to Mode::Normal alone and left select-mode `g p` unbound as vim's base leaves it. The vim preset keeps `g p` = paste_after_cursor_after (keymap/vim.rs:1204) — the presets ship separately, which is what makes both key:normal:g p claims true in their own files. Measurement caveat, not a code gap: gen_port_report.py's spacemacs handling parses only CXCH_FULL, the `fn c[xch]_prefix()` bodies and CX_TYPABLE (gen_port_report.py:196-219), and its generic (chord,label,cmd) tuple scan runs over vim.rs only (gen_port_report.py:176-181). So `key:normal:g p` will still resolve to vim's paste_after_cursor_after in the report until that parser learns SPACEMACS_OVERRIDES. I did not touch the script and did not rename the table to slip past its regex — flagging it instead. Upstream: spacemacs develop layers/+spacemacs/spacemacs-evil/local/evil-unimpaired/evil-unimpaired.el:105-106 — `;; select pasted text` / `(define-key evil-normal-state-map (kbd "g p") (kbd "` [ v ` ]"))`; doc/DOCUMENTATION.org:2286 `| ~g p~ | Select pasted text |` | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |
| z f | Make current function or comments visible in buffer as much as possible | reposition-window: fit function on screen (z f chord stays vim create-fold) | ported | https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org |