fix(rofi): #143 — reset selection to row 0 on query edits (inputchange)

Upstream keeps the selected row *index* across a refilter (rofi#2317),
so backspacing grew the list back under a stationary highlight and Enter
launched the wrong app. The maintainer's reply pointed at the
inputchange {} config block — adopted as pure config in the generated
config.rasi (kb-row-first on every query edit), no patch, no source
build. Covers every rofi surface: drun, text menus, dmenu pickers.

V2: headless VM (theme-shot variant driving QMP keystrokes). On HEAD the
repro left the highlight on row 3 (kitty -> Bulk Rename); patched, the
highlight snaps to the first entry after backspace — verified in the
executive-slate drun grid, boreal's whole-swap grid, and the
keyboard-layout dmenu picker. nix flake check --no-build passes; the
rendered config.rasi carries the nested block.

Backlog #143 deleted (watch closed), decision recorded as Resolved,
ROADMAP checkmark added.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-17 20:37:35 +01:00
parent 8a4914c22e
commit f899b192fe
3 changed files with 32 additions and 56 deletions

View File

@@ -589,6 +589,25 @@ Design/decision records and a running log of shipped work (items marked
hardened against — a clean install cannot reach that state. V2:
`checks.doctor` grew a linger sub-case (warn fires, exit stays 0, clears
after `disable-linger`). The Waybar exec-once loose thread became #149.
- ✓ **Rofi highlight lands on an unrelated entry after backspace (#143,
2026-07-17):** upstream keeps the selected row *index* across a refilter
(rofi#2317), so backspacing grew the list back under a stationary
highlight — Enter then launched the wrong app. Bernardo's 07-16 ruling
("wait for upstream, no source-built rofi distro-wide") was priced
against a patch; the maintainer's reply pointed at a knob the item's
`-dump-config` survey had missed: the `inputchange {}` configuration
block. Shipped as config, zero build cost: `inputchange { action:
"kb-row-first"; }` in the generated `config.rasi` (rofi.nix
extraConfig — home-manager renders nested sections), so every edit of
the query resets the highlight to row 0, dmenu/launcher/text-menus
alike — the same "reset on filter change" dmenu and fuzzel ship.
Trade-off accepted: arrow-down-then-refine no longer holds position,
but that is precisely the interaction that was broken. V2 headless VM
(scratch theme-shot variant driving QMP keystrokes): on HEAD the
repro's highlight stayed on row 3 ("kitty" → "Bulk Rename"); patched,
backspace snaps it to the first entry — shown in the drun grid
(executive-slate), boreal's whole-swap grid, and the keyboard-layout
dmenu picker.
- ✓ **Dock mode survives a rebuild (#142, 2026-07-16):** Bernardo: every rebuild
while docked re-lit the laptop panel and threw a workspace onto it, and he
re-picked Dock mode by hand. It was not forgetfulness — **a rebuild performed