Skip to content

feat(desktop): add focused-message and unread navigation shortcuts - #7453

Open
JohnRichardEnders wants to merge 1 commit into
block:mainfrom
JohnRichardEnders:feat/priority-keyboard-shortcuts
Open

JohnRichardEnders wants to merge 1 commit into
block:mainfrom
JohnRichardEnders:feat/priority-keyboard-shortcuts

Conversation

@JohnRichardEnders

Copy link
Copy Markdown

Summary

Add keyboard-driven conversation handling to the standard desktop UI while preserving existing composer and terminal bindings.

  • F6 moves from the composer into the message timeline without modifying the draft; unmodified up/down move between focused messages.
  • On a focused message: T / right arrow replies in a thread, R opens the existing reaction picker, E edits when permitted, U marks unread, and L copies the message link. Left arrow returns from a thread to the source conversation; Escape returns to the composer.
  • Add previous/next unread conversation navigation: Option+Shift+up/down on macOS, Ctrl+Alt+Shift+up/down on Windows/Linux. Uses rendered sidebar order, includes rendered DMs, skips read/muted entries, and does not wrap.
  • Add Cmd/Ctrl+Shift+T for Inbox's Threads filter and Cmd/Ctrl+Shift+J for the current conversation's unread position.
  • Register the bindings in shortcut help and correct strikethrough help to the existing Cmd/Ctrl+Shift+S binding.

Single-letter actions require direct message-row focus, not a nested control or editable field. IME, dialogs, modifier conflicts, existing up-arrow-to-edit, Shift+Escape, and terminal bindings retain precedence. Focus styling and scroll margins keep selected messages clear of the fixed header/composer; marking unread returns focus to the stable composer before the timeline rebuilds.

Duplicate check

Closest work: #3377 / #3078 already covers ordinary previous/next channel shortcuts and explicitly defers unread navigation. This PR does not implement or override those ordinary shortcuts. #3459 is an alternate developer-mode UI, rather than these standard-UI bindings. #6549 concerns customizable bindings, which remain outside this change. Searched issues and PRs for shortcuts, keyboard navigation, focused-message actions, and unread/thread shortcuts; no equivalent standard-UI contribution found.

Testing

  • TypeScript typecheck, Biome checks on all 16 changed files, and file-size checks pass.
  • 17 focused unit cases pass, covering modifier/platform precedence, focused-action availability, IME/overlay guards, and unread ordering/boundaries.
  • Two retained browser regressions pass: focused messages remain visible beneath timeline chrome without altering drafts; edit/thread/mark-unread focus transitions preserve keyboard operation.
  • Local Chromium smoke exercised reaction picking, copy link, unread conversation navigation, unread-position jump, Threads navigation, and shortcut help. Visually checked focus styling and help layout.

Browser verification uses the existing mock Tauri/relay bridge. Windows/Linux chord matching is unit-tested; native Windows/Linux runtime interaction was not exercised.

@JohnRichardEnders
JohnRichardEnders requested a review from a team as a code owner September 7, 2026 15:04
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

🔐 Codex Security Review

Status: review required for the current range.

The current range is 3c7f288c60d67df78577b237e27c3dfc8831aaa1...94f12be97786bcc93ee171a22db796e24ee1d139.
A new review must complete for this exact range. When manual authorization
is required, a Block organization member must comment exactly
@buzz-security-review 94f12be97786bcc93ee171a22db796e24ee1d139 to authorize a new review.
Any previous review applies only to its recorded range.

Signed-off-by: John R. Enders <92937551+JohnRichardEnders@users.noreply.github.com>
@JohnRichardEnders
JohnRichardEnders force-pushed the feat/priority-keyboard-shortcuts branch from 9290ed4 to 94f12be Compare September 7, 2026 15:12
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.

1 participant