Keys
Table of Contents
Kalem has two keymaps, chosen in the settings: Word-like keys, the default, and Vim keys. On macOS, Command takes the place of Control in the Word-like keys (Cmd+S saves).
1. Word-like keys
| Keys | Command |
|---|---|
| Ctrl+S, Ctrl+Shift+S | Save, Save As |
| Ctrl+Z, Ctrl+Y | Undo, Redo (also Ctrl+Shift+Z) |
| Ctrl+X, Ctrl+C, Ctrl+V | Cut, Copy, Paste |
| Ctrl+A | Select All |
| Shift+Enter | Line break within a paragraph |
| Ctrl+, | Settings |
| Ctrl+Q | Quit |
| Ctrl+O, Ctrl+N, Ctrl+W | Open, New, Close document |
| Ctrl+Shift+P, F1 | Command palette (Ctrl+G in terminals) |
The other keys are in the chapters of what they do, and in the command palette.
2. Vim keys
With editor.keymap_profile = "vim", every key is Vim's: the modes,
motions, operators, text objects and counts, registers and macros,
marks with the jump and change lists, search with Vim's patterns, and
the command line with ranges, :s, :g, :sort, :set, its history
(Up, Down, CTRL-P, CTRL-N) and CTRL-R, and the file and window commands
(:w, :e, :sp, :bn, :tabnew, :Ex for the file manager,
:Projects); gq and gw format to textwidth, CTRL-W's keys work
the panes, ZZ and ZQ close. Some eight hundred key sequences in
tests/vim/cases.json are run in Vim itself and in Kalem, and the text
and cursor after them must agree; they come from fifteen thousand that
were tried against Vim, over tabs, Turkish letters and blank lines.
Not there: Vim script and expressions (:let, :exe, \=, CTRL-R
), mappings (:map=, :abbreviate), :help, the :! filter, :a,
:i and :c, and the motions over screen lines (g$; in Org gj
and gk move by element, as in Doom Emacs). The fold commands zo,
zc, za, zM and zR fold Org's headings.
The keys of the Vim plugins Doom Emacs has on are there too, where Vim
leaves the key unused: vim-surround's ds(, cs"' and ysiw) (yss
the line; a sign such as * puts itself on both sides, Org's and
Markdown's emphasis), vim-commentary's gc and gcc with the
language's comment markers, and vim-unimpaired's ] SPC and [ SPC
(blank lines), ]b and [b (documents), ]w and [w (workspaces),
]d and [d (the changes a plugin marks), ]t and [t (TODO, FIXME
and the like). As in Neovim, * and # on a selection search for it.
Where Doom changes a key Vim has (s, Y, gt, gx, < in Visual
mode), the key is Vim's.
:q closes the pane when the window is split, else the document, as a
tab closes: Kalem stays open, an empty document taking the last one's
place, and quits from :q only when nothing is left to close (in the
terminal, from the last document, as Vim does). :q! closes the
document losing its changes and no other's; :qa quits, :qa!
quits without saving after asking.
The Word-like Control and Alt keys are off where the Vim layer is on,
except, as in Doom Emacs, Alt with the arrows (structure moves, table
rows and columns), Control or Alt with Enter, and Ctrl+Space for
completion; on macOS, Command keeps the Word-like keys. In Org
documents >> and << demote and promote headings and indent list
items. Kalem's defaults differ from Vim's where Vim keeps Vi's:
autoindent is on, shiftwidth and expandtab are the document's
own indentation (four spaces, two, or a tab, as Tab and a closing
bracket indent) until set, backspace is indent,eol,start,
nrformats is bin,hex and joinspaces is off; :set changes them
for the document. editor.vim.leader makes another key the leader,
and editor.vim.modes limits Vim keys to some kinds of documents:
org, markdown, csv, latex, text and directory.
2.1. The leader
Space is the leader, as in Doom Emacs. Press it and wait a moment
(keys.hints_delay, 400 ms): a panel shows what can follow, in Doom's
groups, with the keys Kalem does not bind yet marked "(later)" or
"(plugin)". The panel follows any prefix, C-x and C-c of the Emacs
keys too; keys.hints = false turns it off. The keys you will use
first:
| Keys | Command |
|---|---|
SPC p p |
Switch Project |
SPC SPC, SPC p f |
Find File in Project |
SPC / |
Search in Project |
SPC ,, SPC b b |
Switch Document |
SPC f f, SPC . |
Open a file by path (a new name makes it) |
SPC f s, SPC b k |
Save; Close Document |
SPC o -, SPC p P |
File manager; projects |
SPC c S, SPC o P |
Outline; the file in the folder tree |
SPC s s |
Search lines, the cursor following |
SPC : |
Command palette |
SPC t z, SPC w v |
Focus mode; split view |
SPC q l, SPC q q |
Restore the last session; quit |
SPC h k |
What the next keys run |
SPC u is Emacs's universal argument: the next command runs four
times, SPC u SPC u sixteen, digits after SPC u give the count, and
Escape drops it. Every key of Doom's leader map, and what it does in
Kalem or why it does not yet, is in the table at the end of this
chapter. A key does what Doom's does wherever Kalem can; where Doom's
command has no counterpart in Kalem, the key may run one of Kalem's
own, marked "Kalem" in the table. With Doom's :os macos keys, SPC o
o and SPC o O show the file and the project in Finder (the system's
file manager elsewhere), SPC o i opens a terminal there.
2.2. Panes, workspaces and sessions
SPC w divides the window into panes, as Doom does: SPC w v and SPC
w s split it beside and below, SPC w h j k l go to the pane in that
direction, SPC w H J K L move the pane to that edge, SPC w o shows
only this pane and again all, SPC w = balances, SPC w x swaps,
SPC w u and SPC w C-r undo and redo the layout. A click focuses a pane; the new pane of a
split shows the document shown before it, or the same document beside
itself when only one is open. Both editors have panes; in the
terminal a rule with the document's name divides them.
SPC TAB keeps workspaces, named sets of the window's documents, each
with its panes: SPC TAB n starts one, SPC TAB TAB chooses one, SPC
TAB [ and SPC TAB ] go to the one before and after, SPC TAB 1 to
9 to one by its place and SPC TAB 0 to the last, SPC TAB r
renames and SPC TAB d deletes it (its documents join the next
workspace); SPC TAB s and SPC TAB l save and restore one as a
session.
A session is the open documents, the cursor in each, the one shown
and the project. Kalem saves the session last when it quits; SPC q
l restores it, and so does starting when editor.restore_session is
on. SPC q S saves a session by name, and SPC q L restores one;
they live in sessions/ in Kalem's state folder.
3. The local leader SPC m
SPC m holds the keys of the document's kind, as Doom's :lang org,
:lang latex and :lang markdown modules have them. The tables come
from tests/keys/doom-localleader.toml, checked against the keymap in
a document of each kind.
3.1. Org
| Doom | What it does | In Kalem |
|---|---|---|
SPC m t |
Set the TODO keyword | org.todo.set |
SPC m q |
Set tags | org.tags.set |
SPC m o |
Set a property | org.property.set |
SPC m x |
Toggle the checkbox | list.toggleCheckbox |
SPC m @ |
Insert a citation | org.cite.insert |
SPC m , |
Switch to an Org document | file.switch |
SPC m + |
Cycle the list bullet | list.cycleBullet |
SPC m * |
Toggle heading (Doom: or recalculate the table at point) | org.headline.toggle |
SPC m T |
The TODO list | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC m K |
Remove the source blocks' results | No source blocks to evaluate yet (Babel) |
SPC m # |
Update statistics cookies | Not needed: Kalem updates the cookies as checkboxes and TODO keywords change |
SPC m ' |
Edit the block at point in a pane | Not yet: a block edited in a pane of its own; blocks are edited in place |
SPC m . |
Go to a heading | search.lines |
SPC m / |
Go to a heading in all open documents | search.lines |
SPC m A |
Archive the subtree | org.archive.sibling |
SPC m e |
Export dispatch | export.dialog |
SPC m f |
Footnote action | org.footnote.action |
SPC m h |
Toggle heading | org.headline.toggle |
SPC m i |
Toggle item | list.toggleItem |
SPC m I |
Create an ID | Planned: phase 3 (org-id) |
SPC m k |
Move the subtree up (Kalem; Doom: remove a source block's result) | org.headline.moveSubtreeUp |
SPC m j |
Move the subtree down (Kalem) | org.headline.moveSubtreeDown |
SPC m n |
Store a link | link.store |
SPC m P |
Publish | Planned: phase 3 (publishing projects) |
SPC m a a |
Attach a file | Planned: phase 3 (org-attach) |
SPC m a c |
Attach to a new folder | Planned: phase 3 (org-attach) |
SPC m a d |
Delete an attachment | Planned: phase 3 (org-attach) |
SPC m a f |
Find an attachment | Planned: phase 3 (org-attach) |
SPC m a l |
Attach by link | Planned: phase 3 (org-attach) |
SPC m a n |
New attachment | Planned: phase 3 (org-attach) |
SPC m a o |
Open an attachment | Planned: phase 3 (org-attach) |
SPC m a u |
Attach from a URL | Planned: phase 3 (org-attach) |
SPC m b - |
Insert a rule row | table.insertHline |
SPC m b a |
Align the table | table.align |
SPC m b c |
Create a table | table.create |
SPC m b e |
Edit the field | Fields are edited in place |
SPC m b f |
Edit the formulas | table.setFormula |
SPC m b r |
Recalculate | table.recalculate |
SPC m b s |
Sort the rows | table.sortRows |
SPC m b t o |
Toggle the coordinate overlays | Planned: T2.1 (the formula overlay) |
SPC m b t f |
Toggle the formula debugger | No formula debugger; the formula bar shows a field's formula |
SPC m b b |
Blank the field | Not yet as a key; select the field's text and delete it |
SPC m b h |
Field info | Not yet as a key; the formula bar shows the field and its formula |
SPC m b R |
Recalculate every table | Not yet: SPC m b r recalculates the table at point |
SPC m b i c |
Insert a column | table.insertColumn |
SPC m b i r |
Insert a row | table.insertRow |
SPC m b i h |
Insert a rule row | table.insertHline |
SPC m b i H |
Insert a rule row and move | table.insertHline |
SPC m b d c |
Delete the column | table.deleteColumn |
SPC m b d r |
Delete the row | table.killRow |
SPC m c c |
Cancel the clock | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC m c d |
Mark the default task | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC m c e |
Modify the effort estimate | org.property.set |
SPC m c g |
Go to the clocked task | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC m c l |
Toggle the last clock | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC m c r |
Clock report | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC m c R |
Resolve clocks | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC m c i |
Clock in | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC m c I |
Clock in the last task | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC m c o |
Clock out | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC m c E |
Set the effort | org.property.set |
SPC m c t |
Evaluate a time range | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC m d d |
Set a deadline | org.deadline |
SPC m d s |
Schedule | org.schedule |
SPC m d t |
Insert a timestamp | org.insert.timestamp |
SPC m d T |
Insert an inactive timestamp | org.insert.timestamp |
SPC m g g |
Go to a heading | search.lines |
SPC m g G |
Go to a heading in the open documents | search.lines |
SPC m g v |
Go to a visible heading | Not yet: jumping to a heading on screen by letter |
SPC m g c |
Go to the clocked task | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC m g i |
Go to an ID | Planned: phase 3 (org-id) |
SPC m g r |
Go to the last refile target | Planned: T2.11 (refile history) |
SPC m g x |
Open the link at point (Kalem; Doom: go to the last capture) | org.link.open |
SPC m l i |
Store a link (with an ID in Doom) | link.store |
SPC m l l |
Insert a link | org.insert.link |
SPC m l L |
Insert all stored links | org.link.insertStored |
SPC m l s |
Store a link | link.store |
SPC m l S |
Insert the last stored link | org.link.insertStored |
SPC m l d |
Remove the link | org.link.remove |
SPC m l t |
Toggle link display | view.toggleSourceMarkers |
SPC m l y |
Copy the link at point | org.link.copy |
SPC m l c |
Insert a link from the clipboard with its title | Kalem fetches no web pages; SPC m l l inserts a link |
SPC m p p |
Set the priority | org.priority.set |
SPC m p u |
Raise the priority | org.priority.up |
SPC m p d |
Lower the priority | org.priority.down |
SPC m r r |
Refile | org.refile |
SPC m r R |
Refile to the last target | Planned: T2.11 (refile history) |
SPC m r . |
Refile in this document | org.refile |
SPC m s a |
Toggle the archive tag | org.archive.toggleTag |
SPC m s A |
Archive to a sibling | org.archive.sibling |
SPC m s d |
Cut the subtree | org.headline.cutSubtree |
SPC m s h |
Promote the subtree | org.headline.promoteSubtree |
SPC m s l |
Demote the subtree | org.headline.demoteSubtree |
SPC m s j |
Move the subtree down | org.headline.moveSubtreeDown |
SPC m s k |
Move the subtree up | org.headline.moveSubtreeUp |
SPC m s n |
Narrow to the subtree | view.narrowToSubtree |
SPC m s N |
Widen | view.widen |
SPC m s r |
Refile | org.refile |
SPC m s s |
Sparse tree | search.lines |
SPC m s S |
Sort the subtree | org.headline.sort |
SPC m s b |
The subtree in an indirect buffer | Not yet: a subtree narrowed in a pane of its own; SPC m s n narrows this one |
SPC m s c |
Clone the subtree with a time shift | Not yet: copies of a subtree with shifted dates |
3.2. LaTeX
| Doom | What it does | In Kalem |
|---|---|---|
SPC m a |
Build and view | latex.build |
SPC m b |
Build (Kalem) | latex.build |
SPC m c |
Compile | latex.build |
SPC m e |
Insert an equation | latex.insert.equation |
SPC m f |
Insert a font command (Kalem; Doom: fold the paragraph) | latex.format.italic |
SPC m s |
Change the section level | latex.section.setLevel |
SPC m v |
View the PDF | latex.showInPdf |
SPC m = |
Table of contents | view.outline |
SPC m * |
Toggle math preview | view.toggleMath |
SPC m p |
Preview the formulas | view.toggleMath |
SPC m l |
Problems | latex.problems |
SPC m n |
Next problem (Kalem) | latex.nextProblem |
SPC m ; |
Table of contents (RefTeX) | view.outline |
SPC m m |
Run a command | Not yet: choosing among the TeX commands; SPC m c builds |
SPC m P |
Remove the preview at point | Formulas preview away from the cursor; SPC m p toggles them |
3.3. Markdown
With the Word-like keys, Ctrl+B, Ctrl+I and Ctrl+K make the selection bold, italic or a link, and a second time take the markers away. With Vim's keys these are the local leader's.
| Doom | What it does | In Kalem |
|---|---|---|
SPC m ' |
Edit the code block in a pane | Planned: T2.7i.5 (panes) |
SPC m e |
Export (to Org) | markdown.convertToOrg |
SPC m o |
Open the export | Planned: T2.7c (Markdown export through Org) |
SPC m p |
Preview the export | Planned: T2.7c (Markdown export through Org) |
SPC m i b |
Insert bold | markdown.emphasis.bold |
SPC m i i |
Insert italic | markdown.emphasis.italic |
SPC m i e |
Insert italic | markdown.emphasis.italic |
SPC m i s |
Insert strike-through | markdown.emphasis.strikeThrough |
SPC m i C |
Insert a code block | Type three backticks and the language |
SPC m i [ |
Insert a checkbox | Type - [ ] at the start of an item |
SPC m i T |
Insert a table of contents | Not yet: a table of contents written into the document; the outline shows one |
SPC m i c |
Insert code | markdown.emphasis.code |
SPC m i l |
Insert a link | markdown.insert.link |
SPC m i L |
Insert a reference link | Planned: T2.7c.9 |
SPC m i u |
Insert a URI | markdown.insert.link |
SPC m i f |
Insert a footnote | Planned: T2.7c.9 |
SPC m i w |
Insert a wiki link | edit.complete |
SPC m i - |
Insert a rule | Type three dashes |
SPC m i t |
Insert a table | Type a header line with pipes; Tab aligns it |
SPC m t e |
Toggle math | view.toggleMath |
SPC m t f |
Toggle code fontification | Code blocks are always coloured |
SPC m t i |
Toggle images | Images always show away from the cursor |
SPC m t l |
Toggle URL hiding | view.toggleSourceMarkers |
SPC m t m |
Toggle markup hiding | view.toggleSourceMarkers |
SPC m t w |
Toggle wiki links | view.toggleSourceMarkers |
SPC m t x |
Toggle the checkbox | markdown.toggleCheckbox |
SPC m x |
Toggle the checkbox | markdown.toggleCheckbox |
SPC m b a |
Align the table | markdown.table.align |
SPC m b s |
Sort the table | markdown.table.sort |
SPC m i 1 |
Insert a level 1 heading | Type # and a space |
SPC m i 2 |
Insert a level 2 heading | Type ## and a space |
SPC m i 3 |
Insert a level 3 heading | Type ### and a space |
SPC m i 4 |
Insert a level 4 heading | Type #### and a space |
SPC m i 5 |
Insert a level 5 heading | Type ##### and a space |
SPC m i 6 |
Insert a level 6 heading | Type ###### and a space |
4. Your own keys
keymap.json in the settings directory changes any key:
[
// Ctrl+Shift+W sets the tag "work".
{ "keys": "ctrl+shift+w", "command": "org.tags.set",
"args": { "tags": ["work"] }, "when": "onHeadline" },
// No Ctrl+B for bold.
{ "keys": "ctrl+b", "command": "-org.emphasis.bold" },
// Two-key sequences, Emacs style.
{ "keys": "C-c C-t", "command": "org.todo.cycle" },
// Vim keys: SPC p t lists the project's recent files; no SPC q q.
{ "keys": "leader p t", "command": "project.recentFiles", "when": "vimCommand" },
{ "keys": "leader q q", "command": "-app.quit" }
]
kalem commands lists the command IDs, and the palette finds a
command by its ID too. leader stands for the Vim leader.
docs/keymaps/emacs.json is a complete keymap with Emacs's Org keys,
to copy from.
Every command serves some types of text. The type is the one at the
cursor, innermost first: a source block's language (python), latex
in a formula, the file's kind (org, markdown, csv or text), a
file's language (rust). So
Ctrl+B makes bold text in Org and does nothing in a Python block, and
Alt+Up moves lines in code but headings, items and rows in Org. A
binding can use the type: "when": "textType = python". =kalem
commands --type org lists the commands of a type with their scope
and keys.
5. Keys in a terminal
A terminal without the kitty keyboard protocol cannot send some keys: Ctrl+Enter arrives as Enter, Ctrl+Shift+P as Ctrl+P, and Command never arrives. The terminal editor then uses other keys, which the palette and menus show:
| Keys | In such a terminal |
|---|---|
| Ctrl+Enter (Cycle TODO State) | Ctrl+T |
| Ctrl+, (Settings) | Alt+, |
| Shift+Enter (line break) | Ctrl+J |
| Ctrl+Shift+Z (Redo) | Ctrl+Y |
| Ctrl+Shift+P (palette) | Ctrl+G (and F1) |
| Ctrl+Tab, Ctrl+Shift+Tab | Ctrl+PageDown, Ctrl+PageUp |
| Ctrl+/ (source view) | Ctrl+_ |
Other Control keys such a terminal cannot send become Alt and the same
key (Ctrl+Shift+T is Alt+T, Ctrl+1 is Alt+1); a binding in
keymap.json can name its own with "terminalKeys": "alt+w". Alt
reaches Kalem only when the terminal sends it: in macOS Terminal, set
"Use Option as Meta key" (Settings, Profiles, Keyboard); in iTerm2,
"Left Option key: Esc+" (Profiles, Keys). Terminals with the kitty
keyboard protocol (kitty, WezTerm, Ghostty, foot) send every key as it
is.
In the terminal editor's palette and prompts, the line edits as in a shell or on Vim's command line: Ctrl+A and Ctrl+E go to its start and end, Ctrl+U and Ctrl+K delete to them, and Ctrl+W deletes the word before the cursor.
6. Doom's leader map in Kalem
Every key of Doom Emacs's leader map, and what it does in Kalem or why
it does not yet: Planned names the task that brings it. The table is
generated from tests/keys/doom-leader.toml, which the tests check
against the Vim keymap. The file manager's keys are in its chapter.
| Doom | What it does | In Kalem |
|---|---|---|
SPC : |
Run a command (M-x) | view.palette |
SPC SPC |
Find a file in the project | project.findFile |
SPC . |
Find a file | file.open |
SPC , |
Switch document | file.switch |
SPC < |
Switch document | file.switch |
SPC ` |
Last document | file.last |
SPC / |
Search the project | project.search |
SPC ' |
Resume the last picker | picker.resume |
SPC * |
Search the project for the word at point | project.searchWord |
SPC ~ |
Toggle the last popup | view.toggleLastPanel |
SPC RET |
Jump to a bookmark | bookmark.jump |
SPC X |
Capture | Planned: T2.7i.18 |
SPC u |
Universal argument | app.universalArgument |
SPC ; |
Evaluate an expression | No Lisp to evaluate; the palette runs commands |
SPC x |
Scratch document | file.scratch |
SPC b b |
Switch document | file.switch |
SPC b B |
Switch document across projects | file.switch |
SPC b c |
Clone into a new pane | view.split |
SPC b d |
Kill document | file.close |
SPC b k |
Kill document | file.close |
SPC b i |
The documents list | view.openFiles |
SPC b K |
Kill all documents | file.closeAll |
SPC b l |
Last document | file.last |
SPC b m |
Set bookmark | bookmark.set |
SPC b M |
Delete bookmark | bookmark.delete |
SPC b n |
Next document | file.next |
SPC b ] |
Next document | file.next |
SPC b N |
New empty document | file.new |
SPC b O |
Kill other documents | file.closeOthers |
SPC b p |
Previous document | file.previous |
SPC b [ |
Previous document | file.previous |
SPC b r |
Revert document | app.revert |
SPC b s |
Save document | app.save |
SPC b S |
Save all documents | file.saveAll |
SPC b x |
Scratch document | file.scratch |
SPC b X |
Switch to the scratch document | file.scratch |
SPC b y |
Copy the document | file.copyText |
SPC b z |
Bury document | file.bury |
SPC b Z |
Kill buried documents | Not yet: closing the documents no pane shows; SPC b O closes the others |
SPC b - |
Toggle narrowing | view.narrowToElement |
SPC b C |
Clone into another pane | view.split |
SPC b I |
The workspace's documents | view.openFiles |
SPC b R |
Rename buffer | A document is named by its file; SPC f R renames the file |
SPC b u |
Save as root | No editing as another user |
SPC f c |
Open the workspace settings | file.openWorkspaceSettings |
SPC f C |
Copy this file | file.copy |
SPC f d |
Find a folder | file.open |
SPC f D |
Delete this file | file.delete |
SPC f e |
Find a file in emacs.d | Kalem has no emacs.d |
SPC f E |
Browse emacs.d | Kalem has no emacs.d |
SPC f f |
Find a file | file.open |
SPC f F |
Find a file from here | file.open |
SPC f l |
Locate a file | Not yet: a file by name across every project; SPC p f finds one in a project |
SPC f p |
The settings folder | file.openSettingsFolder |
SPC f P |
Your keymap.json | file.openKeymap |
SPC f r |
Recent files | file.recent |
SPC f R |
Rename or move this file | file.rename |
SPC f s |
Save | app.save |
SPC f S |
Save as | app.saveAs |
SPC f u |
Sudo find file | No editing as another user |
SPC f U |
Sudo this file | No editing as another user |
SPC f y |
Copy the path | file.copyPath |
SPC f Y |
Copy the path from the project | file.copyRelativePath |
SPC s b |
Search the document | search.lines |
SPC s B |
Search all open documents | search.lines |
SPC s d |
Search this folder | search.folder |
SPC s D |
Search another folder | search.folder |
SPC s e |
Search emacs.d | Kalem has no emacs.d |
SPC s f |
Locate a file | Not yet: a file by name across every project; SPC p f finds one in a project |
SPC s i |
Jump to a symbol or heading | search.lines |
SPC s I |
Jump to a symbol in all documents | search.lines |
SPC s j |
Jump list | Not yet: a jump list shared by both keymaps; Vim's C-o and C-i where the Vim layer has them |
SPC s k |
Look up documentation | Waits for looking things up in the Book, and for hover in code (3.8) |
SPC s K |
Look up in all docsets | Waits for looking things up in the Book, and for hover in code (3.8) |
SPC s l |
Jump to a link | Not yet: jumping to a link on screen by letter |
SPC s L |
Open a link | Not yet: a list of the document's links; SPC s b with part of the link finds its line |
SPC s m |
Jump to a bookmark | bookmark.jump |
SPC s o |
Search online | search.online |
SPC s O |
Search online (Kalem asks no engine: search.online_url) |
search.online |
SPC s p |
Search the project | project.search |
SPC s P |
Search another project | project.searchOther |
SPC s r |
Jump to a mark | Not yet: a list of the Vim marks |
SPC s s |
Search the document | search.lines |
SPC s S |
Search for the word at point | search.lines |
SPC s t |
Dictionary | Waits for the spell checker's dictionary (3.6) |
SPC s T |
Thesaurus | Waits for the spell checker's dictionary (3.6) |
SPC s u |
Undo history | Not yet: the undo history as a list |
SPC w v |
Split right | pane.splitRight |
SPC w s |
Split below | pane.splitBelow |
SPC w h |
Focus left | pane.focus |
SPC w j |
Focus down | pane.focus |
SPC w k |
Focus up | pane.focus |
SPC w l |
Focus right | pane.focus |
SPC w H |
Move left | pane.move |
SPC w J |
Move down | pane.move |
SPC w K |
Move up | pane.move |
SPC w L |
Move right | pane.move |
SPC w c |
Close pane | pane.close |
SPC w d |
Close pane | pane.close |
SPC w o |
Only this pane | pane.only |
SPC w m m |
Maximize | pane.only |
SPC w w |
Next pane | pane.next |
SPC w p |
Previous pane | pane.previous |
SPC w = |
Balance | pane.balance |
SPC w + |
Taller | pane.resize |
SPC w - |
Shorter | pane.resize |
SPC w < |
Narrower | pane.resize |
SPC w > |
Wider | pane.resize |
SPC w x |
Swap | pane.swap |
SPC w r |
Rotate | pane.rotate |
SPC w R |
Rotate back | pane.rotate |
SPC w u |
Undo the layout | pane.undo |
SPC w U |
Redo the layout (Kalem; Doom: SPC w C-r) |
pane.redo |
SPC w n |
New pane | pane.new |
SPC w q |
Close pane and document | pane.closeWithDocument |
SPC w S |
Split below and follow | pane.splitBelow |
SPC w V |
Split right and follow | pane.splitRight |
SPC w C-h |
Focus left | pane.focus |
SPC w C-j |
Focus down | pane.focus |
SPC w C-k |
Focus up | pane.focus |
SPC w C-l |
Focus right | pane.focus |
SPC w C-w |
Next pane | pane.next |
SPC w W |
Previous pane in order | pane.next |
SPC w C-o |
Only this pane | pane.only |
SPC w C-u |
Undo the layout | pane.undo |
SPC w C-r |
Redo the layout | pane.redo |
SPC w t |
Top-left pane | Not yet: the first and the last pane; SPC w h j k l go by direction |
SPC w b |
Bottom-right pane | Not yet: the first and the last pane; SPC w h j k l go by direction |
SPC w m v |
Maximize vertically | Not yet: maximizing in one direction; SPC w m m shows the pane alone |
SPC w m s |
Maximize horizontally | Not yet: maximizing in one direction; SPC w m m shows the pane alone |
SPC w _ |
Set the height | Not yet: a height by count; SPC w + and SPC w - resize |
SPC w \vert{} |
Set the width | Not yet: a width by count; SPC w < and SPC w > resize |
SPC w T |
Tear off into a new frame | Not yet: a pane moved to a new window; SPC o f opens one |
SPC t b |
Big text | view.bigText |
SPC t c |
Fill column indicator | Not yet: a line at the fill column or the word target |
SPC t d |
Diff highlights (git gutter) | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC t f |
Diagnostics | Not yet: the checks of kalem check shown in the editor (3.8 for code) |
SPC t F |
Frame full screen | view.fullScreen |
SPC t g |
Evil goggles | An Evil package with nothing to show here |
SPC t i |
Indent guides | Not yet: indentation guides |
SPC t I |
Indent style | Not yet: the indentation style as a toggle |
SPC t l |
Line numbers | view.toggleLineNumbers |
SPC t m |
Math preview (Kalem) | view.toggleMath |
SPC t p |
Presentation mode | Waits for the slide show (3.7) |
SPC t r |
Read-only | view.toggleReadOnly |
SPC t s |
Spell checking | Waits for the spell checker (3.6) |
SPC t t |
Pomodoro timer | Org's Pomodoro timer is not part of Kalem |
SPC t v |
Visible mode | view.toggleSourceMarkers |
SPC t w |
Soft line wrapping | view.toggleWrap |
SPC t z |
Zen mode | view.focus |
SPC t Z |
Zen and full screen | view.zen |
SPC o - |
The file manager | dired.jump |
SPC o a a |
Agenda | Waits for the agenda (3.5); kalem query lists a project's tasks until then |
SPC o a t |
TODO list | Waits for the agenda (3.5); kalem query lists a project's tasks until then |
SPC o a m |
Tags search | Waits for the agenda (3.5); kalem query lists a project's tasks until then |
SPC o a v |
View search | Waits for the agenda (3.5); kalem query lists a project's tasks until then |
SPC o A |
Agenda | Waits for the agenda (3.5) |
SPC o b |
Export as HTML and open it in the browser | export.htmlBrowser |
SPC o d |
Debugger | No debugger in Kalem |
SPC o e |
Eshell | No shell inside Kalem |
SPC o E |
Eshell here | No shell inside Kalem |
SPC o f |
New frame | app.newWindow |
SPC o l |
Link at point (Kalem; Doom on macOS: LaunchBar) | org.link.open |
SPC o m |
No mail in Kalem | |
SPC o o |
Reveal in Finder | file.reveal |
SPC o O |
Reveal the project in Finder | file.reveal |
SPC o i |
Open in the terminal (iTerm in Doom) | app.terminal |
SPC o I |
Open in a new terminal window | app.terminal |
SPC o p |
Project sidebar | view.openFiles |
SPC o P |
Find the file in the project sidebar | view.revealInTree |
SPC o r |
REPL | No REPL in Kalem |
SPC o R |
REPL in this window | No REPL in Kalem |
SPC o F |
Select a frame | Not yet: choosing among Kalem's windows; the system's window switcher does |
SPC o D |
Docker | Docker is not part of Kalem |
SPC o t |
The system's terminal here (Kalem has none of its own) | app.terminal |
SPC o T |
The system's terminal at the project | app.terminal |
SPC o x |
Scratch (Kalem) | file.scratch |
SPC p . |
Browse the project | dired.projectRoot |
SPC p > |
Browse another project | project.browseOther |
SPC p ! |
Shell command at the root | project.shellCommand |
SPC p a |
Add a project | project.add |
SPC p b |
Switch to a project document | project.switchDocument |
SPC p c |
Compile the project | Not yet: a build command per project (a setting) |
SPC p C |
Repeat the compile | Not yet: a build command per project (a setting) |
SPC p d |
Remove a known project | project.remove |
SPC p D |
Project folder in the file manager (Kalem; Doom: discover the projects in a folder) | dired.projectRoot |
SPC p e |
Edit the project settings | file.openWorkspaceSettings |
SPC p f |
Find a file in the project | project.findFile |
SPC p F |
Find a file in another project | project.findFileOther |
SPC p g |
Configure the project | file.openWorkspaceSettings |
SPC p i |
Invalidate the project cache | project.refresh |
SPC p k |
Kill project documents | project.closeDocuments |
SPC p o |
Find the other file | file.other |
SPC p p |
Switch project | project.switch |
SPC p r |
Recent project files | project.recentFiles |
SPC p R |
Run the project | project.run |
SPC p s |
Save project documents | project.saveDocuments |
SPC p t |
List the project TODOs | project.todos |
SPC p T |
Test the project | project.test |
SPC p x |
Scratch in the project | file.scratch |
SPC p X |
Switch to the project's scratch document | file.scratch |
SPC p & |
Async shell command at the root | project.shellCommand |
SPC p P |
The projects view (Kalem) | dired.projects |
SPC h ' |
Describe the character at point | help.char |
SPC h c |
Describe key briefly | help.describeKey |
SPC h o |
Describe a symbol (the palette) | view.palette |
SPC h V |
Set a variable (the settings) | app.settings |
SPC h O |
Look up online | search.online |
SPC h b t |
Top-level bindings | help.bindings |
SPC h b m |
The mode's bindings | help.mode |
SPC h r t |
Reload the theme | help.reload |
SPC h r f |
Reload the font | help.reload |
SPC h l |
Recent keys (lossage) | Not yet: the keys pressed last as a list |
SPC h F |
Describe face | Not yet: a face's colors; SPC h t chooses the theme |
SPC h a |
Search the commands (the palette) | view.palette |
SPC h b b |
All bindings | help.bindings |
SPC h d |
Doom help | Not yet: the Book inside Kalem; its pages are in the book folder |
SPC h e |
Messages | Waits for the log view (T2.7g.2) |
SPC h f |
Describe a command (the palette shows each with its keys) | view.palette |
SPC h i |
Info | Not yet: the Book inside Kalem; its pages are in the book folder |
SPC h k |
Describe key | help.describeKey |
SPC h m |
Describe mode | help.mode |
SPC h n |
News | Not yet: the changelog inside Kalem |
SPC h p |
Describe package (the installed plugins) | plugin.list |
SPC h r r |
Reload | help.reload |
SPC h t |
Load theme | help.theme |
SPC h v |
Describe a setting (the settings) | app.settings |
SPC h w |
Where is a command bound (the palette shows its keys) | view.palette |
SPC h x |
Describe command | view.palette |
SPC h RET |
The manual | Not yet: the Book inside Kalem; its pages are in the book folder |
SPC c a |
Code actions | code.actions |
SPC c c |
Compile | Not yet: a build command per project (a setting) |
SPC c C |
Recompile | Not yet: a build command per project (a setting) |
SPC c d |
Definition | code.definition |
SPC c D |
References | code.references |
SPC c e |
Evaluate | In a table it recalculates the formulas; source blocks wait for Babel |
SPC c f |
Format | edit.formatDocument |
SPC c S |
Symbols (the outline) | view.outline |
SPC c o |
Organize imports | Not yet as a key of its own; SPC c a lists the server's actions, organizing the imports among them |
SPC c E |
Evaluate and replace | No source blocks to evaluate yet (Babel) |
SPC c s |
Send to the REPL | No REPL in Kalem |
SPC c i |
Implementations | code.implementation |
SPC c j |
Symbol in the document | search.lines |
SPC c J |
Symbol in the workspace | Waits for the language packs (3.8) |
SPC c k |
Documentation | code.documentation |
SPC c l |
Language server commands | Waits for the language packs (3.8) |
SPC c r |
Rename | code.rename |
SPC c t |
Type definition | code.typeDefinition |
SPC c w |
Delete trailing whitespace | edit.trimTrailingWhitespace |
SPC c W |
Delete trailing blank lines | edit.trimTrailingBlankLines |
SPC c x |
Diagnostics | code.problems |
SPC c X |
Project diagnostics | code.allProblems |
SPC g g |
Status | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g b |
Switch branch | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g B |
Blame | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g c c |
Commit | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g S |
Stage the file | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g U |
Unstage the file | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g R |
Revert the file | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g L |
Log of the file | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g t |
Time machine | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g [ |
Previous hunk | edit.previousChange |
SPC g ] |
Next hunk | edit.nextChange |
SPC g o o |
Open on the remote | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g G |
Status here | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g / |
Dispatch | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g r |
Revert the hunk | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g s |
Stage the hunk | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g y |
Copy the link to the remote | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g Y |
Copy the link to the remote's homepage | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g . |
This file's git commands | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g D |
Delete this file from git | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g F |
Fetch | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g C |
Clone a repository | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g c b |
New branch | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g c f |
Fixup commit | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g c r |
Initialize a repository | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g c R |
Clone a repository | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g f f |
Find a file in a revision | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g f g |
Find the git configuration file | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g f c |
Show a commit | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g l r |
List repositories | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g l s |
List submodules | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g o h |
Open the remote's homepage | Needs the git plugin of getkalem/plugins (not in the core, D29) |
SPC g ' |
Forge's commands | Needs a forge plugin of getkalem/plugins (issues and pull requests; not the git plugin's, D29) |
SPC g f i |
Find an issue | Needs a forge plugin of getkalem/plugins (issues and pull requests; not the git plugin's, D29) |
SPC g f p |
Find a pull request | Needs a forge plugin of getkalem/plugins (issues and pull requests; not the git plugin's, D29) |
SPC g o r |
Open the remote | Needs a forge plugin of getkalem/plugins (issues and pull requests; not the git plugin's, D29) |
SPC g o c |
Open a commit on the remote | Needs a forge plugin of getkalem/plugins (issues and pull requests; not the git plugin's, D29) |
SPC g o i |
Open an issue | Needs a forge plugin of getkalem/plugins (issues and pull requests; not the git plugin's, D29) |
SPC g o p |
Open a pull request | Needs a forge plugin of getkalem/plugins (issues and pull requests; not the git plugin's, D29) |
SPC g o I |
Open the issues | Needs a forge plugin of getkalem/plugins (issues and pull requests; not the git plugin's, D29) |
SPC g o P |
Open the pull requests | Needs a forge plugin of getkalem/plugins (issues and pull requests; not the git plugin's, D29) |
SPC g l i |
List issues | Needs a forge plugin of getkalem/plugins (issues and pull requests; not the git plugin's, D29) |
SPC g l p |
List pull requests | Needs a forge plugin of getkalem/plugins (issues and pull requests; not the git plugin's, D29) |
SPC g l n |
List notifications | Needs a forge plugin of getkalem/plugins (issues and pull requests; not the git plugin's, D29) |
SPC g c i |
New issue | Needs a forge plugin of getkalem/plugins (issues and pull requests; not the git plugin's, D29) |
SPC g c p |
New pull request | Needs a forge plugin of getkalem/plugins (issues and pull requests; not the git plugin's, D29) |
SPC n a |
Agenda | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC n c |
Toggle the last clock | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC n C |
Cancel the clock | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC n d |
Deft | Deft is not part of Kalem |
SPC n l |
Store a link | link.store |
SPC n m |
Tags view | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC n n |
Capture | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC n N |
Go to the capture target | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC n o |
Active clocks | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC n r a |
Open a random note | Needs the graph plugin of getkalem/plugins (Logseq graphs and Obsidian vaults; not in the core, D29) |
SPC n r f |
Find a note | Needs the graph plugin of getkalem/plugins (Logseq graphs and Obsidian vaults; not in the core, D29) |
SPC n r F |
Find a reference | Not yet: Org Roam's references (ROAM_REFS) have no counterpart in Logseq or Obsidian |
SPC n r g |
Show the graph | Needs the graph plugin of getkalem/plugins (Logseq graphs and Obsidian vaults; not in the core, D29) |
SPC n r i |
Insert a link to a note | Needs the graph plugin of getkalem/plugins (Logseq graphs and Obsidian vaults; not in the core, D29) |
SPC n r n |
Capture to a note | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC n r r |
Toggle the backlinks | Needs the graph plugin of getkalem/plugins (Logseq graphs and Obsidian vaults; not in the core, D29) |
SPC n r R |
The backlinks as a document | Needs the graph plugin of getkalem/plugins (Logseq graphs and Obsidian vaults; not in the core, D29) |
SPC n r s |
Read the graph again | Needs the graph plugin of getkalem/plugins (Logseq graphs and Obsidian vaults; not in the core, D29) |
SPC n r d b |
The previous daily note | Needs the graph plugin of getkalem/plugins (Logseq graphs and Obsidian vaults; not in the core, D29) |
SPC n r d d |
The daily note of a date | Needs the graph plugin of getkalem/plugins (Logseq graphs and Obsidian vaults; not in the core, D29) |
SPC n r d D |
Capture to a date | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC n r d f |
The next daily note | Needs the graph plugin of getkalem/plugins (Logseq graphs and Obsidian vaults; not in the core, D29) |
SPC n r d m |
Tomorrow's daily note | Needs the graph plugin of getkalem/plugins (Logseq graphs and Obsidian vaults; not in the core, D29) |
SPC n r d M |
Capture to tomorrow | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC n r d n |
Capture to today | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC n r d t |
Today's daily note | Needs the graph plugin of getkalem/plugins (Logseq graphs and Obsidian vaults; not in the core, D29) |
SPC n r d T |
Capture to today | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC n r d y |
Yesterday's daily note | Needs the graph plugin of getkalem/plugins (Logseq graphs and Obsidian vaults; not in the core, D29) |
SPC n r d Y |
Capture to yesterday | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC n r d - |
The daily notes' folder | Needs the graph plugin of getkalem/plugins (Logseq graphs and Obsidian vaults; not in the core, D29) |
SPC n s |
Search the notes | notes.search |
SPC n S |
Search the notes' headings | Not yet for the notes folder (SPC n s searches its text); in a Logseq graph or an Obsidian vault, the graph plugin's Find Heading |
SPC n f |
Find a file in the notes | Not yet: a file picker over the notes folder; SPC n F shows the folder |
SPC n F |
Browse the notes | notes.browse |
SPC n * |
Search the notes for the word at point | Not yet: SPC n s and the word typed |
SPC n t |
TODO list | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC n v |
Agenda views | Planned: phase 3 (3.5, agenda, capture and clocking) |
SPC n y |
Export to the clipboard | edit.copyHtml |
SPC n Y |
Export to the clipboard as rich text | edit.copyRichText |
SPC i e |
Emoji | insert.emoji |
SPC i f |
File name | insert.fileName |
SPC i p |
Evil ex path | Not yet: Vim's :r !echo is not there |
SPC i F |
File path | insert.filePath |
SPC i r |
From a register | insert.fromRegister |
SPC i s |
Snippet | Planned: T3.8.3 (snippets) |
SPC i u |
Unicode character | insert.unicode |
SPC i y |
From the clipboard history | insert.fromHistory |
SPC q f |
Close the frame | window.close |
SPC q F |
Clear the frame: close every document | file.closeAll |
SPC q K |
Save the session and quit | session.saveAndQuit |
SPC q l |
Restore the last session | session.restore |
SPC q L |
Restore a session | session.restoreNamed |
SPC q q |
Quit | app.quit |
SPC q Q |
Quit without saving | app.quitWithoutSaving |
SPC q r |
Restart and restore | app.restartAndRestore |
SPC q R |
Restart | app.restart |
SPC q d |
Restart the Emacs server | Kalem has no server to restart |
SPC q s |
Save the session | session.save |
SPC q S |
Save the session to a file | session.saveAs |
SPC TAB TAB |
List workspaces | workspace.list |
SPC TAB n |
New workspace | workspace.new |
SPC TAB N |
New named workspace | workspace.newNamed |
SPC TAB d |
Delete workspace | workspace.delete |
SPC TAB r |
Rename workspace | workspace.rename |
SPC TAB [ |
Previous workspace | workspace.previous |
SPC TAB ] |
Next workspace | workspace.next |
SPC TAB 1 |
Workspace 1 | workspace.switch |
SPC TAB 2 |
Workspace 2 | workspace.switch |
SPC TAB 3 |
Workspace 3 | workspace.switch |
SPC TAB 4 |
Workspace 4 | workspace.switch |
SPC TAB 5 |
Workspace 5 | workspace.switch |
SPC TAB 6 |
Workspace 6 | workspace.switch |
SPC TAB 7 |
Workspace 7 | workspace.switch |
SPC TAB 8 |
Workspace 8 | workspace.switch |
SPC TAB 9 |
Workspace 9 | workspace.switch |
SPC TAB ` |
Last workspace | workspace.last |
SPC TAB s |
Save the workspace | workspace.save |
SPC TAB l |
Load a workspace | workspace.load |
SPC TAB . |
Switch workspace | workspace.list |
SPC TAB x |
Kill the session | Not yet: closing every workspace at once; SPC TAB d deletes one, SPC b K closes every document |
SPC TAB D |
Delete a saved workspace | workspace.deleteSaved |
SPC TAB R |
Restore the last session | session.restore |
SPC TAB 0 |
The last workspace | workspace.switch |