Skip to content

Commit 124714c

Browse files
fix(tui): keep command palette available in questions
1 parent b2a0635 commit 124714c

2 files changed

Lines changed: 26 additions & 4 deletions

File tree

packages/opencode/src/cli/cmd/tui/app.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@ const appGlobalBindingCommands = [
9595
] as const
9696

9797
const appBindingCommands = [
98-
"command.palette.show",
9998
"model.list",
10099
"model.cycle_recent",
101100
"model.cycle_recent_reverse",
@@ -939,6 +938,11 @@ function App(props: { onSnapshot?: () => Promise<string[]> }) {
939938
commands: appCommands(),
940939
}))
941940

941+
useBindings(() => ({
942+
enabled: () => dialog.stack.length === 0,
943+
bindings: tuiConfig.keybinds.get(COMMAND_PALETTE_COMMAND),
944+
}))
945+
942946
useBindings(() => ({
943947
mode: OPENCODE_BASE_MODE,
944948
bindings: tuiConfig.keybinds.gather("app", appBindingCommands),

packages/opencode/test/cli/tui/keymap.test.tsx

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { expect, test } from "bun:test"
55
import { onCleanup } from "solid-js"
66
import { createTuiResolvedConfig } from "../../fixture/tui-runtime"
77
import {
8+
COMMAND_PALETTE_COMMAND,
89
getOpencodeModeStack,
910
OPENCODE_BASE_MODE,
1011
OpencodeKeymapProvider,
@@ -68,12 +69,14 @@ test("mode-less bindings stay active when opencode mode changes", async () => {
6869
const offKeymap = registerOpencodeKeymap(keymap, renderer, config)
6970
const offGlobal = keymap.registerLayer({
7071
commands: [
72+
{ name: COMMAND_PALETTE_COMMAND, run() {} },
7173
{ name: "session.list", run() {} },
7274
{ name: "session.new", run() {} },
7375
{ name: "session.page.up", run() {} },
7476
{ name: "session.first", run() {} },
7577
],
7678
bindings: config.keybinds.gather("test.global", [
79+
COMMAND_PALETTE_COMMAND,
7780
"session.list",
7881
"session.new",
7982
"session.page.up",
@@ -90,7 +93,7 @@ test("mode-less bindings stay active when opencode mode changes", async () => {
9093
Array.from(
9194
keymap.getCommandBindings({
9295
visibility: "active",
93-
commands: ["session.list", "session.new", "session.page.up", "session.first", "model.list"],
96+
commands: [COMMAND_PALETTE_COMMAND, "session.list", "session.new", "session.page.up", "session.first", "model.list"],
9497
}),
9598
([command, bindings]) => [command, bindings.length],
9699
),
@@ -120,9 +123,24 @@ test("mode-less bindings stay active when opencode mode changes", async () => {
120123
const app = await testRender(() => <Harness />)
121124
try {
122125
expect(counts).toEqual({
123-
base: { "session.list": 1, "session.new": 1, "session.page.up": 2, "session.first": 2, "model.list": 1 },
124-
question: { "session.list": 1, "session.new": 1, "session.page.up": 2, "session.first": 2, "model.list": 0 },
126+
base: {
127+
[COMMAND_PALETTE_COMMAND]: 1,
128+
"session.list": 1,
129+
"session.new": 1,
130+
"session.page.up": 2,
131+
"session.first": 2,
132+
"model.list": 1,
133+
},
134+
question: {
135+
[COMMAND_PALETTE_COMMAND]: 1,
136+
"session.list": 1,
137+
"session.new": 1,
138+
"session.page.up": 2,
139+
"session.first": 2,
140+
"model.list": 0,
141+
},
125142
autocomplete: {
143+
[COMMAND_PALETTE_COMMAND]: 1,
126144
"session.list": 1,
127145
"session.new": 1,
128146
"session.page.up": 2,

0 commit comments

Comments
 (0)