From 7222fc0ba0e46b3ee787be608c71738aa14fe480 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 11 Feb 2026 08:19:42 -0600 Subject: fix(app): terminal resize --- packages/app/src/components/terminal.tsx | 44 ++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 10 deletions(-) (limited to 'packages/app/src/components/terminal.tsx') diff --git a/packages/app/src/components/terminal.tsx b/packages/app/src/components/terminal.tsx index 2527c74ec..09c04db40 100644 --- a/packages/app/src/components/terminal.tsx +++ b/packages/app/src/components/terminal.tsx @@ -91,7 +91,7 @@ export const Terminal = (props: TerminalProps) => { } const getTerminalColors = (): TerminalColors => { - const mode = theme.mode() + const mode = theme.mode() === "dark" ? "dark" : "light" const fallback = DEFAULT_TERMINAL_COLORS[mode] const currentTheme = theme.themes()[theme.themeId()] if (!currentTheme) return fallback @@ -186,9 +186,23 @@ export const Terminal = (props: TerminalProps) => { } ws = socket + const restore = typeof local.pty.buffer === "string" ? local.pty.buffer : "" + const restoreSize = + restore && + typeof local.pty.cols === "number" && + Number.isSafeInteger(local.pty.cols) && + local.pty.cols > 0 && + typeof local.pty.rows === "number" && + Number.isSafeInteger(local.pty.rows) && + local.pty.rows > 0 + ? { cols: local.pty.cols, rows: local.pty.rows } + : undefined + const t = new mod.Terminal({ cursorBlink: true, cursorStyle: "bar", + cols: restoreSize?.cols, + rows: restoreSize?.rows, fontSize: 14, fontFamily: monoFontFamily(settings.appearance.font()), allowTransparency: false, @@ -277,19 +291,29 @@ export const Terminal = (props: TerminalProps) => { focusTerminal() - fit.fit() + const startResize = () => { + fit.observeResize() + handleResize = () => fit.fit() + window.addEventListener("resize", handleResize) + cleanups.push(() => window.removeEventListener("resize", handleResize)) + } - if (local.pty.buffer) { - t.write(local.pty.buffer, () => { - if (local.pty.scrollY) t.scrollToLine(local.pty.scrollY) + if (restore && restoreSize) { + t.write(restore, () => { + fit.fit() + if (typeof local.pty.scrollY === "number") t.scrollToLine(local.pty.scrollY) + startResize() }) + } else { + fit.fit() + if (restore) { + t.write(restore, () => { + if (typeof local.pty.scrollY === "number") t.scrollToLine(local.pty.scrollY) + }) + } + startResize() } - fit.observeResize() - handleResize = () => fit.fit() - window.addEventListener("resize", handleResize) - cleanups.push(() => window.removeEventListener("resize", handleResize)) - const onResize = t.onResize(async (size) => { if (socket.readyState === WebSocket.OPEN) { await sdk.client.pty -- cgit v1.2.3