Skip to content

feat(web): assignable chat scroll keybinding commands - #280

Merged
bk-agent-01 merged 1 commit into
stagefrom
t3code/chat-scroll-commands
Oct 7, 2026
Merged

bk-agent-01 merged 1 commit into
stagefrom
t3code/chat-scroll-commands

Conversation

@bk-agent-01

Copy link
Copy Markdown
Collaborator

Problem

No keybinding command scrolls the chat. Only PageUp and PageDown scroll it, and a MacBook has no PageUp key. So you cannot scroll with the left hand or bind scrolling to a key of your choice.

Fix

  • Add three commands with no default shortcut, so any user can assign them in keybindings.json or Settings → Keybindings:
    • chat.scrollPageUp: scrolls up one page, like PageUp.
    • chat.scrollPageDown: scrolls down one page, like PageDown.
    • chat.scrollToEnd: jumps to the latest message and turns live-follow on again, like the "scroll to end" button.
  • The page commands use the existing page-scroll controller. A tap scrolls one smooth page. While you hold the key, the scroll continues and gets faster. The first keyup or a window blur stops it. On macOS no keyup comes for a letter while Cmd is held, so the modifier keyup is the signal.
  • Settings labels, a focused test (each command is listed, has a label, and has no default), and one paragraph in docs/user/keybindings.md.
  • Mobile: not applicable. Mobile has a fixed hardware-keyboard command set and does not read keybindings.json.

Example binding for one-handed use:

{ "key": "ctrl+w", "command": "chat.scrollPageUp", "when": "!terminalFocus" },
{ "key": "ctrl+s", "command": "chat.scrollPageDown", "when": "!terminalFocus" },
{ "key": "ctrl+shift+s", "command": "chat.scrollToEnd", "when": "!terminalFocus" }

Checks

  • vp test run on KeybindingsSettings.logic.test.ts and settingsSearch.test.ts (86 tests) and contracts/src/keybindings.test.ts (11 tests): all passed.
  • vp run typecheck passed in packages/contracts and apps/web.
  • The fork-marker check passed.
  • I did not test it in a browser. No screenshots: this change adds no visible UI except the new rows in Settings → Keybindings.

Model and harness: Claude Opus 5.5 in Claude Code (T3 Code).

🤖 Generated with Claude Code

Add chat.scrollPageUp, chat.scrollPageDown and chat.scrollToEnd. They have
no default shortcut, so anyone can bind chat scrolling to any key (for
example ctrl+w / ctrl+s for one-handed use). Page commands drive the
existing PageUp/PageDown controller, so holding the key keeps scrolling;
any keyup or window blur releases it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added size:M vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Oct 7, 2026
@bk-agent-01
bk-agent-01 merged commit a00a7c0 into stage Oct 7, 2026
40 of 44 checks passed
@bk-agent-01

Copy link
Copy Markdown
Collaborator Author

Merged by bk-agent-01 on Tushar's explicit go in the T3 session ("Merge anyway"), pinned to head ec92923. The only red check, Test Server 4 (AcpSessionRuntime.processTree test), already fails on stage (it also failed on #279) and is not touched by this PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant