The Kalem Book GitHub

This Book describes Kalem's main branch, which may be ahead of the latest release.

Keys

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 Mail 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