From 99b2bee027d97d40185367dfb46dd7d0700c95f3 Mon Sep 17 00:00:00 2001 From: Nicholas Quezada Date: Fri, 12 Dec 2025 18:37:30 -0700 Subject: [PATCH] feat: add line-by-line scrolling controls for messages - Add "Line up" and "Line down" actions to session menu - Add keybind configurations for messages_line_up and messages_line_down - Enable precise one-line scrolling navigation in message view --- .../src/cli/cmd/tui/routes/session/index.tsx | 22 +++++++++++++++++++ packages/opencode/src/config/config.ts | 2 ++ 2 files changed, 24 insertions(+) diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index 1c1e4b65e..8bdd35019 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -534,6 +534,28 @@ export function Session() { dialog.clear() }, }, + { + title: "Line up", + value: "session.line.up", + keybind: "messages_line_up", + category: "Session", + disabled: true, + onSelect: (dialog) => { + scroll.scrollBy(-1) + dialog.clear() + }, + }, + { + title: "Line down", + value: "session.line.down", + keybind: "messages_line_down", + category: "Session", + disabled: true, + onSelect: (dialog) => { + scroll.scrollBy(1) + dialog.clear() + }, + }, { title: "First message", value: "session.first", diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index 42f6b11e9..df5b06443 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -448,6 +448,8 @@ export namespace Config { messages_first: z.string().optional().default("ctrl+g,home").describe("Navigate to first message"), messages_last: z.string().optional().default("ctrl+alt+g,end").describe("Navigate to last message"), messages_last_user: z.string().optional().default("none").describe("Navigate to last user message"), + messages_line_up: z.string().optional().describe("Scroll messages up by one line"), + messages_line_down: z.string().optional().describe("Scroll messages down by one line"), messages_copy: z.string().optional().default("y").describe("Copy message"), messages_undo: z.string().optional().default("u").describe("Undo message"), messages_redo: z.string().optional().default("r").describe("Redo message"),