Skip to content

Commit 492f67a

Browse files
Apply PR #23846: Themes aagain
2 parents b1f0ceb + 6c12037 commit 492f67a

6 files changed

Lines changed: 22 additions & 67 deletions

File tree

bun.lock

Lines changed: 14 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/opencode/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,8 @@
124124
"@opentelemetry/exporter-trace-otlp-http": "0.214.0",
125125
"@opentelemetry/sdk-trace-base": "2.6.1",
126126
"@opentelemetry/sdk-trace-node": "2.6.1",
127-
"@opentui/core": "0.1.102",
128-
"@opentui/solid": "0.1.102",
127+
"@opentui/core": "0.0.0-20260422-52f6ed27",
128+
"@opentui/solid": "0.0.0-20260422-52f6ed27",
129129
"@parcel/watcher": "2.5.1",
130130
"@pierre/diffs": "catalog:",
131131
"@solid-primitives/event-bus": "1.1.2",

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { render, TimeToFirstDraw, useKeyboard, useRenderer, useTerminalDimensions } from "@opentui/solid"
22
import * as Clipboard from "@tui/util/clipboard"
33
import * as Selection from "@tui/util/selection"
4-
import * as Terminal from "@tui/util/terminal"
54
import { createCliRenderer, MouseButton, type CliRendererConfig } from "@opentui/core"
65
import { RouteProvider, useRoute } from "@tui/context/route"
76
import {
@@ -121,12 +120,6 @@ export function tui(input: {
121120
const unguard = win32InstallCtrlCGuard()
122121
win32DisableProcessedInput()
123122

124-
const mode = await Terminal.getTerminalBackgroundColor()
125-
126-
// Re-clear after getTerminalBackgroundColor() because setRawMode(false)
127-
// restores the original console mode, including processed input on Windows.
128-
win32DisableProcessedInput()
129-
130123
const onExit = async () => {
131124
unguard?.()
132125
resolve()
@@ -137,6 +130,7 @@ export function tui(input: {
137130
}
138131

139132
const renderer = await createCliRenderer(rendererConfig(input.config))
133+
const mode = (await renderer.waitForThemeMode(1000)) ?? "dark"
140134

141135
await render(() => {
142136
return (

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({
314314
setStore(
315315
produce((draft) => {
316316
const lock = pick(kv.get("theme_mode_lock"))
317-
const mode = lock ?? props.mode
317+
const mode = lock ?? pick(renderer.themeMode) ?? props.mode
318318
if (!lock && pick(kv.get("theme_mode")) !== undefined) {
319319
kv.set("theme_mode", undefined)
320320
}

packages/opencode/src/cli/cmd/tui/util/terminal.ts

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,6 @@ function parse(color: string): RGBA | null {
1717
return null
1818
}
1919

20-
function mode(background: RGBA | null): "dark" | "light" {
21-
if (!background) return "dark"
22-
const luminance = (0.299 * background.r + 0.587 * background.g + 0.114 * background.b) / 255
23-
return luminance > 0.5 ? "light" : "dark"
24-
}
25-
2620
/**
2721
* Query terminal colors including background, foreground, and palette (0-15).
2822
* Uses OSC escape sequences to retrieve actual terminal color values.
@@ -100,36 +94,3 @@ export async function colors(): Promise<{
10094
}, 1000)
10195
})
10296
}
103-
104-
// Keep startup mode detection separate from `colors()`: the TUI boot path only
105-
// needs OSC 11 and should resolve on the first background response instead of
106-
// waiting on the full palette query used by system theme generation.
107-
export async function getTerminalBackgroundColor(): Promise<"dark" | "light"> {
108-
if (!process.stdin.isTTY) return "dark"
109-
110-
return new Promise((resolve) => {
111-
let timeout: NodeJS.Timeout
112-
113-
const cleanup = () => {
114-
process.stdin.setRawMode(false)
115-
process.stdin.removeListener("data", handler)
116-
clearTimeout(timeout)
117-
}
118-
119-
const handler = (data: Buffer) => {
120-
const match = data.toString().match(/\x1b]11;([^\x07\x1b]+)/)
121-
if (!match) return
122-
cleanup()
123-
resolve(mode(parse(match[1])))
124-
}
125-
126-
process.stdin.setRawMode(true)
127-
process.stdin.on("data", handler)
128-
process.stdout.write("\x1b]11;?\x07")
129-
130-
timeout = setTimeout(() => {
131-
cleanup()
132-
resolve("dark")
133-
}, 1000)
134-
})
135-
}

packages/plugin/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
"zod": "catalog:"
2323
},
2424
"peerDependencies": {
25-
"@opentui/core": ">=0.1.102",
26-
"@opentui/solid": ">=0.1.102"
25+
"@opentui/core": ">=0.0.0-20260422-52f6ed27",
26+
"@opentui/solid": ">=0.0.0-20260422-52f6ed27"
2727
},
2828
"peerDependenciesMeta": {
2929
"@opentui/core": {
@@ -34,8 +34,8 @@
3434
}
3535
},
3636
"devDependencies": {
37-
"@opentui/core": "0.1.102",
38-
"@opentui/solid": "0.1.102",
37+
"@opentui/core": "0.0.0-20260422-52f6ed27",
38+
"@opentui/solid": "0.0.0-20260422-52f6ed27",
3939
"@tsconfig/node22": "catalog:",
4040
"@types/node": "catalog:",
4141
"typescript": "catalog:",

0 commit comments

Comments
 (0)