From 7b4da73ffa9c9abc6d390a90147ee918c43c8d65 Mon Sep 17 00:00:00 2001 From: neon443 <69979447+neon443@users.noreply.github.com> Date: Sat, 23 Aug 2025 17:14:28 +0100 Subject: [PATCH] working on a miniterminalview :yay: for stuff like static previews of how shit should look - eg cursor style previews - terminal effect shader previews --- ShhShell.xcodeproj/project.pbxproj | 4 ++ ShhShell/Views/Settings/SettingsView.swift | 4 ++ .../Views/Terminal/MiniTerminalDelegate.swift | 63 +++++++++++++++++++ .../Views/Terminal/SSHTerminalDelegate.swift | 6 +- 4 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 ShhShell/Views/Terminal/MiniTerminalDelegate.swift diff --git a/ShhShell.xcodeproj/project.pbxproj b/ShhShell.xcodeproj/project.pbxproj index 4037ad6..33afa95 100644 --- a/ShhShell.xcodeproj/project.pbxproj +++ b/ShhShell.xcodeproj/project.pbxproj @@ -77,6 +77,7 @@ A98554612E058433009051BD /* HostsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A98554602E058433009051BD /* HostsManager.swift */; }; A98554632E0587DF009051BD /* HostsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A98554622E0587DF009051BD /* HostsView.swift */; }; A98CAB442E4229F7005E4C42 /* HostSymbolPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = A98CAB432E4229F7005E4C42 /* HostSymbolPicker.swift */; }; + A99604432E5A0E8F007CA460 /* MiniTerminalDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A99604422E5A0E8F007CA460 /* MiniTerminalDelegate.swift */; }; A9A2F4F62E3001D300D0AE9B /* AddSnippetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9A2F4F52E3001D300D0AE9B /* AddSnippetView.swift */; }; A9BA1D192E1D9AE1005BDCEF /* SwiftTerm.Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9BA1D182E1D9AE1005BDCEF /* SwiftTerm.Color.swift */; }; A9BA1D1E2E1EAD51005BDCEF /* SF-Mono-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = A9BA1D1C2E1EAD51005BDCEF /* SF-Mono-Bold.otf */; }; @@ -214,6 +215,7 @@ A98554602E058433009051BD /* HostsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HostsManager.swift; sourceTree = ""; }; A98554622E0587DF009051BD /* HostsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HostsView.swift; sourceTree = ""; }; A98CAB432E4229F7005E4C42 /* HostSymbolPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HostSymbolPicker.swift; sourceTree = ""; }; + A99604422E5A0E8F007CA460 /* MiniTerminalDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MiniTerminalDelegate.swift; sourceTree = ""; }; A9A2F4F52E3001D300D0AE9B /* AddSnippetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddSnippetView.swift; sourceTree = ""; }; A9BA1D182E1D9AE1005BDCEF /* SwiftTerm.Color.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftTerm.Color.swift; sourceTree = ""; }; A9BA1D1C2E1EAD51005BDCEF /* SF-Mono-Bold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SF-Mono-Bold.otf"; sourceTree = ""; }; @@ -355,6 +357,7 @@ A923172C2E07138000ECE1E6 /* SSHTerminalDelegate.swift */, A96BE6A92E116EC000C0FEE9 /* TerminalViewContainer.swift */, A9FD37682E16A6BF005319A8 /* ShellTabView.swift */, + A99604422E5A0E8F007CA460 /* MiniTerminalDelegate.swift */, ); path = Terminal; sourceTree = ""; @@ -826,6 +829,7 @@ A9DA97732E0D40C100142DDC /* HostSymbolPreview.swift in Sources */, A9CC786B2E4E681400FAEE58 /* RecentsView.swift in Sources */, A9CC786D2E4F534600FAEE58 /* History.swift in Sources */, + A99604432E5A0E8F007CA460 /* MiniTerminalDelegate.swift in Sources */, A90B38342E3EA046002B56FC /* Bundle.swift in Sources */, A9FD376B2E16DABF005319A8 /* AnsiPickerView.swift in Sources */, A9C060ED2E3FBCD000CA9374 /* SnippetPicker.swift in Sources */, diff --git a/ShhShell/Views/Settings/SettingsView.swift b/ShhShell/Views/Settings/SettingsView.swift index 1e03de3..0718d01 100644 --- a/ShhShell/Views/Settings/SettingsView.swift +++ b/ShhShell/Views/Settings/SettingsView.swift @@ -6,6 +6,7 @@ // import SwiftUI +import SwiftTerm struct SettingsView: View { @ObservedObject var hostsManager: HostsManager @@ -37,6 +38,9 @@ struct SettingsView: View { } .pickerStyle(.segmented) + ForEach(CursorShape.allCases, id: \.self) { type in + + } Picker("Cursor", selection: $hostsManager.settings.cursorType.cursorShape) { ForEach(CursorShape.allCases, id: \.self) { type in Text(type.description).tag(type) diff --git a/ShhShell/Views/Terminal/MiniTerminalDelegate.swift b/ShhShell/Views/Terminal/MiniTerminalDelegate.swift new file mode 100644 index 0000000..0a7f5f1 --- /dev/null +++ b/ShhShell/Views/Terminal/MiniTerminalDelegate.swift @@ -0,0 +1,63 @@ +// +// MiniTerminalDelegate.swift +// ShhShell +// +// Created by neon443 on 23/08/2025. +// + +import Foundation +import UIKit +import SwiftUI +import SwiftTerm + +@MainActor +class MiniTerminalDelegate: TerminalView, TerminalViewDelegate { + + nonisolated public func sizeChanged(source: TerminalView, newCols: Int, newRows: Int) { + <#code#> + } + + nonisolated public func setTerminalTitle(source: TerminalView, title: String) { + <#code#> + } + + nonisolated public func hostCurrentDirectoryUpdate(source: TerminalView, directory: String?) { + <#code#> + } + + nonisolated public func send(source: TerminalView, data: ArraySlice) { + <#code#> + } + + nonisolated public func scrolled(source: TerminalView, position: Double) { + <#code#> + } + + nonisolated public func requestOpenLink(source: SwiftTerm.TerminalView, link: String, params: [String : String]) { + <#code#> + } + + nonisolated public func bell(source: TerminalView) { + <#code#> + } + + nonisolated public func clipboardCopy(source: SwiftTerm.TerminalView, content: Data) { + <#code#> + } + + nonisolated public func iTermContent (source: TerminalView, content: ArraySlice) { + <#code#> + } + + nonisolated public func rangeChanged(source: SwiftTerm.TerminalView, startY: Int, endY: Int) { + <#code#> + } + + public convenience required override init(frame: CGRect) { + self.init(frame: .zero) + } + + public convenience required init?(coder: NSCoder) { + fatalError("unimplememented") + } +} diff --git a/ShhShell/Views/Terminal/SSHTerminalDelegate.swift b/ShhShell/Views/Terminal/SSHTerminalDelegate.swift index ee96ebb..2cbc14e 100644 --- a/ShhShell/Views/Terminal/SSHTerminalDelegate.swift +++ b/ShhShell/Views/Terminal/SSHTerminalDelegate.swift @@ -31,8 +31,10 @@ final class SSHTerminalDelegate: TerminalView, Sendable, @preconcurrency Termina applySelectedTheme() applyScrollbackLength() applyCursorType() - startFeedLoop() - self.becomeFirstResponder() +// DispatchQueue.main.asyncAfter(deadline: .now()+0.01) { + self.startFeedLoop() + let _ = self.becomeFirstResponder() +// } } }