In der Vergangenheit (vor dem PC) sollte ein VT100/VT102-Terminal ein Gerät aus einem physischen Bildschirm und einer Tastatur sein. Das Terminal war mit einem zentralen Server verbunden und ermöglichte einem Benutzer, Daten in den Server einzugeben und die Ergebnisse zu sehen, die der Server an den Bildschirm des Benutzers zurückschickte. Auf diese Weise hatten die Benutzer (verhältnismäßig preiswerte) Terminals auf ihren Schreibtischen, um ihnen gemeinsamen Zugriff auf einen (kostspieligen) zentralen Computer zu ermöglichen.
Anfangs waren diese Terminals im Wesentlichen Teletype-Maschinen, die nur Text von links nach rechts und von oben nach unten drucken konnten. Mit der Weiterentwicklung der Technologie wurde jedoch eine Methode eingeführt, Steuerzeichen in die an das Terminal gesendeten Daten einzubetten, um dem Terminal mitzuteilen, den Text zu formatieren oder andere Funktionen auszuführen, die die Textausgabe beeinflussten.
In vielen Terminaltypen wurde zum Durchführen dieser Aufgaben das Escape- oder ESC-Zeichen verwendet. ESC ist ein spezielles Steuerzeichen im ASCII-Zeichensatz, das den Code 27 oder hex 1B hat. Wenn dieses Zeichen in den Daten erscheint, die an das Terminal gesendet werden, teilt es dem Terminal mit, dass die nächsten Bytes Steuerinformationen oder eine Steuersequenz und nicht zu druckender Text sind. Daher der Begriff Escape-Sequenz.
Hierzu wurden verschiedene Standards verwendet. Die Firma Wyse verwendete Sequenzen, bei denen dem ESC-Zeichen ein weiteres Zeichen folgt, das die Art der Funktion festlegt. DEC dagegen folgte mit den VT100 Terminals den Vorgaben des ECMA-48 Standards und setzte diesen fast vollständig um. In diesem Standard wird eine Sequenz auch mit ESC begonnen, kann aber zunächst Parameter enthalten und erst das letzte Zeichen legt fest, welche Funktion tatsächlich ausgeführt wird.
Das VT100-Terminal von DEC war ein sehr erfolgreiches Terminal, das den Vorgaben des ECMA-48 Standards (ANSI X3.64) folgte und diese (bis auf die Farbsteuerung) fast vollständig umsetzte. Wegen seines kommerziellen Erfolgs und dem der Nachfolgersysteme wurden die spezifischen Escape-Sequenzen auch auf andere Terminaltypen übertragen und sind bis heute relevant. So basiert z. B. der im Linux-Bereich weit verbreitete Terminaltyp xterm auf der VT420, die auf VT100 (und damit auf die ANSI Definition) zurückgeht.
Wie bei allen Terminaltypen ist VT100 ein Terminalstandard, der es dem Server ermöglicht, Text an den Bildschirm des Benutzers zu senden. Statt nur Text von links nach rechts und von oben nach unten anzuzeigen, erhält die Anwendung durch das Einbetten spezieller Steuerungen im Text die Kontrolle über die Platzierung des Terminals und die Anzeigeeigenschaften des Texts (Position, Farbe usw.). Diese Sequenzen beginnen mit dem ESC-Zeichen, das ein Byte mit dem Wert 27 oder 1B (hex) ist und je nach Kontext entweder als \e oder ^[ oder als ESC angezeigt wird.
Zum Beispiel würde der Host, um den Text "Dies ist ein Fehler!" an den Bildschirm des Benutzers
zu senden, wobei das Wort "Fehler" unterstrichen ist, dem Terminal
" Dies ist ein esc[4m Fehler esc[0m! "
senden. Anstatt den gesamten Text anzuzeigen, interpretiert das VT100-Terminal die Codes
esc[4m und esc[0m
als Befehle, die ihm mitteilen, den Text dazwischen zu unterstreichen.
Daher lautet die tatsächliche Ausgabe:
Dies ist ein Fehler!
Da Linux-Konsolen auf dem
xterm-Terminaltyp basieren,
der wiederum vom ursprünglichen
VT100 abgeleitet ist, kann das oben Genannte
am Linux-Terminal durch folgenden Befehl erreicht werden:
echo -e "Dies ist ein \e[4m Fehler \e[0m!"
Windows unterstützt auch den ANSI bzw. xterm Standard. Z.B. kann man unter Windows 10
in einer Eingabeaufforderung das Prompt farblich hervorheben, indem man den Befehl PROMPT=$E[32m$P$E[0m$G$S
eingibt ($E entspricht hier dem ESC-Zeichen und die Sequenz basiert auf einer ANSI Farb-Sequenz, s.u).
Alternativ kann man in einer Windows Power-Shell, nachdem man einmalig Set-Variable -name ESC "$([char]27)"
eingegeben hat, $ESC
als Platzhalter für Escape verwenden und das obige Linux Beispiel als
Write-host "Dies ist ein $ESC[4m Fehler $ESC[0m!"
umsetzen.
Unten findet sich eine Liste grundlegender Escape-Sequenzen für das VT100-Terminal. DEC entschied sich dafür, die meisten ihrer Sequenzen mit einem esc zu beginnen, gefolgt von einer eckigen Klammer [ und dann Text variabler Länge bis zum nächsten Groß- oder Kleinbuchstaben.
Sequence | Description | Example |
---|---|---|
esc [ n A | Cursor Up n times | echo -e "\e[5A" |
esc [ n B | Cursor Down n times | |
esc [ n C | Cursor Forward n times | |
esc [ n D | Cursor Backward n times | |
esc [ row ; col H | Cursor Position [row;column] | echo -e "\e[24;1H" |
esc [ n J | Erase in Display: n= 0/1/2 → below/above/all |
echo -e "\e[2J" |
esc [ n K | Erase in Line n= 0/1/2 → left/right/all |
echo -e "\e[1K" |
esc [ n ; n ... m | Set text attributes n= 1 → highlight; n=5→blink, n=7→inverse, ... (s.u.) |
echo -e "\e[5;7minverse&blinking\e[0m!" |
esc [ n @ | Insert n (Blank) Character(s) | |
esc 7 | Save cursor position | |
esc 8 | Jump to saved cursor position | |
esc [ ? 3 h | Sets display to 132 columns per line | |
esc [ ? 3 l | Sets display to 80 columns per line |
Hinweis: ESC entspricht dem ASCII-Code hex 1B oder dezimal 27. Andere kursive Werte wie n, col oder row sind Dezimalzahlen.
Attribute | Beschreibung | Beispiel |
---|---|---|
0 | Zurücksetzen | |
1 | Fett/Hell | |
4 | Unterstrichen | |
5 | Blinkend | echo -e "\e[5mblinking\e[0m" |
7 | Invers | |
31-37 | Textfarbe (Schwarz, Rot, Grün, Gelb, Blau, Magenta, Cyan, Grau) | echo -e "\e[31mRed\e[0m" |
41-47 | Hintergrund Color (Schwarz, Rot, Grün, Gelb, Blau, Magenta, Cyan, Grau) |
Eine vollständige Liste von Terminal-Emulationssequenzen für VT100 finden Sie im z.B. VT100-Benutzerhandbuch auf vt100.net.
Wyse war ein weiterer einflussreicher Hersteller von Terminals. Wyse verwendete ebenfalls das esc-Zeichen, um Steuerzeichen in den Terminaldaten einzubetten, jedoch verwendete Wyse für ihre Escape-Sequenzen ein Format, das sich vom VT100 unterschied. Bei Wyse bestimmt das Zeichen (oder der Buchstabe) nach dem esc, was die Sequenz tut und was noch folgen wird. Zum Beispiel bewegen sowohl die esca- als auch die esc=-Sequenzen den Cursor zu einer bestimmten Zeile und Spalte. In einem Fall folgen allerdings dezimale Zahlen für Zeile und Spalte, während in einem anderen Fall zwei weitere Zeichen folgen, die dann anhand einer Tabelle dekodiert werden um die entsprechende Zeile oder Spalte zu repräsentieren.
Sequence | Description | Example |
---|---|---|
esc j | Cursor Up | echo -e "\ej" |
esc a rr R cc C | Move cursor to row and column rr and cc decimal values |
echo -e "\ea4R12C" |
esc = r c | Move cursor to row and column r and c according to Row/Column Codes |
echo -e "\e=0AC" |
esc Y | Clear end of page to space | echo -e "\eY" |
esc + | Clear screen to spaces | echo -e "\e+" |
esc G n | Set text attributes n= according to Attribute Codes |
echo -e "\eG4" |
Hinweis: ESC entspricht dem ASCII-Code hex 1B oder dezimal 27. Andere kursive Werte wie n, r oder c sind Codes, die auf dem Wyse-Referenzhandbuch basieren.
Eine vollständige Liste von Terminal-Emulationssequenzen für Wyse-50 finden Sie im WY 50 Quick Reference Manual.
Seit den 90er Jahren sind Terminals größtenteils Software, die die Funktionen der originalen Terminals emuliert. Da die Escape-Sequenzen und ihre Wechselwirkungen und Nebeneffekte bei unerwarteten Kombinationen recht komplex sind, hängt die Qualität eines Terminal-Emulators davon ab, wie getreu er das ursprüngliche Verhalten nachahmt.
Die Qualität eines Terminal-Emulators lässt sich messen, indem man prüft, wie vollständig er die Terminal-Emulationssequenzen (siehe oben) implementiert und wie genau er das Verhalten des ursprünglichen Terminals in Grenzsituationen wiedergibt (z.B. wenn er unerwartete, fehlerhafte oder seltsame Kombinationen von Sequenzen empfängt).
Vttest ist eine Anwendung, die dazu dient, Funktionen von VT100 und verwandten Terminals oder Emulationen davon, wie z.B. xterm, zu demonstrieren. Das Programm wurde ursprünglich im Jahr 1986 von Per Lindberg geschrieben.