diff options
Diffstat (limited to 'packages/app/src/components')
| -rw-r--r-- | packages/app/src/components/terminal.tsx | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/packages/app/src/components/terminal.tsx b/packages/app/src/components/terminal.tsx index 14413dfda..9048c481c 100644 --- a/packages/app/src/components/terminal.tsx +++ b/packages/app/src/components/terminal.tsx @@ -346,7 +346,7 @@ export const Terminal = (props: TerminalProps) => { } ghostty = g term = t - output = terminalWriter((data) => t.write(data)) + output = terminalWriter((data, done) => t.write(data, done)) t.attachCustomKeyEventHandler((event) => { const key = event.key.toLowerCase() @@ -520,9 +520,19 @@ export const Terminal = (props: TerminalProps) => { disposed = true if (fitFrame !== undefined) cancelAnimationFrame(fitFrame) if (sizeTimer !== undefined) clearTimeout(sizeTimer) - output?.flush() - persistTerminal({ term, addon: serializeAddon, cursor, pty: local.pty, onCleanup: props.onCleanup }) - cleanup() + if (ws && ws.readyState !== WebSocket.CLOSED && ws.readyState !== WebSocket.CLOSING) ws.close() + + const finalize = () => { + persistTerminal({ term, addon: serializeAddon, cursor, pty: local.pty, onCleanup: props.onCleanup }) + cleanup() + } + + if (!output) { + finalize() + return + } + + output.flush(finalize) }) return ( |
