From a85022e3517d58292fe3aeb3f579d16b3b4605df Mon Sep 17 00:00:00 2001 From: neon443 <69979447+neon443@users.noreply.github.com> Date: Fri, 4 Jul 2025 16:28:08 +0100 Subject: [PATCH] ok im fucking pissed off the keyboard input issue is back --- .../Views/Terminal/SSHTerminalDelegate.swift | 39 ++++++++----------- ShhShell/Views/Terminal/ShellView.swift | 5 +++ .../Views/Terminal/TerminalController.swift | 16 ++++---- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/ShhShell/Views/Terminal/SSHTerminalDelegate.swift b/ShhShell/Views/Terminal/SSHTerminalDelegate.swift index acbe0b9..a85770a 100644 --- a/ShhShell/Views/Terminal/SSHTerminalDelegate.swift +++ b/ShhShell/Views/Terminal/SSHTerminalDelegate.swift @@ -19,24 +19,33 @@ final class SSHTerminalDelegate: TerminalView, Sendable, @preconcurrency Termina self.handler = handler self.hostsManager = hostsManager - print(getTerminal().backgroundColor.colorCodable) - print(getTerminal().foregroundColor.colorCodable) - applySelectedTheme() - Task { - await restoreScrollback() - await startFeedLoop() + DispatchQueue.main.async { + Task { + guard let handler = self.handler else { return } + while handler.connected { + if let read = handler.readFromChannel() { + await MainActor.run { + self.feed(text: read) + } + } else { + try? await Task.sleep(nanoseconds: 10_000_000) //10ms + } + } + handler.disconnect() + } } } - func restoreScrollback() async { + func restoreScrollback() { guard let scrollback = handler?.scrollback else { return } guard !scrollback.isEmpty else { return } - await MainActor.run { + DispatchQueue.main.asyncAfter(deadline: .now()+0.01) { self.getTerminal().resetToInitialState() for line in scrollback { + print("scrollbak \(line)") self.feed(text: line) } self.setNeedsLayout() @@ -44,20 +53,6 @@ final class SSHTerminalDelegate: TerminalView, Sendable, @preconcurrency Termina } } - func startFeedLoop() async { - guard let handler else { return } - while handler.connected { - if let read = handler.readFromChannel() { - await MainActor.run { - self.feed(text: read) - } - } else { - try? await Task.sleep(nanoseconds: 10_000_000) //10ms - } - } - handler.disconnect() - } - func applySelectedTheme() { guard let hostsManager else { return } applyTheme(hostsManager.selectedTheme) diff --git a/ShhShell/Views/Terminal/ShellView.swift b/ShhShell/Views/Terminal/ShellView.swift index 70c7cfc..c360876 100644 --- a/ShhShell/Views/Terminal/ShellView.swift +++ b/ShhShell/Views/Terminal/ShellView.swift @@ -21,6 +21,11 @@ struct ShellView: View { hostsManager.selectedTheme.background.suiColor .ignoresSafeArea(.all) TerminalController(handler: handler, hostsManager: hostsManager) + .onAppear { + if let sessionID = handler.sessionID { + container.sessions[sessionID]?.terminalView.restoreScrollback() + } + } Group { Color.gray.opacity(0.2) diff --git a/ShhShell/Views/Terminal/TerminalController.swift b/ShhShell/Views/Terminal/TerminalController.swift index f65f5ad..d43479c 100644 --- a/ShhShell/Views/Terminal/TerminalController.swift +++ b/ShhShell/Views/Terminal/TerminalController.swift @@ -31,14 +31,14 @@ struct TerminalController: UIViewRepresentable { tv.translatesAutoresizingMaskIntoConstraints = false tv.autoresizingMask = [.flexibleWidth, .flexibleHeight] - if let sessionID = handler.sessionID { - Task { @MainActor in - container.sessions[sessionID] = TerminalContainer( - handler: handler, - terminalView: tv - ) - } - } +// if let sessionID = handler.sessionID { +// Task { @MainActor in +// container.sessions[sessionID] = TerminalContainer( +// handler: handler, +// terminalView: tv +// ) +// } +// } return tv }