Skip to content

Commit bfb8c53

Browse files
feat: bind vim-style line-by-line scrolling (#8980)
Co-authored-by: Aiden Cline <[email protected]>
1 parent 052f887 commit bfb8c53

File tree

8 files changed

+66
-6
lines changed

8 files changed

+66
-6
lines changed

packages/opencode/src/cli/cmd/tui/event.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ export const TuiEvent = {
1616
"session.compact",
1717
"session.page.up",
1818
"session.page.down",
19+
"session.line.up",
20+
"session.line.down",
1921
"session.half.page.up",
2022
"session.half.page.down",
2123
"session.first",

packages/opencode/src/cli/cmd/tui/routes/session/index.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -601,6 +601,28 @@ export function Session() {
601601
dialog.clear()
602602
},
603603
},
604+
{
605+
title: "Line up",
606+
value: "session.line.up",
607+
keybind: "messages_line_up",
608+
category: "Session",
609+
disabled: true,
610+
onSelect: (dialog) => {
611+
scroll.scrollBy(-1)
612+
dialog.clear()
613+
},
614+
},
615+
{
616+
title: "Line down",
617+
value: "session.line.down",
618+
keybind: "messages_line_down",
619+
category: "Session",
620+
disabled: true,
621+
onSelect: (dialog) => {
622+
scroll.scrollBy(1)
623+
dialog.clear()
624+
},
625+
},
604626
{
605627
title: "Half page up",
606628
value: "session.half.page.up",

packages/opencode/src/config/config.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -651,8 +651,14 @@ export namespace Config {
651651
session_unshare: z.string().optional().default("none").describe("Unshare current session"),
652652
session_interrupt: z.string().optional().default("escape").describe("Interrupt current session"),
653653
session_compact: z.string().optional().default("<leader>c").describe("Compact the session"),
654-
messages_page_up: z.string().optional().default("pageup").describe("Scroll messages up by one page"),
655-
messages_page_down: z.string().optional().default("pagedown").describe("Scroll messages down by one page"),
654+
messages_page_up: z.string().optional().default("pageup,ctrl+alt+b").describe("Scroll messages up by one page"),
655+
messages_page_down: z
656+
.string()
657+
.optional()
658+
.default("pagedown,ctrl+alt+f")
659+
.describe("Scroll messages down by one page"),
660+
messages_line_up: z.string().optional().default("ctrl+alt+y").describe("Scroll messages up by one line"),
661+
messages_line_down: z.string().optional().default("ctrl+alt+e").describe("Scroll messages down by one line"),
656662
messages_half_page_up: z.string().optional().default("ctrl+alt+u").describe("Scroll messages up by half page"),
657663
messages_half_page_down: z
658664
.string()

packages/opencode/src/server/routes/tui.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,8 @@ export const TuiRoutes = lazy(() =>
275275
session_compact: "session.compact",
276276
messages_page_up: "session.page.up",
277277
messages_page_down: "session.page.down",
278+
messages_line_up: "session.line.up",
279+
messages_line_down: "session.line.down",
278280
messages_half_page_up: "session.half.page.up",
279281
messages_half_page_down: "session.half.page.down",
280282
messages_first: "session.first",

packages/sdk/js/src/gen/types.gen.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -842,6 +842,14 @@ export type KeybindsConfig = {
842842
* Scroll messages down by one page
843843
*/
844844
messages_page_down?: string
845+
/**
846+
* Scroll messages up by one line
847+
*/
848+
messages_line_up?: string
849+
/**
850+
* Scroll messages down by one line
851+
*/
852+
messages_line_down?: string
845853
/**
846854
* Scroll messages up by half page
847855
*/

packages/sdk/js/src/v2/gen/types.gen.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1019,6 +1019,14 @@ export type KeybindsConfig = {
10191019
* Scroll messages down by one page
10201020
*/
10211021
messages_page_down?: string
1022+
/**
1023+
* Scroll messages up by one line
1024+
*/
1025+
messages_line_up?: string
1026+
/**
1027+
* Scroll messages down by one line
1028+
*/
1029+
messages_line_down?: string
10221030
/**
10231031
* Scroll messages up by half page
10241032
*/

packages/sdk/openapi.json

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8282,12 +8282,22 @@
82828282
},
82838283
"messages_page_up": {
82848284
"description": "Scroll messages up by one page",
8285-
"default": "pageup",
8285+
"default": "pageup,ctrl+alt+b",
82868286
"type": "string"
82878287
},
82888288
"messages_page_down": {
82898289
"description": "Scroll messages down by one page",
8290-
"default": "pagedown",
8290+
"default": "pagedown,ctrl+alt+f",
8291+
"type": "string"
8292+
},
8293+
"messages_line_up": {
8294+
"description": "Scroll messages up by one line",
8295+
"default": "ctrl+alt+y",
8296+
"type": "string"
8297+
},
8298+
"messages_line_down": {
8299+
"description": "Scroll messages down by one line",
8300+
"default": "ctrl+alt+e",
82918301
"type": "string"
82928302
},
82938303
"messages_half_page_up": {

packages/web/src/content/docs/keybinds.mdx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@ OpenCode has a list of keybinds that you can customize through the OpenCode conf
3131
"session_child_cycle": "<leader>right",
3232
"session_child_cycle_reverse": "<leader>left",
3333
"session_parent": "<leader>up",
34-
"messages_page_up": "pageup",
35-
"messages_page_down": "pagedown",
34+
"messages_page_up": "pageup,ctrl+alt+b",
35+
"messages_page_down": "pagedown,ctrl+alt+f",
36+
"messages_line_up": "ctrl+alt+y",
37+
"messages_line_down": "ctrl+alt+e",
3638
"messages_half_page_up": "ctrl+alt+u",
3739
"messages_half_page_down": "ctrl+alt+d",
3840
"messages_first": "ctrl+g,home",

0 commit comments

Comments
 (0)