Files
codewhale/crates
Hunter Bown 31198c11d0 fix(tui): unify transcript-nav shortcuts under Alt+<key>; stop eating first letters
v0.8.29 spot-fixed `g` with a gg double-tap (commit c13ddb04d), but
the underlying bug class still affected `G`, `[`, `]`, `?`, `l`, and
both `v`/`V`: bare press on an empty composer hijacked the keystroke
for transcript navigation, swallowing the first character of a
message. Even the gg fix itself only suppressed the SCROLL — the
first `g` was still eaten, so typing "good morning" produced "ood
morning" with no whale and no warning.

Unified fix: all seven bindings now require the `Alt` modifier (same
pattern as the existing `Alt+R` history search and `Alt+V` tool
details). Plain letters always insert as text:

  Alt+G          → scroll to top
  Alt+Shift+G    → scroll to bottom
  Alt+[ / Alt+]  → previous / next tool output
  Alt+?          → open searchable help (F1 / Ctrl+/ also bound)
  Alt+L          → pager for the last message
  Alt+V          → tool-details pager  (was already bound; only path now)

The `App::transcript_pending_g` field from the v0.8.29 half-fix is
removed along with its Esc / Enter / Char-catch-all resets. The
existing helper `details_shortcut_modifiers` (which accepted bare,
Shift, and Alt-only — the permissive predicate that ate the bare `v`
keystroke) is replaced by `alt_nav_modifiers`, which requires `Alt`,
allows `Shift`, and blocks `Ctrl` / `Super` so the bindings don't
collide with platform clipboard or window-management shortcuts.

Same modifier vocabulary as `Alt+R` / `Alt+P` / `Alt+1..3`, so this
makes the keymap more consistent rather than introducing a new
convention.

Regression-guarded by `alt_nav_modifiers_require_alt_and_exclude_ctrl_super`
in `crates/tui/src/tui/ui/tests.rs`, which exercises every modifier
combination the predicate needs to accept or reject. Full
`cargo test -p deepseek-tui` (2751 tests) passes; clippy clean; fmt
clean.

User-facing migration: any user who learned the bare-letter nav
shortcuts in v0.8.x needs to add `Alt+`. The trade-off is unambiguous
— losing the first letter of "good", "great", "let", "list", "very",
"verify", and anything starting with `?` was burning more users than
the bare-letter shortcuts were serving.
2026-05-11 19:21:31 -05:00
..
2026-05-10 20:40:20 -05:00
2026-05-10 20:40:20 -05:00
2026-05-10 20:40:20 -05:00
2026-05-10 20:40:20 -05:00
2026-05-10 20:40:20 -05:00
2026-05-10 20:40:20 -05:00
2026-05-10 20:40:20 -05:00