Swiftterm ist eine VT100/Xterm Terminal Emulator Library für Swift-Anwendungen, die in macOS-, iOS-Anwendungen, textbasierte, kopflose Anwendungen oder andere benutzerdefinierte Szenarien eingebettet werden können. Es wurde in mehreren im Handel erhältlichen SSH -Kunden verwendet, darunter sichere Schalentiere, LA Terminal und Codedit
Überprüfen Sie die API -Dokumentation
Dieses Repository enthält sowohl einen terminalen Emulatormotor, der UI-Agnostiker ist, als auch eine Frontends für diese Engine für iOS mit UIKIT und MacOS mit Appkit. Ein flüchtiger Terminalemulator (um eine Xterm innerhalb einer Konsolenanwendung zu emulieren) ist im Rahmen der TermKit-Bibliothek verfügbar.
Beispielcode Es gibt einige minimale Beispiel -Apps für Mac und iOS, die zeigen, wie die Bibliothek im TerminalApp -Verzeichnis verwendet wird.
Die Companion -App SwiftterMapp erstellt eine tatsächliche iOS -App, die diese Bibliothek verwendet und vollständiger ist als die Test -Apps in diesem Modul und bietet eine ordnungsgemäße Konfigurations -Benutzeroberfläche.
Dies ist ein Port meines ursprünglichen Xtermsharp, der selbst auf Xterm.js basiert. Zu diesem Zeitpunkt halte ich Swiftterm für einen fortschrittlicheren Terminalemulator als beide (Modulo -Auswahl/Zugänglichkeit), da er die Cluster von UTF, Unicode und Graphem besser behandelt als diese und eine umfassendere Abdeckung der Terminalemulation aufweist. XtermSharp versucht im Allgemeinen, mitzuhalten.
Die Swiftterm-Bibliothek selbst enthält den Quellcode sowohl für die Engine als auch für die Frontendenden. Die Frontends werden basierend auf der Zielplattform bedingt zusammengestellt.
Die Engine befindet sich in diesem Verzeichnis, während der Code für MacOS unter Mac lebt und Code für iOS unter iOS lebt. Angesichts der Tatsache, dass diese beiden viele gemeinsame Eigenschaften teilen, steht der gemeinsame Code unter Apple .
Swiftterm verwendet den Swift -Paket -Manager für den Build und Sie können die Bibliothek Ihrem Projekt mit der URL für dieses Projekt oder eine Gabel davon hinzufügen.
Das MacOS AppKit NSView Implementation TerminalView ist eine wiederverwendbare NSView -Steuerung, die durch Implementierung des TerminalViewDelegate mit jeder Quelle verbunden werden kann.
Ich gehe davon aus, dass ein gemeinsames Szenario darin besteht, einen lokalen UNIX-Befehl zu hosten. Daher habe ich LocalProcessTerminalView aufgenommen, eine Implementierung, die das TerminalView mit einem UNIX-Pseudo-terminalen verbindet und dort einen Befehl ausführt.
Es gibt eine äquivalente UIKIT -UIVIEW -Implementierung für TerminalView , die wie sein NSView -Begleiter eine eingebettbare und wiederverwendbare Ansicht ist, die mit Ihrer Anwendung verbunden werden kann, indem dieselbe TerminalViewDelegate implementiert wird. Im Gegensatz zum NSView -Fall, der auf einem Mac ausgeführt wird, in dem ein gemeinsames Szenario darin besteht, lokale Befehle auszuführen, da iOS keinen Zugriff auf Prozesse bietet, wird das häufigste Szenario darin bestehen, dieses Terminal an einen Remote -Host zu verdrehen. Die sicherste Art, sich mit einem Remote -System zu verbinden, ist mit SSH.
Der iOS- und UIKIT -Code teilen einen Großteil des Codes, dieser Code lebt im Apple -Verzeichnis.
Die Kernbibliothek bietet derzeit keine bequeme Möglichkeit, sich mit SSH zu verbinden, um die zusätzliche Abhängigkeit zu vermeiden. Dieses Git -Modul verweist jedoch ein Modul, das einen vorkompilierten SSH -Client (Frughi's Swiftsh) zusammen mit einem UIKitSsshTerminalView in der iOS -Stichprobe erstellt, das die TerminalView für iOS mit einer SSH -Verbindung verbindet.
Wenn Sie XCode verwenden, gibt es zwei Toplevel -Projekte, eine für Mac und eine für iOS im TerminalApp -Verzeichnis, eines "iosterminal.xcodeProj" und einer namens "Macterminal.xcodeProj".
Dies ist erforderlich, da XCode für iOS keinen Code -Abschluss bereitstellt, wenn Sie ein Mac -Projekt im Projekt haben. Also musste ich sie aufteilen. Beide Projekte verweisen auf das gleiche Swiftterm -Paket.
Wenn Sie bei diesen Projekten die Terminalanwendung auswählen, wird diese ausgeführt. Um die Testsuite auszuführen, wählen Sie stattdessen das "Swiftterm" -Ziel aus, und Sie können "Swifttermfuzz" verwenden, um den Fuzzeller auszuführen.
Sie können swift build verwenden, um das Paket zu erstellen, und swift test , um die Testsuite auszuführen. Sie werden jedoch gewarnt, dass die Testsuite erwartet, dass das Verzeichnis esctest ausgecheckt wird. Sie können sehen, wie ich diese auf GitHub -Aktionen in der Datei .github/workflows/swift.yml ausführe, wenn Sie dies lokal tun möchten.
Wenn Sie XCode verwenden, können Sie das "Swiftterm" -Projekt auswählen und dann die Befehls-U verwenden, um die Testsuite auszuführen.
GitHub -Probleme haben eine Liste der gewünschten Funktionen und Verbesserungen
Langfristig möchte ich auch einen TVOS UIView hinzufügen, ein SwiftGTK-Front-End für Linux.
24 -Bit -Farbe

Mitternachtskommandant

Solide UTF-8-Unterstützung, hervorragendes Rendering: 

Unterstützt Hyperlinks, die von modernen Apps emittiert werden:

iOS -Unterstützung:

Support Sixel:


Zusätzliche und nützliche Dokumente:
Testsuiten: