Conversation
ResolveShowTodoPane treats an absent show-todo-pane entry (or nil config) as open, explicit false as closed, explicit true as open. main.go resolves it after config load and sets model.ShowTodoPane BEFORE the initial SetSize, so updateLayout reserves the 44-col side-pane width at >= 85 columns; below the threshold the same layout path silently starts with the pane closed (no startup toast — /todos still toasts when opened later on a narrow terminal).
Focused pane gets an elevated background (chipBgColor) and a primary border plus a '[focused · esc to unfocus]' title marker; unfocused pane is unchanged.
A printable key while the pane is focused releases focus and falls through to the input (j/k/g stay scroll keys while focused, now visible via the focus highlight); clicking outside the pane also releases focus; an unfocused pane provably consumes no keys.
Closed
5 tasks
… key text
Dead-key / combining sequences deliver multi-rune Key.Text ("e"+U+0301
in one event); the old len(runes)==1 check missed them and kept trapping
typing in the focused pane. Release on the first printable non-control
rune instead.
Review fix cherry-picked from 0a97d2f (todo-pane multi-rune portion and
todo_routing_test.go additions only).
golangci-lint v2.13.2 flags internal/tui/update.go:270: SA6003 should range over string, not []rune(string). Ranging over a string already yields runes; drop the redundant conversion. Behavior identical. Reproduced locally with golangci-lint v2.13.2; full go test ./... -race -count=1 green.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Update 2026-09-25
New since the original description (
b148100): the todos pane now also releases focus on any printable key that arrives as a multi-rune sequence. Dead-key and combining-character input (e.g.e+ combining acute) is delivered as a single event carrying multiple runes, and the oldlen(runes)==1check missed it — so those sequences kept holding focus. Focus now releases on the first printable non-control rune, so dead-key/combining input falls through to the input like any other key.The todos pane now starts open — and focusing it can no longer trap your typing.
config.json"show-todo-pane": falserestores closed-at-start. Under 85 columns the pane stays closed (silently — the width guard exists to keep narrow terminals usable, not to nag).[focused · esc to unfocus]marker, so you can always tell where your keys are going.New config key:
show-todo-pane(bool, defaulttrue).Split out of #133 (TUI changes evaluated separately, per review).
Testing
exit 0 — all 18 packages green (15 ok, 3 without test files).
gofmt -lon the touched files: no output (clean)go vet ./cmd/late ./internal/config ./internal/tui: clean/todotoggle + silent width guard (todo_pane_test.go), focus rendering/marker/background (todo_pane_test.go), unfocused pane passes keys through, printable-key release-and-fall-through, click-in/click-out focus (todo_routing_test.go)