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); +}