From dab998928f79f74449ccc537eee1c9b37f166f76 Mon Sep 17 00:00:00 2001 From: neon443 <69979447+neon443@users.noreply.github.com> Date: Tue, 5 Aug 2025 12:37:08 +0100 Subject: [PATCH] fix scrollback --- ShhShell/SSH/SSHHandler.swift | 40 ++++++++++--------- .../Views/Terminal/SSHTerminalDelegate.swift | 2 + 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/ShhShell/SSH/SSHHandler.swift b/ShhShell/SSH/SSHHandler.swift index d10b6fc..d1fdcb5 100644 --- a/ShhShell/SSH/SSHHandler.swift +++ b/ShhShell/SSH/SSHHandler.swift @@ -23,7 +23,7 @@ class SSHHandler: @unchecked Sendable, ObservableObject { var sessionID: UUID? var scrollback: [String] = [] - var scrollbackSize = 0.0 +// var scrollbackSize = 0.0 @Published var title: String = "" @Published var state: SSHState = .idle @@ -142,9 +142,11 @@ class SSHHandler: @unchecked Sendable, ObservableObject { } func disconnect() { - self.hostkeyChanged = false - withAnimation { self.state = .idle } - withAnimation { self.testSuceeded = nil } + Task { @MainActor in + self.hostkeyChanged = false + withAnimation { self.state = .idle } + withAnimation { self.testSuceeded = nil } + } if let sessionID { Task { @MainActor in @@ -153,7 +155,7 @@ class SSHHandler: @unchecked Sendable, ObservableObject { } } scrollback = [] - scrollbackSize = 0 +// scrollbackSize = 0 //send eof if open if ssh_channel_is_open(channel) == 1 { @@ -371,11 +373,11 @@ class SSHHandler: @unchecked Sendable, ObservableObject { #endif Task { @MainActor in scrollback.append(string) - if scrollbackSize/1024/1024 > 10 { - scrollback.remove(at: 0) - } else { - scrollbackSize += Double(string.lengthOfBytes(using: .utf8)) - } +// if scrollbackSize/1024/1024 > 10 { +// scrollback.remove(at: 0) +// } else { +// scrollbackSize += Double(string.lengthOfBytes(using: .utf8)) +// } } return string } @@ -408,15 +410,15 @@ class SSHHandler: @unchecked Sendable, ObservableObject { // print("resized tty to \(toRows)rows and \(toCols)cols") } - func prettyScrollbackSize() -> String { - if (scrollbackSize/1024/1024) > 1 { - return "\(scrollbackSize/1024/1024) MiB scrollback" - } else if scrollbackSize/1024 > 1 { - return "\(scrollbackSize/1024) KiB scrollback" - } else { - return "\(scrollbackSize) B scrollback" - } - } +// func prettyScrollbackSize() -> String { +// if (scrollbackSize/1024/1024) > 1 { +// return "\(scrollbackSize/1024/1024) MiB scrollback" +// } else if scrollbackSize/1024 > 1 { +// return "\(scrollbackSize/1024) KiB scrollback" +// } else { +// return "\(scrollbackSize) B scrollback" +// } +// } private func logSshGetError() { guard var session = self.session else { return } diff --git a/ShhShell/Views/Terminal/SSHTerminalDelegate.swift b/ShhShell/Views/Terminal/SSHTerminalDelegate.swift index ab7fc0e..26e4786 100644 --- a/ShhShell/Views/Terminal/SSHTerminalDelegate.swift +++ b/ShhShell/Views/Terminal/SSHTerminalDelegate.swift @@ -16,6 +16,7 @@ final class SSHTerminalDelegate: TerminalView, Sendable, @preconcurrency Termina public convenience init(frame: CGRect, handler: SSHHandler, hostsManager: HostsManager) { self.init(frame: frame) + self.handler = handler self.hostsManager = hostsManager } @@ -80,6 +81,7 @@ final class SSHTerminalDelegate: TerminalView, Sendable, @preconcurrency Termina public override init(frame: CGRect) { super.init(frame: frame) + getTerminal().options.scrollback = 10_0000 terminalDelegate = self }