Files
typewriter/docs/v0.6-markdown.md
Julien Calixte 55a8d21e0f docs(macroplan): split each version into its own page
Move each version's scope checklist and status out of the monolithic
macroplan into a dedicated docs/vX.Y-<slug>.md page; macroplan keeps the
source block, the rollup status, and a one-line summary + link per
version. v0.1 reuses its existing product/technical pages.

Also drop the "Optional column ruler at 80" requirement from v0.6.
2026-07-12 02:10:29 +02:00

2.3 KiB

v0.6 — Markdown affordances

Part of the Typoena macro plan. Requirements and targets: qfd.md. Load-bearing decisions: adr.md.

Status: render affordances done early; the snippet engine remains (snippets are net-new scope, added 2026-07-08).

  • Heading lines bolded in render (faux-bold double-strike)
  • List continuation on Enter inside - / 1. (with empty-item exit)
  • Soft-wrap at word boundaries
  • Snippets — trigger-driven text expansion for Markdown authoring (Zed-inspired, but no completion popup: e-ink's ~630 ms refresh rules out a live filtering menu, and it fights the distraction-free premise). Shape, mirroring the existing list_marker insert-transform:
    • Tab in Insert mode triggers expansion: if the word immediately before the caret matches a snippet prefix, expand it; otherwise insert spaces as today (expand_snippet(word) -> Option<(body, stops)>, alongside list_marker).
    • A snippet body is literal text plus numbered empty tab stops $1 … $n and a final $0. There is no placeholder text (${1:label}) — the editor has no selection/overtype model, so a placeholder would just be text to delete. There are no dynamic or computed values either (e.g. no date — there's no RTC; the wall clock is valid only after Wi-Fi+SNTP, so it'd stamp 1970 on a cold boot).
    • After expansion the caret lands on $1; Tab advances to the next stop, forward only (no Shift-Tab). Stored stop offsets shift with edits at the caret (all pending stops are always after it). The session auto-aborts on Esc, a mode change, or a motion that leaves the stops.
    • On a typing pause (same throttle as the insert cursor / word-count refresh — the panel never repaints per keystroke), if the word before the caret is a snippet prefix, the side panel shows the hint (the target expansion). Quiet while typing; the hint appears on pause.
    • The snippet table is hard-coded in the binary to start; a git-syncable file on SD (/sd/repo/.snippets) is a later option, deferred while SD is still blocked.
    • Starter set: link [$1]($2)$0, image ![$1]($2)$0, fenced code block, etc.