Skip to content

GH-95, GH-96, GH-97: filter the move picker, complete the selection footer, bold only the selection - #98

Merged
blainemotsinger merged 5 commits into
mainfrom
GH-95-96-97
Nov 6, 2026
Merged

blainemotsinger merged 5 commits into
mainfrom
GH-95-96-97

Conversation

@blainemotsinger

@blainemotsinger blainemotsinger commented Nov 6, 2026 •

Copy link
Copy Markdown
Member

Three issues on one branch, one commit each, as requested.

Closes #95
Closes #96
Closes #97

#95 — the move picker filters by typed folder name

m used to offer every mailbox with arrow-key navigation only. Typing now
narrows the list, using the same crisp fuzzy match as / (sahilm/fuzzy,
membership only, folder order preserved).

  • Printable keys belong to the query, but the keymap is resolved first: a key
    bound to an action the picker honours still does it, so a rebound esc,
    enter, m or quit works here. With the shipped map q closes and esc
    closes; letters bound to actions this picker does not honour (d, f, A,
    u, ...) are text. That is the line that makes filtering usable without
    taking a rebound key hostage.
  • The modal shows the query only once something is typed, so the default dialog
    keeps its rows, and it reports no folders match rather than an empty box.
  • enter with no match says no folders match and leaves the picker open; it
    never moves to a folder nobody chose.
  • The footer names type:filter while the picker is open.

#96 — the footer lists every bulk action and the count

  • In a range, the footer now carries selected N message(s) and then every
    action the range supports: delete, archive, junk, move, flag, read, cancel,
    extend, quit. Previously it listed only delete, flag, move, quit, cancel,
    extend, so archive and junk looked unavailable in exactly the mode they work.
  • The count comes from actionUIDs(), so it names what the next action will
    actually touch (thread rows and filters included), not a raw index span.
  • At 105 columns the full set plus the count is 99 cells, the content width; if
    a longer count would overflow, packHints drops whole hints from the tail.
  • Help gains a selection group (start/clear, extend, delete/archive/junk/move/
    flag/read selected, cancel) and two modals rows for the picker's typing and
    backspace. The all-groups help test moved from 140x60 to 140x80: the property
    is that every group renders, not that the map fits one particular window.
  • No j/k anywhere: TestNoHintNamesJOrK still scans every footer context,
    and the range extends with the arrows.

#97 — bold marks only the selection

Unread rows used UnreadStyle (bold), and the cursor and range used
SelectedStyle (also bold), so bold marked every unread message and the
selection was invisible. Unread now renders in NormalStyle and keeps the *
marker; bold is the cursor and the active range only. UnreadStyle is removed
rather than left unused.

This is what makes the #96 range visible: the count says how many, the bold says
which rows.

Verification

  • gofmt -l . empty, go vet ./... clean.
  • go test -count=1 ./... ok; go test -race -count=1 ./... ok.
  • go test ./tui -cover -count=1 91.4% (floor 89.1).
  • golangci-lint v2.15.0 0 issues.

RED before GREEN, quoted:

Not included: #69 (the live-gate record) needs the real account and the Fastmail
web UI.

@blainemotsinger blainemotsinger self-assigned this Nov 6, 2026
@blainemotsinger
blainemotsinger merged commit a403c5b into main Nov 6, 2026
3 checks passed
@blainemotsinger
blainemotsinger deleted the GH-95-96-97 branch November 6, 2026 15:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

only bold currently selected message on list pane select multiple messages or bulk action search and fuzz match in move box for folder name

1 participant