diff --git a/packages/opencode/src/cli/cmd/tui/context/kv.tsx b/packages/opencode/src/cli/cmd/tui/context/kv.tsx index 651c2dbc0c7..bfa8f03c834 100644 --- a/packages/opencode/src/cli/cmd/tui/context/kv.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/kv.tsx @@ -32,10 +32,10 @@ export const { use: useKV, provider: KVProvider } = createSimpleContext({ if (store[name] === undefined) setStore(name, defaultValue) return [ function () { - return result.get(name) + return result.get(name, defaultValue) }, - function setter(next: Setter) { - result.set(name, next) + function setter(value: T) { + result.set(name, value) }, ] as const }, 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 1294ab849e9..4ca121b50f5 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -137,7 +137,7 @@ export function Session() { }) const dimensions = useTerminalDimensions() - const [sidebar, setSidebar] = kv.signal<"auto" | "hide">("sidebar", "hide") + const [sidebar, setSidebar] = kv.signal<"show" | "hide" | "auto">("sidebar", "auto") const [sidebarOpen, setSidebarOpen] = createSignal(false) const [conceal, setConceal] = createSignal(true) const [showThinking, setShowThinking] = kv.signal("thinking_visibility", true) @@ -152,6 +152,7 @@ export function Session() { const sidebarVisible = createMemo(() => { if (session()?.parentID) return false if (sidebarOpen()) return true + if (sidebar() === "show") return true if (sidebar() === "auto" && wide()) return true return false }) @@ -494,11 +495,13 @@ export function Session() { keybind: "sidebar_toggle", category: "Session", onSelect: (dialog) => { - batch(() => { - const isVisible = sidebarVisible() - setSidebar(() => (isVisible ? "hide" : "auto")) - setSidebarOpen(!isVisible) - }) + const prev = sidebar() + let newValue: "show" | "hide" | "auto" + if (prev === "auto") newValue = sidebarVisible() ? "hide" : "show" + else if (prev === "show") newValue = "hide" + else newValue = "show" + setSidebar(newValue) + setSidebarOpen(newValue === "show") dialog.clear() }, }, @@ -521,7 +524,7 @@ export function Session() { aliases: ["toggle-timestamps"], }, onSelect: (dialog) => { - setTimestamps((prev) => (prev === "show" ? "hide" : "show")) + setTimestamps(timestamps() === "show" ? "hide" : "show") dialog.clear() }, }, @@ -534,7 +537,7 @@ export function Session() { aliases: ["toggle-thinking"], }, onSelect: (dialog) => { - setShowThinking((prev) => !prev) + setShowThinking(!showThinking()) dialog.clear() }, }, @@ -556,7 +559,7 @@ export function Session() { keybind: "tool_details", category: "Session", onSelect: (dialog) => { - setShowDetails((prev) => !prev) + setShowDetails(!showDetails()) dialog.clear() }, }, @@ -566,7 +569,7 @@ export function Session() { keybind: "scrollbar_toggle", category: "Session", onSelect: (dialog) => { - setShowScrollbar((prev) => !prev) + setShowScrollbar(!showScrollbar()) dialog.clear() }, }, @@ -575,7 +578,7 @@ export function Session() { value: "session.toggle.animations", category: "Session", onSelect: (dialog) => { - setAnimationsEnabled((prev) => !prev) + setAnimationsEnabled(!animationsEnabled()) dialog.clear() }, },