Skip to content

Commit bbdb019

Browse files
Apply PR #29948: fix(tui): keep command palette available in questions
2 parents f14eafe + 83bee1e commit bbdb019

2 files changed

Lines changed: 39 additions & 5 deletions

File tree

packages/tui/src/app.tsx

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

106106
const appBindingCommands = [
107-
"command.palette.show",
108107
"model.list",
109108
"model.cycle_recent",
110109
"model.cycle_recent_reverse",
@@ -963,6 +962,11 @@ function App(props: { onSnapshot?: () => Promise<string[]>; pluginHost: TuiPlugi
963962
commands: appCommands(),
964963
}))
965964

965+
useBindings(() => ({
966+
enabled: () => dialog.stack.length === 0,
967+
bindings: tuiConfig.keybinds.get(COMMAND_PALETTE_COMMAND),
968+
}))
969+
966970
useBindings(() => ({
967971
mode: OPENCODE_BASE_MODE,
968972
bindings: tuiConfig.keybinds.gather("app", appBindingCommands),

packages/tui/test/keymap.test.tsx

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,13 @@ import { testRender, useRenderer } from "@opentui/solid"
55
import { expect, test } from "bun:test"
66
import { onCleanup } from "solid-js"
77
import { TuiKeybind } from "../src/config/keybind"
8-
import { getOpencodeModeStack, OPENCODE_BASE_MODE, OpencodeKeymapProvider, registerOpencodeKeymap } from "../src/keymap"
8+
import {
9+
COMMAND_PALETTE_COMMAND,
10+
getOpencodeModeStack,
11+
OPENCODE_BASE_MODE,
12+
OpencodeKeymapProvider,
13+
registerOpencodeKeymap,
14+
} from "../src/keymap"
915

1016
function createResolvedKeymapConfig(input: TuiKeybind.KeybindOverrides = {}) {
1117
const keybinds = TuiKeybind.parse(input)
@@ -73,12 +79,14 @@ test("mode-less bindings stay active when opencode mode changes", async () => {
7379
const offKeymap = registerOpencodeKeymap(keymap, renderer, config)
7480
const offGlobal = keymap.registerLayer({
7581
commands: [
82+
{ name: COMMAND_PALETTE_COMMAND, run() {} },
7683
{ name: "session.list", run() {} },
7784
{ name: "session.new", run() {} },
7885
{ name: "session.page.up", run() {} },
7986
{ name: "session.first", run() {} },
8087
],
8188
bindings: config.keybinds.gather("test.global", [
89+
COMMAND_PALETTE_COMMAND,
8290
"session.list",
8391
"session.new",
8492
"session.page.up",
@@ -95,7 +103,14 @@ test("mode-less bindings stay active when opencode mode changes", async () => {
95103
Array.from(
96104
keymap.getCommandBindings({
97105
visibility: "active",
98-
commands: ["session.list", "session.new", "session.page.up", "session.first", "model.list"],
106+
commands: [
107+
COMMAND_PALETTE_COMMAND,
108+
"session.list",
109+
"session.new",
110+
"session.page.up",
111+
"session.first",
112+
"model.list",
113+
],
99114
}),
100115
([command, bindings]) => [command, bindings.length],
101116
),
@@ -125,9 +140,24 @@ test("mode-less bindings stay active when opencode mode changes", async () => {
125140
const app = await testRender(() => <Harness />)
126141
try {
127142
expect(counts).toEqual({
128-
base: { "session.list": 1, "session.new": 1, "session.page.up": 2, "session.first": 2, "model.list": 1 },
129-
question: { "session.list": 1, "session.new": 1, "session.page.up": 2, "session.first": 2, "model.list": 0 },
143+
base: {
144+
[COMMAND_PALETTE_COMMAND]: 1,
145+
"session.list": 1,
146+
"session.new": 1,
147+
"session.page.up": 2,
148+
"session.first": 2,
149+
"model.list": 1,
150+
},
151+
question: {
152+
[COMMAND_PALETTE_COMMAND]: 1,
153+
"session.list": 1,
154+
"session.new": 1,
155+
"session.page.up": 2,
156+
"session.first": 2,
157+
"model.list": 0,
158+
},
130159
autocomplete: {
160+
[COMMAND_PALETTE_COMMAND]: 1,
131161
"session.list": 1,
132162
"session.new": 1,
133163
"session.page.up": 2,

0 commit comments

Comments
 (0)