Fix terminal input mode and cursor rendering

This commit is contained in:
slhx agent
2026-06-21 18:08:59 +02:00
parent 5d7f239d34
commit 9aafe0e01c
7 changed files with 276 additions and 90 deletions
+13 -16
View File
@@ -95,16 +95,11 @@ selection entry, leader rails, tool commands, save/quit, and recoverability.
### Insert mode
Text-entry mode for ordinary typing. Insert mode preserves terminal text input
and exposes a visible return path to Normal through a non-modifier command rail.
In Insert mode, `Space` enters a pending-space state instead of immediately
committing ambiguity. If the next key is ordinary text, `mim` commits the literal
space and the next character. If the user pauses after `Space`, `mim` opens the
Insert rail. The canonical mobile path back to Normal is `Space` pause, then
`n` for "normal". `Space` pause, then `Space` commits a literal space from the
rail. Physical keyboards may use conventional direct keys such as Escape as
aliases, but those aliases are optional accelerators, not required controls.
Text-entry mode for ordinary typing. `mim` starts in Normal mode; Insert mode is
entered explicitly with `i`, `a`, `o`, or another visible command. In Insert mode,
`Space` commits a literal space immediately. Physical keyboards may use
conventional direct keys such as Escape as aliases back to Normal, but those
aliases are optional accelerators, not required controls.
### Select mode
@@ -128,10 +123,12 @@ small typed argument surface entered from a visible command.
## Leader keys and rails
`Space` is the primary leader. Pressing and pausing on Space opens the command
rail. The rail shows mnemonic groups and available next keys. A command either
executes after one key or enters a second-level group; common paths should not go
deeper than two keys after the mode/leader.
`Space` is the primary leader in Normal mode. In Insert mode, Space inserts a
literal space immediately; terminals do not give `mim` reliable key-up/hold
semantics, so hold-to-leader is intentionally not a v1 path. The rail shows
mnemonic groups and available next keys. A command either executes after one key
or enters a second-level group; common paths should not go deeper than two keys
after the mode/leader.
`m` is the match/object prefix in Normal and Select modes. It is deliberately not
Vim `%`: `%` remains a physical-keyboard alias where available, while `m` is the
@@ -188,7 +185,7 @@ such as arrow keys, Home/End, PageUp/PageDown, Escape, or `%`.
| `Space w` | write/save current buffer |
| `Space q` | close/quit current surface, with dirty-buffer protection |
| `Space ?` | show contextual help/command rail |
| Insert `Space` pause, `n` | return from Insert to Normal without Esc/Ctrl/Alt |
| Normal `i` / `a` / `o` | enter Insert explicitly; `mim` starts in Normal mode |
## Editing operations
@@ -398,7 +395,7 @@ Design-only and needing future implementation slices:
- source-profile-backed format, organize-imports, code-action edit application;
- format-on-save policy and one-shot save-without-format;
- contextual rails for all prefixes listed in this document;
- Insert pending-space rail, including `Space` pause then `n` to Normal.
- explicit mobile-safe Normal/Insert transitions without required Esc/Ctrl/Alt.
Future slices should implement one vertical behavior at a time with replay or
headless tests: for example, `m m` delimiter jump, `s i` indent selection,