diff options
| author | Adam <[email protected]> | 2026-02-20 07:34:36 -0600 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-02-20 07:34:36 -0600 |
| commit | 4e9ef3ecc1506c5087511105ac905564d2b0c73f (patch) | |
| tree | 18fbcf3335def5699800082925a58325c1d9b8ba /packages/app/src | |
| parent | 7e0e35af3fe468dd931dda955c62e03fd361fd9f (diff) | |
| download | opencode-4e9ef3ecc1506c5087511105ac905564d2b0c73f.tar.gz opencode-4e9ef3ecc1506c5087511105ac905564d2b0c73f.zip | |
fix(app): terminal issues (#14435)
Diffstat (limited to 'packages/app/src')
| -rw-r--r-- | packages/app/src/components/terminal.tsx | 2 | ||||
| -rw-r--r-- | packages/app/src/pages/session/terminal-panel.tsx | 28 |
2 files changed, 13 insertions, 17 deletions
diff --git a/packages/app/src/components/terminal.tsx b/packages/app/src/components/terminal.tsx index bd7ab2447..ce811463f 100644 --- a/packages/app/src/components/terminal.tsx +++ b/packages/app/src/components/terminal.tsx @@ -540,7 +540,7 @@ export const Terminal = (props: TerminalProps) => { disposed = true if (fitFrame !== undefined) cancelAnimationFrame(fitFrame) if (sizeTimer !== undefined) clearTimeout(sizeTimer) - if (ws && ws.readyState !== WebSocket.CLOSED && ws.readyState !== WebSocket.CLOSING) ws.close() + if (ws && ws.readyState !== WebSocket.CLOSED && ws.readyState !== WebSocket.CLOSING) ws.close(1000) const finalize = () => { persistTerminal({ term, addon: serializeAddon, cursor, pty: local.pty, onCleanup: props.onCleanup }) diff --git a/packages/app/src/pages/session/terminal-panel.tsx b/packages/app/src/pages/session/terminal-panel.tsx index 33421c386..27ea4e6f3 100644 --- a/packages/app/src/pages/session/terminal-panel.tsx +++ b/packages/app/src/pages/session/terminal-panel.tsx @@ -67,11 +67,11 @@ export function TerminalPanel() { on( () => terminal.active(), (activeId) => { - if (!activeId || !opened()) return + if (!activeId || !open()) return if (document.activeElement instanceof HTMLElement) { document.activeElement.blur() } - focusTerminalById(activeId) + setTimeout(() => focusTerminalById(activeId), 0) }, ), ) @@ -209,21 +209,17 @@ export function TerminalPanel() { </Tabs.List> </Tabs> <div class="flex-1 min-h-0 relative"> - <For each={all()}> - {(pty) => ( - <div - id={`terminal-wrapper-${pty.id}`} - class="absolute inset-0" - style={{ - display: terminal.active() === pty.id ? "block" : "none", - }} - > - <Show when={pty.id} keyed> - <Terminal pty={pty} onCleanup={terminal.update} onConnectError={() => terminal.clone(pty.id)} /> - </Show> - </div> + <Show when={terminal.active()} keyed> + {(id) => ( + <Show when={byId().get(id)}> + {(pty) => ( + <div id={`terminal-wrapper-${id}`} class="absolute inset-0"> + <Terminal pty={pty()} onCleanup={terminal.update} onConnectError={() => terminal.clone(id)} /> + </div> + )} + </Show> )} - </For> + </Show> </div> </div> <DragOverlay> |
