diff --git a/CommandNotch/CommandNotch/Models/TerminalSession.swift b/CommandNotch/CommandNotch/Models/TerminalSession.swift index 8f19165..6eb7e0a 100644 --- a/CommandNotch/CommandNotch/Models/TerminalSession.swift +++ b/CommandNotch/CommandNotch/Models/TerminalSession.swift @@ -200,7 +200,29 @@ class TerminalSession: NSObject, ObservableObject, LocalProcessDelegate, @precon // MARK: - LocalProcessDelegate nonisolated func processTerminated(_ source: LocalProcess, exitCode: Int32?) { - Task { @MainActor in self.isRunning = false } + Task { @MainActor in + self.isRunning = false + self.resetTerminalModes() + } + } + + private func resetTerminalModes() { + let resetSequences: [[UInt8]] = [ + Array("\u{1b}[?9l".utf8), + Array("\u{1b}[?1000l".utf8), + Array("\u{1b}[?1002l".utf8), + Array("\u{1b}[?1003l".utf8), + Array("\u{1b}[?1006l".utf8), + Array("\u{1b}[?1015l".utf8), + Array("\u{1b}[?2004l".utf8), + Array("\u{1b}[?1l".utf8), + Array("\u{1b}[?1049l".utf8), + Array("\u{1b}[?25h".utf8), + ] + + for seq in resetSequences { + terminalView.feed(byteArray: seq[...]) + } } nonisolated func dataReceived(slice: ArraySlice) {