The editor
The editor — the Helm — is not a borrowed widget. It was built for prose,
fenced to exactly six requirements, and nothing more. Anything harder than the six belongs to your
own editor via the ^e handoff. When it is on screen, the content pane wears a
thick ✎ border — you always know when you are holding the pen.
The session
Entering the Write view checks the leaf out: an exclusive lock in the store, and a plain-text
working file in checked-out/ — so in-flight work survives any crash of anything. If a
working file already exists you resume it; if someone else holds the lock you get a
read-only view with the holder's name in the title. All editor keys are disabled
in read-only; everything else works.
The six requirements
1 · Soft wrap on the printed measure. Lines wrap at the same ~62-character measure the printed page uses, centred in the pane — what you see approximates the typeset width.
2 · Typewriter scrolling. The cursor stays pinned near 45% of the pane height; the document moves, your eyes don't.
3 · Focus dimming. ^f dims everything except the paragraph you are
in. Toggle it back off the same way.
4 · Decoration spans. Layers painted over the text without touching it: misspellings (red underline), AI suggestions (amber tint), continuity flags, Plank directive tokens (dim purple), block interiors (faint tint). This is the requirement no off-the-shelf widget had — and the reason the Helm exists.
5 · Vim-lite modal keys. Three modes, one yank buffer, no counts, no macros, no ex. The exact bindings:
| h j k l · arrows | move (j/k follow display rows over soft wrap, with a sticky goal column) |
| w · b · e | word forward · back · end of word |
| 0 · $ | start · end of line |
| { · } | paragraph back · forward |
| i · a · A | insert here · after cursor · at end of line |
| o · O | open a line below · above |
| x | delete the character |
| v | visual selection (motions extend; d/y/c act on it; Esc leaves) |
| p | paste — linewise yanks paste as a line, charwise at the cursor |
| u · ^r | undo · redo |
| / | incremental search — type to jump live, Enter keeps it, Esc restores where you were, n finds next |
The operators d (delete), c (change), y (yank) take a
motion:
| dd · yy | whole line (linewise) |
| dw · cw · yw | to the next word |
| db · cb / de · ce | back a word / through end of word |
| d$ · c$ / d0 · c0 | to end of line / to start of line |
| d{ · c{ / d} · c} | to previous / next paragraph edge |
Insert mode takes printable characters, Enter, Backspace, Delete and arrows;
Esc returns to Normal.
6 · Undo/redo. A flat edit journal over the rope; consecutive single-character
insertions in the same word coalesce, so u steps back by intention, not by keystroke.
Saving and leaving
| ^s | save the working file (the foot shows ●unsaved until you do) |
| q | quit — but a dirty leaf refuses: "unsaved — ^s saves · ^q discards and quits" |
| ^q | discard and quit, explicitly |
Saving writes the file; checking in (:ci -m "…" from the console, or
keel ci) turns it into a permanent revision, runs the Plank gate, and releases the
lock.
^m — the markup palette
Contextual on your selection. With text selected it offers the inline directives and
wraps the selection — select a phrase, choose think, get
@think{…}. With no selection it offers the block directives and
inserts the frame — choose quote, get the open and @end quote with your
cursor on the empty interior line. Type-ahead filters; a live preview shows what Enter will produce.
The full vocabulary is in Plank markup.
^e — your own editor
Long session, heavy surgery, or just homesickness for nvim: ^e saves, suspends the
TUI, opens the working file in $VISUAL / $EDITOR (notepad if neither is
set), and on exit reloads the result with decorations refreshed. Keel owns structure and review;
your editor is welcome to the typing.
Spellcheck
A bundled English dictionary plus your project's proper nouns — every entity name and
alias lands in .keel/dict.txt automatically whenever the loft changes, so
Kael and Hollow Gate are never flagged. Checks run in idle moments, only on
changed text; misspellings get the red underline decoration. If the dictionary ever fails to load
you get a visible notice, not silent nothing.
Davy is one keystroke away
^g opens the AI writing partner against the full context of your beat —
see Davy. Nothing it writes enters your prose except through your
explicit accept.