mirror of
https://github.com/neon443/ShhShell.git
synced 2026-03-11 21:36:17 +00:00
ok im fucking pissed off
the keyboard input issue is back
This commit is contained in:
@@ -19,24 +19,33 @@ 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()
|
||||||
|
|
||||||
Task {
|
DispatchQueue.main.async {
|
||||||
await restoreScrollback()
|
Task {
|
||||||
await startFeedLoop()
|
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 let scrollback = handler?.scrollback else { return }
|
||||||
guard !scrollback.isEmpty else { return }
|
guard !scrollback.isEmpty else { return }
|
||||||
|
|
||||||
await MainActor.run {
|
DispatchQueue.main.asyncAfter(deadline: .now()+0.01) {
|
||||||
self.getTerminal().resetToInitialState()
|
self.getTerminal().resetToInitialState()
|
||||||
for line in scrollback {
|
for line in scrollback {
|
||||||
|
print("scrollbak \(line)")
|
||||||
self.feed(text: line)
|
self.feed(text: line)
|
||||||
}
|
}
|
||||||
self.setNeedsLayout()
|
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() {
|
func applySelectedTheme() {
|
||||||
guard let hostsManager else { return }
|
guard let hostsManager else { return }
|
||||||
applyTheme(hostsManager.selectedTheme)
|
applyTheme(hostsManager.selectedTheme)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user