DomTerm ist ein moderner Terminalemulator, der eine Browser-Engine als „GUI-Toolkit“ verwendet. Dies ermöglicht einige nette Funktionen, wie z. B. einbettbare Grafiken und Links, HTML-Rich-Text und faltbare Befehle (Anzeigen/Ausblenden). Ansonsten sieht es aus und fühlt sich an wie ein funktionsreicher, eigenständiger Terminalemulator mit ausgezeichneter xterm-Kompatibilität (einschließlich Maushandhabung und 24-Bit-Farbe) und angemessenem "Chrome" (Menüs). Darüber hinaus gibt es eine integrierte Unterstützung für die Sitzungsverwaltung und Unterfenster (wie in tmux
und GNU screen
), grundlegende Eingabebearbeitung (wie in readline
) und Paging (wie in less
).
Im Folgenden werden wir uns diese Funktionen genauer ansehen. Wir gehen davon aus, dass Sie domterm
haben installiert (springen Sie zum Ende dieses Artikels, wenn Sie DomTerm abrufen und erstellen müssen). Zunächst erhalten Sie hier jedoch einen kurzen Überblick über die Technologie.
Frontend vs. Backend
Weitere Linux-Ressourcen
- Spickzettel für Linux-Befehle
- Spickzettel für fortgeschrittene Linux-Befehle
- Kostenloser Online-Kurs:RHEL Technical Overview
- Spickzettel für Linux-Netzwerke
- SELinux-Spickzettel
- Spickzettel für allgemeine Linux-Befehle
- Was sind Linux-Container?
- Unsere neuesten Linux-Artikel
Der größte Teil von DomTerm ist in JavaScript geschrieben und wird in einer Browser-Engine ausgeführt. Dies kann ein Desktop-Webbrowser wie Chrome oder Firefox (siehe Bild 3) oder ein eingebetteter Browser sein. Die Verwendung eines allgemeinen Webbrowsers funktioniert gut, aber die Benutzererfahrung ist nicht so schön (da die Menüs für das allgemeine Surfen und nicht für einen Terminalemulator ausgelegt sind) und das Sicherheitsmodell stört, sodass die Verwendung eines eingebetteten Browsers schöner ist .
Folgendes wird derzeit unterstützt:
qtdomterm
, das das Qt-Toolkit undQtWebEngine
verwendet- Ein
Electron
Einbettung (siehe Bild 1) atom-domterm
führt DomTerm als Paket im Atom-Texteditor aus (der ebenfalls auf Electron basiert) und integriert sich in das Atom-Fenstersystem (siehe Bild 2)- Ein Wrapper für die
WebEngine
von JavaFX , was für in Java geschriebenen Code nützlich ist (siehe Bild 4) - Früher verwendete das bevorzugte Frontend Firefox-XUL, aber Mozilla hat XUL inzwischen fallen gelassen
Derzeit ist das Electron-Frontend wahrscheinlich die schönste Option, dicht gefolgt vom Qt-Frontend. Wenn Sie Atom verwenden, atom-domterm
funktioniert ziemlich gut.
Der Backend-Server ist in C geschrieben. Er verwaltet Pseudo-Terminals (PTYs) und Sitzungen. Es ist auch ein HTTP-Server, der das JavaScript und andere Dateien für das Frontend bereitstellt. Der domterm
Der Befehl startet Terminaljobs und führt andere Anforderungen aus. Wenn kein Server läuft, domterm
dämonisiert sich. Die Kommunikation zwischen dem Backend und dem Server erfolgt normalerweise über WebSockets (mit libwebsockets auf dem Server). Die JavaFX-Einbettung verwendet jedoch weder WebSockets noch den DomTerm-Server; Stattdessen kommunizieren Java-Anwendungen direkt über die Java-JavaScript-Bridge.
Ein solider xterm-kompatibler Terminalemulator
DomTerm sieht aus und fühlt sich an wie ein moderner Terminal-Emulator. Es verarbeitet Mausereignisse, 24-Bit-Farbe, Unicode, Zeichen mit doppelter Breite (CJK) und Eingabemethoden. DomTerm leistet sehr gute Arbeit in der vttest-Testsuite.
Zu den ungewöhnlichen Funktionen gehören:
Schaltflächen ein-/ausblenden ("Falten"): Die kleinen Dreiecke (in Bild 2 oben zu sehen) sind Schaltflächen, die die entsprechende Ausgabe ein-/ausblenden. Um die Schaltflächen zu erstellen, fügen Sie einfach bestimmte Escape-Sequenzen in den Eingabeaufforderungstext ein.
Mausklick-Unterstützung für readline
und ähnliche Eingabe-Editoren: Wenn Sie in den (gelben) Eingabebereich klicken, sendet DomTerm die richtige Folge von Pfeiltasten an die Anwendung. (Dies wird durch Escape-Sequenzen in der Eingabeaufforderung aktiviert; Sie können es auch mit Alt+Klick erzwingen.)
Formatieren Sie das Terminal mit CSS: Dies geschieht normalerweise in ~/.domterm/settings.ini
, die beim Speichern automatisch neu geladen wird. Beispielsweise wurden in Bild 2 Endgeräte-spezifische Hintergrundfarben gesetzt.
Eine bessere REPL-Konsole
Ein klassischer Terminalemulator arbeitet mit rechteckigen Gittern aus Zeichenzellen. Dies funktioniert für eine REPL (Befehlsshell), ist aber nicht ideal. Hier sind einige DomTerm-Funktionen, die für REPLs nützlich sind, die normalerweise nicht in Terminal-Emulatoren zu finden sind:
Ein Befehl kann ein Bild, eine Grafik, eine mathematische Formel oder eine Reihe anklickbarer Links "drucken": Eine Anwendung kann eine Escape-Sequenz senden, die fast jeden beliebigen HTML-Code enthält. (Der HTML-Code wird bereinigt, um JavaScript und andere gefährliche Funktionen zu entfernen.)
Bild 3 zeigt ein Fragment aus einem gnuplot
Sitzung. Gnuplot (2.1 oder höher) unterstützt domterm
als Terminaltyp. Die grafische Ausgabe wird in ein SVG-Bild konvertiert, das dann auf dem Terminal gedruckt wird. In meinem Blog-Beitrag Gnuplot-Anzeige auf DomTerm finden Sie weitere Informationen dazu.
Die Kawa-Sprache verfügt über eine Bibliothek zum Erstellen und Transformieren geometrischer Bildwerte. Wenn Sie einen solchen Bildwert auf einem DomTerm-Terminal drucken, wird das Bild in SVG konvertiert und in die Ausgabe eingebettet.
Rich-Text in der Ausgabe: Hilfemeldungen sind besser lesbar und sehen mit HTML-Styling besser aus. Der untere Bereich von Bild 1 zeigt die Ausgabe von domterm help
. (Die Ausgabe ist Klartext, wenn sie nicht unter DomTerm läuft.) Beachten Sie den PAUSED
Nachricht vom eingebauten Pager.
Fehlermeldungen können anklickbare Links enthalten: DomTerm erkennt die Syntax filename:line:column:
und wandelt es in einen Link um, der die Datei und Zeile in einem konfigurierbaren Texteditor öffnet. (Dies funktioniert für relative Dateinamen, wenn Sie PROMPT_COMMAND
verwenden oder ähnlich wie Titelverzeichnisse.)
Ein Compiler kann erkennen, dass er unter DomTerm läuft und direkt Dateiverknüpfungen in einer Escape-Sequenz ausgeben. Dies ist robuster als die Abhängigkeit vom Musterabgleich von DomTerm, da es Leerzeichen und andere Sonderzeichen verarbeitet und nicht von der Verzeichnisverfolgung abhängt. In Bild 4 sehen Sie Fehlermeldungen des Kawa-Compilers. Wenn Sie den Mauszeiger über die Dateiposition bewegen, wird sie unterstrichen und die Datei file:
URL wird im atom-domterm
angezeigt Nachrichtenbereich (unten im Fenster). (Wenn atom-domterm
nicht verwendet wird , werden solche Meldungen in einem Overlay-Feld angezeigt, wie es für PAUSED
zu sehen ist Nachricht in Bild 1.)
Die Aktion beim Klicken auf einen Link ist konfigurierbar. Die Standardaktion für eine file:
Link mit einem #position
Suffix ist, die Datei in einem Texteditor zu öffnen.
Strukturierte interne Darstellung: Die folgenden Elemente werden alle in der internen Knotenstruktur dargestellt:Befehle, Eingabeaufforderungen, Eingabezeilen, normale und Fehlerausgaben, Registerkarten und die Beibehaltung der Struktur, wenn Sie "Als HTML speichern". Die HTML-Datei ist mit XML kompatibel, sodass Sie XML-Tools verwenden können, um die Ausgabe zu durchsuchen oder umzuwandeln. Der Befehl domterm view-saved
öffnet eine gespeicherte HTML-Datei so, dass das Befehlsfalten (Ein-/Ausblenden-Schaltflächen sind aktiv) und ein Reflow bei der Größenänderung des Fensters aktiviert werden.
Eingebauter hübscher Druck im Lisp-Stil: Sie können Pretty-Printing-Anweisungen (z. B. Gruppierung) in die Ausgabe einfügen, sodass Zeilenumbrüche bei der Größenänderung des Fensters neu berechnet werden. Siehe meinen Artikel Dynamic Pretty-Printing in DomTerm für eine tiefere Diskussion.
Grundlegende integrierte Zeilenbearbeitung mit Verlauf (wie GNU readline
):Dies verwendet den integrierten Editor des Browsers, sodass es eine hervorragende Maus- und Auswahlhandhabung bietet. Sie können zwischen dem normalen Zeichenmodus wechseln (die meisten eingegebenen Zeichen werden direkt an den Prozess gesendet); oder Zeilenmodus (normale Zeichen werden eingefügt, während Steuerzeichen Bearbeitungsaktionen auslösen, wobei Enter die bearbeitete Zeile an den Prozess sendet). Die Standardeinstellung ist der automatische Modus, in dem DomTerm zwischen Zeichenmodus und Zeilenmodus umschaltet, je nachdem, ob der PTY in raw
oder
kanonisch
ist Modus.
Ein eingebauter Pager (wie ein vereinfachtes less
):Tastenkombinationen steuern das Scrollen. Im "Paging-Modus" pausiert die Ausgabe nach jedem neuen Bildschirm (oder einzelner Zeile, wenn Sie zeilenweise vorgehen). Der Paging-Modus ist unauffällig und intelligent in Bezug auf Benutzereingaben, sodass Sie ihn (wenn Sie möchten) ausführen können, ohne interaktive Programme zu stören.
Multiplexing und Sitzungen
Tabs und Kacheln: Sie können nicht nur mehrere Terminal-Registerkarten erstellen, sondern sie auch kacheln. Sie können entweder die Maus oder eine Tastenkombination verwenden, um zwischen Bereichen und Tabs zu wechseln und neue zu erstellen. Sie können mit der Maus neu angeordnet und in der Größe verändert werden. Dies wird mithilfe der GoldenLayout-JavaScript-Bibliothek implementiert. Bild 1 zeigt ein Fenster mit zwei Scheiben. Die obere hat zwei Registerkarten, von denen eine Midnight Commander ausführt; im unteren Bereich wird domterm help
angezeigt Ausgabe als HTML. Auf Atom verwenden wir jedoch stattdessen die integrierten ziehbaren Kacheln und Registerkarten; Sie können dies in Bild 2 sehen.
Trennen und erneutes Verbinden mit Sitzungen: DomTerm unterstützt die Anordnung von Sitzungen, ähnlich wie tmux
und GNU screen
. Sie können sogar mehrere Fenster oder Bereiche an dieselbe Sitzung anhängen. Dies unterstützt die gemeinsame Nutzung von Sitzungen mit mehreren Benutzern und Remoteverbindungen. (Aus Sicherheitsgründen müssen alle Sitzungen desselben Servers in der Lage sein, einen Unix-Domain-Socket und eine lokale Datei mit einem zufälligen Schlüssel zu lesen. Diese Einschränkung wird aufgehoben, wenn wir eine gute, sichere Fernzugriffsgeschichte haben.)
Die domterm
Befehl ist auch wie tmux
oder GNU screen
, dass es mehrere Optionen zum Steuern oder Starten eines Servers hat, der eine oder mehrere Sitzungen verwaltet. Der Hauptunterschied besteht darin, dass, wenn es nicht bereits unter DomTerm läuft, das domterm
Der Befehl erstellt ein neues Fenster der obersten Ebene, anstatt im vorhandenen Terminal ausgeführt zu werden.
Der domterm
Der Befehl hat eine Reihe von Unterbefehlen, ähnlich wie tmux
oder git
. Einige Unterbefehle erstellen Fenster oder Sitzungen. Andere (wie das "Drucken" eines Bildes) funktionieren nur innerhalb einer bestehenden DomTerm-Sitzung.
Der Befehl domterm browse
öffnet ein Fenster oder einen Bereich zum Durchsuchen einer bestimmten URL, z. B. beim Durchsuchen der Dokumentation.
DomTerm abrufen und installieren
DomTerm ist in seinem GitHub-Repository verfügbar. Derzeit gibt es keine vorgefertigten Pakete, aber es gibt detaillierte Anweisungen. Alle Voraussetzungen sind auf Fedora 27 vorhanden, was das Erstellen besonders einfach macht.