Command input keystroke support #29

Closed
opened 2026-06-12 14:01:00 +01:00 by oli · 1 comment
Owner

I believe we have a requirement for Ctrl-A and Ctrl-E support (Home and End should work?), but I don't think we've added something simple like Esc (or double-Esc?) to remove a partly typed command and empty the input.

I believe we have a requirement for Ctrl-A and Ctrl-E support (Home and End should work?), but I don't think we've added something simple like Esc (or double-Esc?) to remove a partly typed command and empty the input.
Collaborator

Implemented in 66c8bdaADR-0049 (input-field readline keymap).

The full I1b readline set is now wired in the command input field (both modes):

Key Action
Esc Clear a partly-typed command
Ctrl-A / Ctrl-E Cursor to line start / end (Home/End aliases)
Ctrl-W Delete previous word (readline-style, UTF-8 safe)
Ctrl-K Kill to end of line
Ctrl-U Kill to start of line

Design decisions (all user-confirmed):

  • Single Esc clears (not double-Esc) — discoverable over accident-proof; an unsubmitted draft can be lost, but a submitted line is always recoverable from history.
  • Esc precedence preserved: a live Tab-completion memo still wins (Esc undoes the completion first, ADR-0022); Esc clears only when no memo is alive.
  • Ctrl-O + Esc does not clear the input — while a sidebar panel is focused, Esc exits navigation mode upstream of the input keymap, so the draft is preserved (locked by a regression test).
  • Cursor-only keys (Ctrl-A/E) leave history navigation intact like Home/End; buffer-mutating keys (Esc-clear, Ctrl-W/K/U) end it like Backspace.

Tests: 22 new Tier-1 tests; 2458 pass / 0 fail / 0 skip (1 ignored), clippy clean. requirements.md I1b marked done.

Deferred (user-confirmed):

  • On-screen advertisement of these keys → issue #27 (bottom status line).
  • The load-picker modal's path-entry field keeps its own minimal editing (this change is scoped to the main command input).
  • Demo-mode badges (ADR-0047) for the new Ctrl-chords — Esc already badges [ESC]; the glyph-less Ctrl-chords are an ADR-0047 follow-up.
Implemented in `66c8bda` — **ADR-0049** (input-field readline keymap). The full **I1b** readline set is now wired in the command input field (both modes): | Key | Action | |---|---| | `Esc` | Clear a partly-typed command | | `Ctrl-A` / `Ctrl-E` | Cursor to line start / end (Home/End aliases) | | `Ctrl-W` | Delete previous word (readline-style, UTF-8 safe) | | `Ctrl-K` | Kill to end of line | | `Ctrl-U` | Kill to start of line | **Design decisions (all user-confirmed):** - **Single `Esc` clears** (not double-Esc) — discoverable over accident-proof; an unsubmitted draft can be lost, but a submitted line is always recoverable from history. - **`Esc` precedence preserved:** a live Tab-completion memo still wins (Esc undoes the completion first, ADR-0022); Esc clears only when no memo is alive. - **`Ctrl-O` + `Esc` does not clear the input** — while a sidebar panel is focused, Esc exits navigation mode upstream of the input keymap, so the draft is preserved (locked by a regression test). - Cursor-only keys (Ctrl-A/E) leave history navigation intact like Home/End; buffer-mutating keys (Esc-clear, Ctrl-W/K/U) end it like Backspace. **Tests:** 22 new Tier-1 tests; 2458 pass / 0 fail / 0 skip (1 ignored), clippy clean. `requirements.md` **I1b** marked done. **Deferred (user-confirmed):** - On-screen advertisement of these keys → issue **#27** (bottom status line). - The load-picker modal's path-entry field keeps its own minimal editing (this change is scoped to the main command input). - Demo-mode badges (ADR-0047) for the new Ctrl-chords — `Esc` already badges `[ESC]`; the glyph-less Ctrl-chords are an ADR-0047 follow-up.
Sign in to join this conversation.