ok im fucking pissed off

the keyboard input issue is back
This commit is contained in:
neon443
2025-07-04 16:28:08 +01:00
parent 186c04ce7f
commit a85022e351
3 changed files with 30 additions and 30 deletions

View File

@@ -19,33 +19,11 @@ final class SSHTerminalDelegate: TerminalView, Sendable, @preconcurrency Termina
self.handler = handler self.handler = handler
self.hostsManager = hostsManager self.hostsManager = hostsManager
print(getTerminal().backgroundColor.colorCodable)
print(getTerminal().foregroundColor.colorCodable)
applySelectedTheme() applySelectedTheme()
DispatchQueue.main.async {
Task { Task {
await restoreScrollback() guard let handler = self.handler else { return }
await startFeedLoop()
}
}
func restoreScrollback() async {
guard let scrollback = handler?.scrollback else { return }
guard !scrollback.isEmpty else { return }
await MainActor.run {
self.getTerminal().resetToInitialState()
for line in scrollback {
self.feed(text: line)
}
self.setNeedsLayout()
self.setNeedsDisplay()
}
}
func startFeedLoop() async {
guard let handler else { return }
while handler.connected { while handler.connected {
if let read = handler.readFromChannel() { if let read = handler.readFromChannel() {
await MainActor.run { await MainActor.run {
@@ -57,6 +35,23 @@ final class SSHTerminalDelegate: TerminalView, Sendable, @preconcurrency Termina
} }
handler.disconnect() handler.disconnect()
} }
}
}
func restoreScrollback() {
guard let scrollback = handler?.scrollback else { return }
guard !scrollback.isEmpty else { return }
DispatchQueue.main.asyncAfter(deadline: .now()+0.01) {
self.getTerminal().resetToInitialState()
for line in scrollback {
print("scrollbak \(line)")
self.feed(text: line)
}
self.setNeedsLayout()
self.setNeedsDisplay()
}
}
func applySelectedTheme() { func applySelectedTheme() {
guard let hostsManager else { return } guard let hostsManager else { return }

View File

@@ -21,6 +21,11 @@ struct ShellView: View {
hostsManager.selectedTheme.background.suiColor hostsManager.selectedTheme.background.suiColor
.ignoresSafeArea(.all) .ignoresSafeArea(.all)
TerminalController(handler: handler, hostsManager: hostsManager) TerminalController(handler: handler, hostsManager: hostsManager)
.onAppear {
if let sessionID = handler.sessionID {
container.sessions[sessionID]?.terminalView.restoreScrollback()
}
}
Group { Group {
Color.gray.opacity(0.2) Color.gray.opacity(0.2)

View File

@@ -31,14 +31,14 @@ struct TerminalController: UIViewRepresentable {
tv.translatesAutoresizingMaskIntoConstraints = false tv.translatesAutoresizingMaskIntoConstraints = false
tv.autoresizingMask = [.flexibleWidth, .flexibleHeight] tv.autoresizingMask = [.flexibleWidth, .flexibleHeight]
if let sessionID = handler.sessionID { // if let sessionID = handler.sessionID {
Task { @MainActor in // Task { @MainActor in
container.sessions[sessionID] = TerminalContainer( // container.sessions[sessionID] = TerminalContainer(
handler: handler, // handler: handler,
terminalView: tv // terminalView: tv
) // )
} // }
} // }
return tv return tv
} }