Konsolenprogramme verwenden normalerweise Flüche oder einen ihrer Nachfolger¹, um die Art von Textbenutzeroberflächen zu erstellen, über die Sie sprechen.
Diese Bibliotheken verwenden eine von zwei Datenbanken, genannt termcap
und terminfo
.². Diese Datenbanken enthalten Karten , die der Bibliothek mitteilen, welche Codes gesendet werden müssen, um die gewünschten Aktionen mit einer großen Anzahl verschiedener Terminaltypen zu erhalten. Die überwiegende Mehrheit der in diesen Datenbanken definierten Terminaltypen hat die Zeit der realen Terminals nicht überstanden und ist daher nur noch von historischem Interesse.
ANSI-Terminals
Moderne Unix-Terminalemulatoren³ verwenden das ANSI X3.64-Protokoll oder eine seiner späteren Varianten:
ANSI X3.64 : Ein Standard zur Steuerung von "Glasterminals" - im Gegensatz zu Teletypen - basiert auf speziellen Zeichenfolgen, die die Gegenstelle interpretiert. Wenn die Unix-Box beispielsweise einem ANSI X3.64-kompatiblen Terminal mitteilen möchte, dass der Cursor in die linke obere Ecke des Bildschirms bewegt werden soll, werden die Zeichen gesendetESC
[
1
;
1
H
. Die ersten beiden Zeichen weisen das Terminal an, eine Steuersequenz zu erwarten, die Einsen sind die Zeile und die Spalte, und esH
handelt sich um den Befehl, der "Cursor bewegen" bedeutet .⁴
Wissenswertes: Viele PC- BBS verwendeten auch ANSI-Codes. ( Noch tun , eigentlich.)
DEC VT100 : Das erste wirklich beliebte ANSI-kompatible Glasterminal war das VT100 von Digital Equipment Corporation. Durch den Nachweis des De-Jure- Standards von ANSI auf dem Markt wurde ein De-Facto- Standard etabliert, der bis heute von Bedeutung ist.
Manchmal wird dies als VT102-Protokoll bezeichnet. Dies ist eine spätere kostenreduzierte und daher populärere Version des VT100 sowie alle verfügbaren integrierten Erweiterungsoptionen.
Die DEC-Terminalprotokolle sind abwärtskompatibel und erstrecken sich vom ersten 1978 eingeführten ANSI-kompatiblen Modell (VT100) bis zu den Modellen der VT500-Serie, die von Boundless Technologies nach dem Kauf des Terminalgeschäfts von DEC im Jahr 1995 hergestellt wurden jetzt aus dem Geschäft, aber ihre Terminals erscheinen immer noch von Zeit zu Zeit auf dem Gebrauchtmarkt.)
xterm : Eine Art Amalgam von ANSI und den VT-was auch immer-Standards. Wenn Sie einen GUI-Terminalemulator wiexterm
oder eines seiner Derivate verwenden, verwenden Sie normalerweise auch dasxterm
Terminalprotokoll, in der Regel das modernerexterm-color
oderdie modernerenxterm-color256
Varianten.
Linux : Die Linux-Konsole verwendet auch eine erweiterte Variante des ANSI-Terminalprotokolls im selben Sinne wie diexterm
Protokolle. Die meisten Erweiterungen haben mit den Unterschieden zwischen einem PC und einem Glasterminal zu tun. Beispielsweise verfügt die IBM-Tastatur über einige Tasten, die sich nicht auf einem DEC VT befinden. (Und umgekehrt.)
Einige Unix-Systeme haben auch ein eigenes Konsolenterminalprotokoll. Es gibt zum Beispiel die scoansi
ANSI X3.64-Variante für SCO Unixes.
Ein typisches Terminal-Emulator-Programm ist so etwas wie ein Mischling und emuliert kein einzelnes Terminal-Modell genau. Es unterstützt möglicherweise 96% aller DEC VT-Escape-Sequenzen bis zum VT320, unterstützt jedoch auch Erweiterungen wie ANSI-Farbe (eine VT525-Funktion) und eine beliebige Anzahl von Zeilen und Spalten. Die 4% der Codes, die es nicht versteht, werden möglicherweise nicht übersehen, wenn Ihre Programme diese Funktionen nicht benötigen, obwohl Sie curses
(oder was auch immer) mitgeteilt haben , dass Programme, die sie verwenden, das VT320-Protokoll verwenden sollen. Solch ein Programm könnte sich selbst als VT320-kompatibel bewerben, obwohl dies streng genommen nicht der Fall ist
Nicht-ANSI-Terminals
Es gibt noch ein paar andere bemerkenswerte Standards, auf die Sie manchmal stoßen:
Wyse : Als einer der ersten unabhängigen Hersteller von Glasterminals begann Wyse in den frühen 1980er Jahren mit der Herstellung von Terminals, bevor Workstation Computing begann, Minicomputer zu verdrängen. Wyse-Terminals waren zwar in der Lage, das VT100 und andere gängige Terminalprotokolle zu emulieren, hatten jedoch auch eigene native Codes.
IBM 3270 : Obwohl es sich nicht ausschließlich um einen "Unix" -Terminaltyp handelt, führte die Notwendigkeit, Unix-Systeme mit IBM-Mainframes zu verbinden, zur Erstellung von Terminalemulationsprogrammen der IBM 3270-Serie, die Sie immer noch verwenden können. Emulatoren für die späterenTerminalsder IBM 5250-Serie sind ebenfalls weit verbreitet und werden heutzutage am häufigsten für die Verbindung mit AS / 400- und System i- Minicomputern verwendet.
Tektronix 4014 : Bevor PCs und Workstations Glas-Terminals weitgehend verdrängten und Bitmap-Grafiken zum Standard machten, gab es teure Grafik-Terminals, die als Reaktion auf Textbefehle ähnlich den oben beschriebenen Escape-Sequenzen Grafiken auf den Bildschirm zeichneten. Am beliebtesten war wohl die Tektronix 4010-Serie.
Es hat Spaß gemacht, sie zu benutzen. Sie könnten ein Programm schreiben, das eine Grafik zeichnet, aber anstatt sie einfach zum Zeichnen auf Ihrem lokalen Terminal auszuführen, könnten Sie die Ausgabe in eine Datei umleiten:
$ ./my4014program > my-neat-graphic
Sie können diese Datei dann an eine andere Person senden und diese kann cat
sie auf ihrem Tek-Terminal anzeigen, ohne Ihr Programm zu haben. Ein Teil des Charmes war, wie langsam diese Terminals beim Zeichnen waren, sodass Sie den Grafikaufbau über mehrere Sekunden beobachten konnten.
Heute mit Unix Terminal Emulation arbeiten
Sie können curses
anhand der TERM
Umgebungsvariablen herausfinden, welchen Terminalstandard Sie für Bibliotheken verwenden möchten:
$ echo $TERM
xterm-color
Wenn Sie ssh
zu einem anderen System wechseln, wird die TERM
Variable mitgeführt, damit die Unix-Remote-Box weiß, wie sie mit Ihrem lokalen Terminal kommuniziert.
Da es sich bei so vielen dieser Protokolle um ANSI X3.64-Varianten handelt und die allgegenwärtigen ASCII- und UTF-8-Zeichencodierungsstandards so viel anderes berücksichtigen, ist eine falsche TERM
Variable normalerweise nicht katastrophal. Dinge, die dazu neigen, kaputt zu gehen, sind erweiterte Tasten wie Start und Bild auf, Alt-beliebige Tastenkombinationen und typografische Anzeigefunktionen wie Farbe, Fettdruck usw.
Fußnoten:
Meistens Flüche .
Es gibt auch direkte Konkurrenten der curses
API wie S-Lang .
AT & T wurde terminfo
als Ersatz für die BSD- termcap
Datenbank herausgegeben und konnte diese größtenteils ersetzen. Es gibt jedoch immer noch Programme, die die alte termcap
Datenbank verwenden. Dies ist einer der vielen Unterschiede zwischen BSD und AT & T, die Sie bei modernen Systemen immer noch feststellen können.
Meine macOS-Box hat keine /etc/termcap
, aber /usr/share/terminfo
eine Standardinstallation von FreeBSD ist genau umgekehrt, obwohl sich diese beiden Betriebssysteme auf der Kommandozeilenebene oft sehr ähnlich sind.
minicom
, xterm
, mintty
, GNOME - Terminal , Terminal.app usw.
Ordnungsgemäß geschriebene Unix-Programme geben diese Escape-Sequenzen nicht direkt aus. Stattdessen verwenden sie eine der oben genannten Bibliotheken und weisen sie an, "den Cursor auf Position (1,1) zu bewegen" oder was auch immer, und die Bibliothek gibt die erforderlichen Terminal-Steuercodes basierend auf Ihrer TERM
Umgebungsvariableneinstellung aus. Auf diese Weise kann das Programm unabhängig vom Terminaltyp, auf dem Sie es ausführen, ordnungsgemäß ausgeführt werden.
Alte Textterminals hatten viele merkwürdige Funktionen, die von den Programmen nicht viel genutzt wurden, so dass viele beliebte Terminal-Emulator-Programme diese Funktionen einfach nicht implementieren. Häufige Auslassungen sind die Unterstützung von Sixel-Grafiken und Textmodi mit doppelter Breite und doppelter Höhe.
Der Betreuer von xterm
schrieb ein Programm vttest
zum Testen von VT-Terminal-Emulatoren wie z xterm
. Sie können es mit anderen Terminalemulatoren ausführen, um herauszufinden, welche Funktionen sie nicht unterstützen.