From 20466740280024fbcd13ebd30cc6dd0c23faee87 Mon Sep 17 00:00:00 2001 From: cmliu Date: Wed, 29 Jul 2026 18:50:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E9=87=8D=E7=BD=AE?= =?UTF-8?q?=E7=BB=88=E7=AB=AF=E8=BF=9E=E6=8E=A5=E5=8A=9F=E8=83=BD=EF=BC=8C?= =?UTF-8?q?=E7=A1=AE=E4=BF=9D=E8=BF=9E=E6=8E=A5=E5=89=8D=E7=BB=88=E7=AB=AF?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=B8=85=E6=99=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/main.ts | 3 ++- frontend/src/terminal-session.ts | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 frontend/src/terminal-session.ts diff --git a/frontend/src/main.ts b/frontend/src/main.ts index 86dab5f..ec759e5 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -7,6 +7,7 @@ import { decryptPasswordResult, encryptPassword, isEncryptedPassword } from './p import { resolveConnectionControl, resolveConnectionPanel } from './ui-state'; import { classifyHostKey, SSH_FINGERPRINT_RE, type HostKeyPrompt } from './host-key'; import { FileManager, collectFileManagerElements } from './file-manager'; +import { resetTerminalForConnection } from './terminal-session'; import './style.css'; type AuthMethod = 'password' | 'publickey'; @@ -1467,7 +1468,7 @@ async function connect(): Promise { authorizationAbort = abortController; setState('connecting'); ui.terminalEmpty.hidden = true; - terminal.clear(); + resetTerminalForConnection(terminal); fitTerminal(false); const host = normalizeHost(ui.host.value); diff --git a/frontend/src/terminal-session.ts b/frontend/src/terminal-session.ts new file mode 100644 index 0000000..71b8a39 --- /dev/null +++ b/frontend/src/terminal-session.ts @@ -0,0 +1,10 @@ +const TERMINAL_RESET_SEQUENCE = '\x1bc'; + +interface WritableTerminal { + write(data: string): void; +} + +export function resetTerminalForConnection(terminal: WritableTerminal): void { + // Queue RIS behind pending SSH output so stale writes cannot land after the reset. + terminal.write(TERMINAL_RESET_SEQUENCE); +}