Home Page
        Bestellung     Downloads     Support     Kontakt     English

Terminal Escape-Sequenzen

Escape-Sequenzen sind spezielle Codes, die das Verhalten von zeichenbasierten Terminals steuern. Dieser Artikel zeigt Beispiele für häufig verwendete Sequenzen in bekannten Terminaltypen.
 

Table of Contents

 



Escape-Sequenzen und Terminals

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.


Escape-Sequenzen erklärt anhand von ANSI/VT100 Terminals

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.


ANSI/VT100 Steuercodes und Esc-Sequenzen

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 Steuercodes und Esc-Sequenzen

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.


Evaluierung einer VT100 Emulation via 'vttest'

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.

 

 

 

Downloads
Orders
Contact
Support
Terms of Use
Privacy Policy
pixel