Skip to content

Commit 4d09c56

Browse files
refactor: session settings simplification (#7342)
1 parent adae0d1 commit 4d09c56

File tree

2 files changed

+21
-39
lines changed

2 files changed

+21
-39
lines changed

packages/opencode/src/cli/cmd/tui/context/kv.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export const { use: useKV, provider: KVProvider } = createSimpleContext({
2626
return ready()
2727
},
2828
signal<T>(name: string, defaultValue: T) {
29-
if (!kvStore[name]) setKvStore(name, defaultValue)
29+
if (kvStore[name] === undefined) setKvStore(name, defaultValue)
3030
return [
3131
function () {
3232
return result.get(name)

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

Lines changed: 20 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {
2+
batch,
23
createContext,
34
createEffect,
45
createMemo,
@@ -52,7 +53,6 @@ import { useDialog } from "../../ui/dialog"
5253
import { TodoItem } from "../../component/todo-item"
5354
import { DialogMessage } from "./dialog-message"
5455
import type { PromptInfo } from "../../component/prompt/history"
55-
import { iife } from "@/util/iife"
5656
import { DialogConfirm } from "@tui/ui/dialog-confirm"
5757
import { DialogTimeline } from "./dialog-timeline"
5858
import { DialogForkFromTimeline } from "./dialog-fork-from-timeline"
@@ -136,23 +136,25 @@ export function Session() {
136136
})
137137

138138
const dimensions = useTerminalDimensions()
139-
const [sidebar, setSidebar] = createSignal<"show" | "hide" | "auto">(kv.get("sidebar", "auto"))
139+
const [sidebar, setSidebar] = kv.signal<"auto" | "hide">("sidebar", "hide")
140+
const [sidebarOpen, setSidebarOpen] = createSignal(false)
140141
const [conceal, setConceal] = createSignal(true)
141-
const [showThinking, setShowThinking] = createSignal(kv.get("thinking_visibility", true))
142-
const [showTimestamps, setShowTimestamps] = createSignal(kv.get("timestamps", "hide") === "show")
143-
const [showDetails, setShowDetails] = createSignal(kv.get("tool_details_visibility", true))
144-
const [showAssistantMetadata, setShowAssistantMetadata] = createSignal(kv.get("assistant_metadata_visibility", true))
145-
const [showScrollbar, setShowScrollbar] = createSignal(kv.get("scrollbar_visible", false))
142+
const [showThinking, setShowThinking] = kv.signal("thinking_visibility", true)
143+
const [timestamps, setTimestamps] = kv.signal<"hide" | "show">("timestamps", "hide")
144+
const [showDetails, setShowDetails] = kv.signal("tool_details_visibility", true)
145+
const [showAssistantMetadata, setShowAssistantMetadata] = kv.signal("assistant_metadata_visibility", true)
146+
const [showScrollbar, setShowScrollbar] = kv.signal("scrollbar_visible", false)
146147
const [diffWrapMode, setDiffWrapMode] = createSignal<"word" | "none">("word")
147-
const [animationsEnabled, setAnimationsEnabled] = createSignal(kv.get("animations_enabled", true))
148+
const [animationsEnabled, setAnimationsEnabled] = kv.signal("animations_enabled", true)
148149

149150
const wide = createMemo(() => dimensions().width > 120)
150151
const sidebarVisible = createMemo(() => {
151152
if (session()?.parentID) return false
152-
if (sidebar() === "show") return true
153+
if (sidebarOpen()) return true
153154
if (sidebar() === "auto" && wide()) return true
154155
return false
155156
})
157+
const showTimestamps = createMemo(() => timestamps() === "show")
156158
const contentWidth = createMemo(() => dimensions().width - (sidebarVisible() ? 42 : 0) - 4)
157159

158160
const scrollAcceleration = createMemo(() => {
@@ -453,13 +455,11 @@ export function Session() {
453455
keybind: "sidebar_toggle",
454456
category: "Session",
455457
onSelect: (dialog) => {
456-
setSidebar((prev) => {
457-
if (prev === "auto") return sidebarVisible() ? "hide" : "show"
458-
if (prev === "show") return "hide"
459-
return "show"
458+
batch(() => {
459+
const isVisible = sidebarVisible()
460+
setSidebar(() => (isVisible ? "hide" : "auto"))
461+
setSidebarOpen(!isVisible)
460462
})
461-
if (sidebar() === "show") kv.set("sidebar", "auto")
462-
if (sidebar() === "hide") kv.set("sidebar", "hide")
463463
dialog.clear()
464464
},
465465
},
@@ -478,11 +478,7 @@ export function Session() {
478478
value: "session.toggle.timestamps",
479479
category: "Session",
480480
onSelect: (dialog) => {
481-
setShowTimestamps((prev) => {
482-
const next = !prev
483-
kv.set("timestamps", next ? "show" : "hide")
484-
return next
485-
})
481+
setTimestamps((prev) => (prev === "show" ? "hide" : "show"))
486482
dialog.clear()
487483
},
488484
},
@@ -491,11 +487,7 @@ export function Session() {
491487
value: "session.toggle.thinking",
492488
category: "Session",
493489
onSelect: (dialog) => {
494-
setShowThinking((prev) => {
495-
const next = !prev
496-
kv.set("thinking_visibility", next)
497-
return next
498-
})
490+
setShowThinking((prev) => !prev)
499491
dialog.clear()
500492
},
501493
},
@@ -514,9 +506,7 @@ export function Session() {
514506
keybind: "tool_details",
515507
category: "Session",
516508
onSelect: (dialog) => {
517-
const newValue = !showDetails()
518-
setShowDetails(newValue)
519-
kv.set("tool_details_visibility", newValue)
509+
setShowDetails((prev) => !prev)
520510
dialog.clear()
521511
},
522512
},
@@ -526,11 +516,7 @@ export function Session() {
526516
keybind: "scrollbar_toggle",
527517
category: "Session",
528518
onSelect: (dialog) => {
529-
setShowScrollbar((prev) => {
530-
const next = !prev
531-
kv.set("scrollbar_visible", next)
532-
return next
533-
})
519+
setShowScrollbar((prev) => !prev)
534520
dialog.clear()
535521
},
536522
},
@@ -539,11 +525,7 @@ export function Session() {
539525
value: "session.toggle.animations",
540526
category: "Session",
541527
onSelect: (dialog) => {
542-
setAnimationsEnabled((prev) => {
543-
const next = !prev
544-
kv.set("animations_enabled", next)
545-
return next
546-
})
528+
setAnimationsEnabled((prev) => !prev)
547529
dialog.clear()
548530
},
549531
},

0 commit comments

Comments
 (0)