acctually fixed the post-minimize input, restoring scrollback, losing first bit of text issues:

when initing the terminalview, restore scrollback but dont start the feedloop
then when returning an existing view, start the readloop
restorescrollback on appear of the view using didmovetowindow
re add the fallback 2nd shellview
made restorescrollback and startfeedloop non async
This commit is contained in:
neon443
2025-07-05 13:06:44 +01:00
parent 12baf81d18
commit 9a5580bff1
3 changed files with 28 additions and 18 deletions

View File

@@ -23,14 +23,17 @@ final class SSHTerminalDelegate: TerminalView, Sendable, @preconcurrency Termina
print(getTerminal().foregroundColor.colorCodable)
applySelectedTheme()
Task {
await restoreScrollback()
// await startFeedLoop()
}
}
func restoreScrollback() async {
func restoreScrollback() {
guard let scrollback = handler?.scrollback else { return }
guard !scrollback.isEmpty else { return }
try? await Task.sleep(nanoseconds: 10_000_000)
await MainActor.run {
DispatchQueue.main.async {
self.getTerminal().resetToInitialState()
for line in scrollback {
self.feed(text: line)
@@ -40,18 +43,20 @@ 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)
func startFeedLoop() {
Task {
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
}
} else {
try? await Task.sleep(nanoseconds: 10_000_000) //10ms
}
handler.disconnect()
}
handler.disconnect()
}
func applySelectedTheme() {
@@ -73,10 +78,7 @@ final class SSHTerminalDelegate: TerminalView, Sendable, @preconcurrency Termina
override func didMoveToWindow() {
super.didMoveToWindow()
if window != nil {
Task {
await restoreScrollback()
await startFeedLoop()
}
restoreScrollback()
}
}

View File

@@ -147,12 +147,19 @@ struct ShellTabView: View {
.id(selectedID)
.transition(.opacity)
} else {
Text("No Session")
if let handler {
ShellView(
handler: handler,
hostsManager: hostsManager
)
.onAppear {
if selectedID == nil {
selectedID = handler?.sessionID
selectedID = handler.sessionID
}
}
} else {
Text("No Session")
}
}
}
}

View File

@@ -19,6 +19,7 @@ struct TerminalController: UIViewRepresentable {
func makeUIView(context: Context) -> TerminalView {
if let sessionID = handler.sessionID {
if let existing = container.sessions[sessionID] {
existing.terminalView.startFeedLoop()
return existing.terminalView
}
}