From 18e5dbe9bfa0ba4c3c6f62dade8d3c63c7e01a05 Mon Sep 17 00:00:00 2001 From: neon443 <69979447+neon443@users.noreply.github.com> Date: Sun, 24 Aug 2025 15:29:49 +0100 Subject: [PATCH] i tried so hard :sob: --- .../Terminal/MiniTerminalController.swift | 9 +++++--- ShhShell/Terminal/MiniTerminalDelegate.swift | 21 +++++++++++++++---- ShhShell/Terminal/TerminalController.swift | 1 - ShhShell/Views/Settings/SettingsView.swift | 9 +++++--- 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/ShhShell/Terminal/MiniTerminalController.swift b/ShhShell/Terminal/MiniTerminalController.swift index 27c8a18..5c871b1 100644 --- a/ShhShell/Terminal/MiniTerminalController.swift +++ b/ShhShell/Terminal/MiniTerminalController.swift @@ -11,9 +11,8 @@ import SwiftUI import SwiftTerm struct MiniTerminalController: UIViewRepresentable { - func feed() { - - } + @Binding var text: String + @Binding var cursorType: CursorType func makeUIView(context: Context) -> TerminalView { let tv = MiniTerminalDelegate(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: .zero)) @@ -23,7 +22,11 @@ struct MiniTerminalController: UIViewRepresentable { } func updateUIView(_ tv: TerminalView, context: Context) { + guard let tdelegate = tv as? MiniTerminalDelegate else { return } + tdelegate.text = text + tdelegate.cursorType = cursorType tv.setNeedsLayout() tv.layoutIfNeeded() + tv.layoutSubviews() } } diff --git a/ShhShell/Terminal/MiniTerminalDelegate.swift b/ShhShell/Terminal/MiniTerminalDelegate.swift index b835a8c..fc307e8 100644 --- a/ShhShell/Terminal/MiniTerminalDelegate.swift +++ b/ShhShell/Terminal/MiniTerminalDelegate.swift @@ -12,8 +12,21 @@ import SwiftTerm @MainActor class MiniTerminalDelegate: TerminalView, TerminalViewDelegate { - func setCursorType(_ style: CursorType) { - getTerminal().setCursorStyle(style.stCursorStyle) + var text: String = "" + var cursorType = CursorType() + var hasConfigured: Bool = false + + override func layoutSubviews() { + super.layoutSubviews() + + if !hasConfigured && bounds.width > 0 && bounds.height > 0 { + self.getTerminal().resetNormalBuffer() + self.getTerminal().resetToInitialState() + self.getTerminal().softReset() + self.feed(text: "") + self.getTerminal().setCursorStyle(CursorStyle.blinkBar) + hasConfigured = true + } } nonisolated public func sizeChanged(source: TerminalView, newCols: Int, newRows: Int) {} @@ -27,8 +40,8 @@ class MiniTerminalDelegate: TerminalView, TerminalViewDelegate { nonisolated public func iTermContent (source: TerminalView, content: ArraySlice) {} nonisolated public func rangeChanged(source: SwiftTerm.TerminalView, startY: Int, endY: Int) {} - public convenience required override init(frame: CGRect) { - self.init(frame: .zero) + public override init(frame: CGRect) { + super.init(frame: frame) terminalDelegate = self } diff --git a/ShhShell/Terminal/TerminalController.swift b/ShhShell/Terminal/TerminalController.swift index f65f5ad..727dae2 100644 --- a/ShhShell/Terminal/TerminalController.swift +++ b/ShhShell/Terminal/TerminalController.swift @@ -39,7 +39,6 @@ struct TerminalController: UIViewRepresentable { ) } } - return tv } diff --git a/ShhShell/Views/Settings/SettingsView.swift b/ShhShell/Views/Settings/SettingsView.swift index 1445e46..cb241bc 100644 --- a/ShhShell/Views/Settings/SettingsView.swift +++ b/ShhShell/Views/Settings/SettingsView.swift @@ -38,10 +38,13 @@ struct SettingsView: View { } .pickerStyle(.segmented) - ForEach(CursorShape.allCases, id: \.self) { type in - MiniTerminalController() - + HStack { + ForEach(CursorShape.allCases, id: \.self) { type in + MiniTerminalController(text: .constant("asdjf"), cursorType: $hostsManager.settings.cursorType) + .frame(width: 100, height: 100) + } } + Picker("Cursor", selection: $hostsManager.settings.cursorType.cursorShape) { ForEach(CursorShape.allCases, id: \.self) { type in Text(type.description).tag(type)