diff options
| author | Saatvik Arya <[email protected]> | 2025-12-07 02:19:11 +0530 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-12-06 14:49:11 -0600 |
| commit | 3ec34ee3dd512d0aba19ac55bbbd78a9ed65b6d2 (patch) | |
| tree | ca74bb6a86df37b7bec6a257c923a9bbf69f67f3 | |
| parent | 2e5c2d5e98eeeb6342dd0bacbb2bf1d3b70bf6a1 (diff) | |
| download | opencode-3ec34ee3dd512d0aba19ac55bbbd78a9ed65b6d2.tar.gz opencode-3ec34ee3dd512d0aba19ac55bbbd78a9ed65b6d2.zip | |
feat(tui): add dynamic terminal window title (#5112)
| -rw-r--r-- | packages/opencode/src/cli/cmd/tui/app.tsx | 20 | ||||
| -rw-r--r-- | packages/opencode/src/cli/cmd/tui/context/exit.tsx | 2 |
2 files changed, 22 insertions, 0 deletions
diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx index 3fb20f167..bd2a23355 100644 --- a/packages/opencode/src/cli/cmd/tui/app.tsx +++ b/packages/opencode/src/cli/cmd/tui/app.tsx @@ -169,6 +169,26 @@ function App() { console.log(JSON.stringify(route.data)) }) + // Update terminal window title based on current route and session + createEffect(() => { + if (route.data.type === "home") { + renderer.setTerminalTitle("opencode") + return + } + + if (route.data.type === "session") { + const session = sync.session.get(route.data.sessionID) + if (!session || SessionApi.isDefaultTitle(session.title)) { + renderer.setTerminalTitle("opencode") + return + } + + // Truncate title to 40 chars max + const title = session.title.length > 40 ? session.title.slice(0, 37) + "..." : session.title + renderer.setTerminalTitle(`oc | ${title}`) + } + }) + const args = useArgs() onMount(() => { batch(() => { diff --git a/packages/opencode/src/cli/cmd/tui/context/exit.tsx b/packages/opencode/src/cli/cmd/tui/context/exit.tsx index 3e23f718c..414cb1a41 100644 --- a/packages/opencode/src/cli/cmd/tui/context/exit.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/exit.tsx @@ -7,6 +7,8 @@ export const { use: useExit, provider: ExitProvider } = createSimpleContext({ init: (input: { onExit?: () => Promise<void> }) => { const renderer = useRenderer() return async (reason?: any) => { + // Reset window title before destroying renderer + renderer.setTerminalTitle("") renderer.destroy() await input.onExit?.() if (reason) { |
