ANSI-Escape-Code - ANSI escape code

ANSI X3.64 (ISO 6429)
Htop.png
Ausgabe des Systemmonitors htop , einer ncurses-Anwendung (die SGR und andere ANSI/ISO-Kontrollsequenzen verwendet).
Standard
Einstufung ISO/IEC 2022- basierter Steuercode und Steuersequenzsatz
Andere verwandte Codierung(en) Andere Normen für Steuerfunktionen : ITU T.101 , JIS X 0207 , ISO 6630 , DIN 31626 , ETS 300 706

ANSI - Escape - Sequenzen sind ein Standard für die In-Band - Signalisierung zur Steuerung Cursorposition, Farbe, Schriftart Styling und andere Optionen auf Videotext - Terminals und Terminalemulatoren . Bestimmte Bytefolgen , die meistens mit einem ASCII-Escape- Zeichen und einem Klammerzeichen beginnen , werden in Text eingebettet. Das Terminal interpretiert diese Sequenzen als Befehle und nicht als Text, um wörtlich anzuzeigen.

ANSI-Sequenzen wurden in den 1970er Jahren eingeführt, um herstellerspezifische Sequenzen zu ersetzen, und wurden Anfang der 1980er Jahre auf dem Computerausrüstungsmarkt weit verbreitet. Sie werden in der Entwicklung, in wissenschaftlichen, kommerziellen textbasierten Anwendungen sowie in Bulletin Board-Systemen verwendet , um standardisierte Funktionalität anzubieten.

Obwohl Hardware-Textterminals im 21. Jahrhundert immer seltener geworden sind, bleibt die Relevanz des ANSI-Standards bestehen, da eine große Mehrheit der Terminalemulatoren und Befehlskonsolen zumindest einen Teil des ANSI-Standards interpretieren.

Geschichte

Fast alle Hersteller von Videoterminals fügten herstellerspezifische Escape-Sequenzen hinzu, um Operationen wie das Platzieren des Cursors an beliebigen Positionen auf dem Bildschirm durchzuführen. Ein Beispiel ist das VT52- Terminal, das es ermöglichte, den Cursor an einer x,y-Position auf dem Bildschirm zu platzieren, indem das ESCZeichen, ein YZeichen und dann zwei Zeichen gesendet wurden, die mit numerischen Werten gleich der x,y-Position plus 32 (also beginnend mit dem ASCII-Leerzeichen und Vermeidung der Steuerzeichen). Der Hazeltine 1500 hatte eine ähnliche Funktion, die mit aufgerufen wurde ~, DC1und dann die X- und Y-Positionen durch ein Komma getrennt. Während die beiden Terminals diesbezüglich identische Funktionalität aufwiesen, mussten sie mit unterschiedlichen Steuersequenzen aufgerufen werden.

Da diese Sequenzen für verschiedene Terminals unterschiedlich waren, mussten aufwendige Bibliotheken wie termcap ("Terminal Capabilities") und Dienstprogramme wie tput erstellt werden, damit Programme dieselbe API verwenden können , um mit jedem Terminal zu arbeiten. Darüber hinaus erforderten viele dieser Terminals das Senden von Zahlen (z. B. Zeilen und Spalten) als binäre Werte der Zeichen; bei einigen Programmiersprachen und bei Systemen, die intern kein ASCII verwendeten, war es oft schwierig, eine Zahl in das richtige Zeichen umzuwandeln.

Der ANSI-Standard versuchte, diese Probleme zu lösen, indem er einen Befehlssatz erstellte, den alle Terminals verwenden würden und der verlangte, dass alle numerischen Informationen als ASCII-Zahlen übertragen werden. Der erste Standard der Reihe war ECMA-48, der 1976 angenommen wurde. Es war eine Fortsetzung einer Reihe von Zeichencodierungsstandards, der erste war ECMA-6 von 1965, ein 7-Bit-Standard, aus dem ISO 646 stammt. Der Name "ANSI-Escape-Sequenz" stammt aus dem Jahr 1979, als ANSI ANSI X3.64 übernahm. Das ANSI X3L2-Komitee arbeitete mit dem ECMA- Komitee TC 1 zusammen, um nahezu identische Standards zu erstellen. Diese beiden Standards wurden zu einem internationalen Standard, ISO 6429, zusammengeführt. 1994 zog ANSI seinen Standard zugunsten des internationalen Standards zurück.

DEC VT100-Terminal
Das Videoterminal DEC VT100.

Das erste populäre Videoterminal, das diese Sequenzen unterstützte, war das 1978 eingeführte Digital VT100 . Dieses Modell war auf dem Markt sehr erfolgreich und löste eine Vielzahl von VT100-Klonen aus, von denen zu den frühesten und beliebtesten der viel günstigere Zenith Z . gehörte -19 im Jahr 1979. Andere waren der Qume QVT-108, Televideo TVI-970, Wyse WY-99GT sowie die optionalen Modi "VT100" oder "VT103" oder "ANSI" mit unterschiedlichen Kompatibilitätsgraden bei vielen anderen Marken. Die Popularität dieser führte nach und nach dazu, dass immer mehr Software (insbesondere Bulletin Board-Systeme und andere Online-Dienste ) die Escape-Sequenzen annahmen, was zu fast allen neuen Terminals und Emulatorprogrammen führte, die sie unterstützten.

1981 wurde ANSI X3.64 von der FIPS- Veröffentlichung 86 zur Verwendung in der US-Regierung übernommen. Später hörte die US-Regierung auf, Industriestandards zu duplizieren, also FIPS pub. 86 wurde zurückgezogen.

ECMA-48 wurde mehrmals aktualisiert und befindet sich derzeit in der 5. Ausgabe von 1991. Es wird auch von ISO und IEC als Standard ISO/IEC 6429 übernommen . Eine Version wird als japanischer Industriestandard als JIS X 0211 übernommen .

Zu den verwandten Standards gehören ITU T.61 , der Teletex- Standard, und der ISO/IEC 8613 , der Open Document Architecture- Standard (hauptsächlich ISO/IEC 8613-6 oder ITU T.416). Die beiden Systeme teilen sich viele Escape-Codes mit dem ANSI-System, mit Erweiterungen, die für Computerterminals nicht unbedingt sinnvoll sind. Beide Systeme wurden schnell nicht mehr verwendet, aber ECMA-48 markiert die darin verwendeten Erweiterungen als reserviert.

Plattformunterstützung

Unix-ähnliche Systeme

Obwohl Bibliotheken im Stil von termcap / terminfo hauptsächlich auf und für Unix entwickelt wurden, konnten Programme, die auf Unix-ähnlichen Betriebssystemen liefen, Mitte der 1980er Jahre fast immer davon ausgehen, dass sie ein Terminal oder einen Emulator verwendeten, der ANSI-Sequenzen unterstützte; Dies führte zu einer weit verbreiteten Verwendung von ANSI durch Programme, die auf diesen Plattformen ausgeführt wurden. Zum Beispiel schreiben viele Spiele und Shell-Skripte und Dienstprogramme wie Farbverzeichnislisten direkt die ANSI-Sequenzen und können daher nicht auf einem Terminal verwendet werden, das sie nicht interpretiert. Viele Programme, einschließlich Texteditoren wie vi und GNU Emacs , verwenden termcap oder terminfo oder verwenden Bibliotheken wie curses , die termcap oder terminfo verwenden und somit theoretisch Nicht-ANSI-Terminals unterstützen, aber dies wird heutzutage so selten getestet, dass sie es sind Es ist unwahrscheinlich, dass mit diesen Terminals gearbeitet wird.

Xterm-Terminalemulator
Der Xterm-Terminalemulator.

Terminalemulatoren für die Kommunikation mit lokalen Programmen sowie Remote-Rechnern und die Textsystemkonsole unterstützen fast immer ANSI-Escape-Codes. Dazu gehören Terminalemulatoren wie xterm , rxvt , GNOME Terminal und Konsole auf Systemen mit X11- basierten oder Wayland- basierten Fenstersystemen sowie Terminal.app und Terminalemulatoren von Drittanbietern wie iTerm2 auf macOS .

DOS, OS/2 und Windows

MS-DOS 1.x unterstützte das ANSI oder andere beliebige Escape-Sequenzen nicht. Nur wenige Steuerzeichen ( BEL , CR , LF , BS ) wurden vom zugrunde liegenden BIOS interpretiert, was eine Vollbildanwendung fast unmöglich macht. Alle Anzeigeeffekte mussten mit BIOS-Aufrufen, die notorisch langsam waren, oder durch direkte Manipulation der IBM PC-Hardware erfolgen.

DOS 2.0 führte die Möglichkeit ein, einen Gerätetreiber für die ANSI-Escape-Sequenzen hinzuzufügen – der De-facto- Standard ist ANSI.SYS , aber andere wie ANSI.COM , NANSI.SYS und ANSIPLUS.EXE werden ebenfalls verwendet (diese sind erheblich schneller, da sie BIOS umgehen). Langsamkeit und die Tatsache, dass es nicht standardmäßig installiert war, machten Software selten davon Gebrauch; Stattdessen manipulierten Anwendungen weiterhin direkt die Hardware, um die erforderliche Textanzeige zu erhalten. ANSI.SYS und ähnliche Treiber funktionierten weiterhin unter Windows 9x bis Windows ME und in NT-abgeleiteten Systemen für 16-Bit-Legacy-Programme, die unter NTVDM ausgeführt werden .

Viele DOS-Klone konnten die Sequenzen interpretieren und erfordern nicht das Laden eines separaten ANSI-Treibers. PTS-DOS sowie Concurrent DOS , Multiuser DOS und REAL/32 haben integrierte Unterstützung (plus eine Reihe von Erweiterungen). OS/2 hatte einen ANSI- Befehl, der die Sequenzen aktivierte.

Die Windows-Konsole unterstützte weder ANSI-Escape-Sequenzen, noch stellte Microsoft eine Methode zur Verfügung, um sie zu aktivieren. Einige Ersatz oder Ergänzungen für das Konsolenfenster wie JP Software TCC (früher 4NT), Michael J. Mefford der ANSI.COM, Jason Hoods ANSICON und Maximus5 der ConEmu interpretiert ANSI - Escape - Sequenzen , die durch Programme gedruckt. Ein Python-Paket interpretierte intern ANSI-Escape-Sequenzen in gedrucktem Text und übersetzte sie in Aufrufe zur Manipulation der Farbe und der Cursorposition, um die Portierung von Python-Code mit ANSI nach Windows zu vereinfachen. Cygwin führt eine ähnliche Übersetzung für alle Ausgaben durch, die mithilfe von Cygwin-Dateideskriptoren an die Konsole geschrieben werden. Die Filterung erfolgt durch die Ausgabefunktionen von cygwin1.dll , um die Portierung von POSIX C-Code auf Windows zu ermöglichen.

Im Jahr 2016 veröffentlichte Microsoft das Update für Windows 10, Version 1511, das unerwartet die Unterstützung für ANSI-Escape-Sequenzen implementierte, über zwei Jahrzehnte nach dem Debüt von Windows NT. Dies wurde zusammen mit dem Windows-Subsystem für Linux durchgeführt , sodass eine Unix-ähnliche Terminal-basierte Software die Sequenzen in der Windows-Konsole verwenden kann. Leider ist dies standardmäßig deaktiviert, aber Windows PowerShell 5.1 hat es aktiviert. PowerShell 6 ermöglichte es, das nötige ESC-Zeichen in einen String mit einzubetten `e. Das 2019 eingeführte Windows Terminal unterstützt die Sequenzen standardmäßig, und Microsoft beabsichtigt, die Windows-Konsole durch Windows Terminal zu ersetzen.

Atari ST

Der Atari ST verwendete das vom VT52 übernommene Befehlssystem mit einigen Erweiterungen für die Farbunterstützung, anstatt ANSI-Escape-Codes zu unterstützen.

AmigaOS

AmigaOS interpretiert nicht nur ANSI-Codesequenzen für die Textausgabe auf dem Bildschirm, der AmigaOS- Druckertreiber interpretiert sie auch (mit AmigaOS-eigenen Erweiterungen) und übersetzt sie in die Codes, die für den jeweiligen angeschlossenen Drucker erforderlich sind.

Amiga CLI (Shell) Fensterstil-Steuerungssequenzen
Wirkung
ESC [ nu Setzt die maximale Zeilenlänge im Fenster auf n.
ESC [ nt Setzt die maximale Zeilenanzahl im Fenster auf n.
ESC [ nx Startet Text n Pixel vom linken Rand des Fensters.
ESC [ ny Startet Text n Pixel vom oberen Rand des Fensters.

VMS / OpenVMS

VMS wurde entwickelt, um interaktiv mit den textbasierten Videoterminals von Digital wie dem oben erwähnten VT100 verwaltet zu werden ; später mit grafischen Terminalemulatoren wie VWS Terminal, DECTerm und xterm.

Beschreibung

Steuerzeichen

Obwohl es technisch nicht zum Standard gehört, übernehmen fast alle Benutzer einige Funktionen einiger Einzelbyte-Zeichen. Dies wird verwendet, um die übertragene Datenmenge zu verkürzen oder einige Funktionen auszuführen, die von Escape-Sequenzen nicht verfügbar sind:

Beliebte Steuerzeichen (keine vollständige Liste)
^ C0 Abkürzung Name Wirkung
^G 7 BEL Klingel Macht ein hörbares Geräusch.
^H 8 BS Rücktaste Bewegt den Cursor nach links (kann aber "rückwärts umbrechen", wenn sich der Cursor am Zeilenanfang befindet).
^Ich 9 HT Tab Bewegt den Cursor nach rechts zum nächsten Vielfachen von 8.
^J 0x0A LF Zeilenvorschub Geht zur nächsten Zeile, scrollt die Anzeige nach oben, wenn sie sich am unteren Bildschirmrand befindet. Bewegt sich normalerweise nicht horizontal, obwohl sich Programme nicht darauf verlassen sollten.
^L 0x0C FF Formular-Feed Verschieben Sie einen Drucker an den Anfang der nächsten Seite. Bewegt sich normalerweise nicht horizontal, obwohl sich Programme nicht darauf verlassen sollten. Die Wirkung auf Videoterminals variiert.
^M 0x0D CR Wagenrücklauf Bewegt den Cursor auf Spalte Null.
^[ 0x1B ESC Fliehen Startet alle Escape-Sequenzen

Escape-Sequenzen variieren in der Länge. Das allgemeine Format für eine ANSI-konforme Escape-Sequenz wird durch ANSI X3.41 (entspricht ECMA-35 oder ISO/IEC 2022) definiert. Die Escape-Sequenzen bestehen nur aus Bytes im Bereich 0x20—0x7F (alle ASCII-Zeichen, die keine Kontrollzeichen sind) und können ohne Vorausschauen geparst werden. Das Verhalten, wenn ein Steuerzeichen, ein Byte mit gesetztem High-Bit oder ein Byte, das nicht Teil einer gültigen Sequenz ist, vor dem Ende angetroffen wird, ist undefiniert.

Fe Fluchtsequenzen

Folgt dem ESCein Byte im Bereich 0x40 bis 0x5F, ist es von diesem Typ. Delegiert an den anwendbaren C1-Steuercode- Standard. Dementsprechend folgen alle Escape-Sequenzen, die C1-Steuercodes von ANSI X3.64 / ECMA-48 entsprechen, diesem Format.

Der Standard besagt, dass in 8-Bit-Umgebungen die Steuerfunktionen, die den Typ- FeEscape-Sequenzen (denjenigen aus dem Satz von C1-Steuercodes ) entsprechen, als einzelne Bytes im Bereich 0x80–0x9F dargestellt werden können. Auf modernen Geräten werden diese Codes jedoch häufig für andere Zwecke verwendet, z. B. für Teile von UTF-8 oder für CP-1252- Zeichen, sodass normalerweise nur die 2-Byte-Sequenz verwendet wird. Bei UTF-8 kann ein C1-Steuercode in zwei Bytes kodiert werden (zB 0xC2,0x8E für U+008E ), aber es wird dadurch kein Platz gespart.

Einige ANSI-Escape-Sequenzen vom Typ Fe (C1-Mengenelement) (keine vollständige Liste)
C1 Abkürzung Name Wirkung
ESC N 0x8E SS2 Einzelschicht Zwei Wählen Sie ein einzelnes Zeichen aus einem der alternativen Zeichensätze aus . SS2 wählt den G2-Zeichensatz und SS3 wählt den G3-Zeichensatz aus. In einer 7-Bit-Umgebung folgt darauf ein oder mehrere GL-Bytes (0x20–0x7F), die ein Zeichen aus diesem Satz angeben. In einer 8-Bit-Umgebung können dies stattdessen GR-Bytes (0xA0–0xFF) sein.
ESC Aus 0x8F SS3 Einzelschicht Drei
ESC P 0x90 DCS Gerätesteuerzeichenfolge Abgeschlossen von ST. Die Verwendung dieser Sequenz durch Xterm umfasst das Definieren von benutzerdefinierten Schlüsseln und das Anfordern oder Festlegen von Termcap-/Terminfo-Daten.
ESC [ 0x9B CSI Steuersequenz-Einführung Startet die meisten nützlichen Sequenzen, abgeschlossen durch ein Byte im Bereich von 0x40 bis 0x7E.
ESC \ 0x9C NS String-Terminator Beendet Zeichenfolgen in anderen Steuerelementen.
ESC ] 0x9D OSC Betriebssystembefehl Startet eine Steuerzeichenfolge für das Betriebssystem, die von ST beendet wird.
ESC X 0x98 SOS Anfang der Zeichenfolge Akzeptiert ein Argument einer Textzeichenfolge, die mit ST abgeschlossen wird. Die Verwendungen für diese String-Steuerungssequenzen werden durch die Anwendung oder Datenschutzdisziplin definiert. Diese Funktionen werden selten implementiert und die Argumente werden von xterm ignoriert. Einige Kermit- Clients ermöglichen es dem Server, Kermit-Befehle auf dem Client automatisch auszuführen, indem er sie in APC-Sequenzen einbettet; Dies ist ein potenzielles Sicherheitsrisiko, wenn der Server nicht vertrauenswürdig ist.
ESC ^ 0x9E PN Datenschutznachricht
ESC _ 0x9F APC Anwendungsprogrammbefehl

CSI-Sequenzen (Control Sequence Introducer)

Bei Control Sequence Introducer- oder CSI-Befehlen ESC [folgt dem eine beliebige Anzahl (einschließlich keiner) von „Parameterbytes“ im Bereich 0x30–0x3F (ASCII 0–9:;<=>?), dann von einer beliebigen Anzahl von „Zwischenbytes“ im Bereich 0x20–0x2F (ASCII-Leerzeichen und !"#$%&'()*+,-./), dann schließlich durch ein einzelnes "letztes Byte" im Bereich 0x40–0x7E (ASCII @A–Z[\]^_`a–z{|}~).

Alle gängigen Sequenzen verwenden die Parameter nur als Reihe von durch Semikolon getrennten Zahlen wie 1;2;3. Fehlende Zahlen werden behandelt als 0( 1;;3verhält sich wie die mittlere Zahl ist 0, und überhaupt keine Parameter ESC[mverhält sich wie ein 0Reset-Code). Einige Sequenzen (wie CUU) behandeln 0so 1, um fehlende Parameter nützlich zu machen.

Eine Teilmenge der Vereinbarungen wurde als "privat" deklariert, damit Endgerätehersteller ihre eigenen Sequenzen einfügen konnten, ohne mit dem Standard in Konflikt zu geraten. Sequenzen, die die Parameterbytes <=>?oder die letzten Bytes 0x70–0x7E ( p–z{|}~) enthalten, sind privat.

Das Verhalten des Terminals ist undefiniert, wenn eine CSI-Sequenz ein Zeichen außerhalb des Bereichs 0x20–0x7E enthält. Diese unzulässigen Zeichen sind entweder C0-Steuerzeichen (der Bereich 0–0x1F), DEL (0x7F) oder Bytes mit gesetztem High-Bit. Mögliche Antworten sind, das Byte zu ignorieren, es sofort zu verarbeiten und darüber hinaus mit der CSI-Sequenz fortzufahren, sie sofort abzubrechen oder den Rest zu ignorieren.

Einige ANSI-Kontrollsequenzen (keine vollständige Liste)
Abkürzung Name Wirkung
CSI n A CUU Cursor hoch Bewegt den Cursor um n (Standard 1) Zellen in die angegebene Richtung. Befindet sich der Cursor bereits am Bildschirmrand, hat dies keine Auswirkung.
CSI n B CUD Cursor nach unten
CSI n C CUF Cursor vorwärts
CSI n D CUB Cursor zurück
CSI n E CNL Cursor nächste Zeile Bewegt den Cursor zum Anfang der Zeile n (Standard 1) Zeilen nach unten. (nicht ANSI.SYS )
CSI n F CPL Cursor Vorherige Zeile Bewegt den Cursor an den Anfang der Zeile n (Standard 1) Zeilen nach oben. (nicht ANSI.SYS )
CSI n G CHA Cursor horizontal absolut Bewegt den Cursor in Spalte n (Standard 1). (nicht ANSI.SYS )
CSI  n  ; m  H TASSE Cursorposition Bewegt den Cursor in Zeile n , Spalte m . Die Werte basieren auf 1 und werden standardmäßig 1(obere linke Ecke) verwendet, wenn sie weggelassen werden. Eine Sequenz wie CSI ;5Hist ein Synonym für CSI 1;5Hsowie CSI 17;Hist dasselbe wie CSI 17HundCSI 17;1H
CSI n J ED Im Display löschen Löscht einen Teil des Bildschirms. Wenn n ist 0(oder fehlt), löschen Sie vom Cursor bis zum Ende des Bildschirms. Wenn n ist 1, löschen Sie vom Cursor bis zum Anfang des Bildschirms. Wenn n ist 2, löschen Sie den gesamten Bildschirm (und bewegen Sie den Cursor auf DOS ANSI.SYS nach oben links ). Wenn n ist 3, löschen Sie den gesamten Bildschirm und löschen Sie alle Zeilen, die im Scrollback-Puffer gespeichert sind (diese Funktion wurde für xterm hinzugefügt und wird von anderen Terminalanwendungen unterstützt).
CSI n K EL In Zeile löschen Löscht einen Teil der Zeile. Wenn n ist 0(oder fehlt), löschen Sie vom Cursor bis zum Ende der Zeile. Wenn n ist 1, vom Cursor bis zum Zeilenanfang löschen. Wenn n ist 2, lösche die gesamte Zeile. Cursorposition ändert sich nicht.
CSI n S SU Hochscrollen Scrollen Sie die ganze Seite um n (Standard 1) Zeilen nach oben. Unten werden neue Zeilen hinzugefügt. (nicht ANSI.SYS )
CSI n T SD Runterscrollen Scrollen Sie die ganze Seite um n (Standard 1) Zeilen nach unten . Oben werden neue Zeilen hinzugefügt. (nicht ANSI.SYS )
CSI n  ; m f HVP Horizontale vertikale Position Wie CUP, zählt aber eher als Formateffektorfunktion (wie CR oder LF ) als als Editorfunktion (wie CUD oder CNL). Dies kann in bestimmten Terminalmodi zu unterschiedlicher Handhabung führen.
CSI n m SGR Grafikwiedergabe auswählen Legt Farben und Stil der Zeichen fest, die diesem Code folgen
CSI 5i AUX-Port Ein Aktivieren Sie den seriellen Aux-Port normalerweise für den lokalen seriellen Drucker
CSI 4i AUX-Port Aus Deaktivieren Sie den seriellen Aux-Port normalerweise für den lokalen seriellen Drucker

CSI 6n DSR Gerätestatusbericht Meldet die Cursorposition (CPR) durch Senden von ESC[n;mR, wobei n die Zeile und m die Spalte ist.)
Einige beliebte private Sequenzen
Abkürzung Name Wirkung
CSI s SCP, SCOSC Aktuelle Cursorposition speichern Speichert die Cursorposition/-status im SCO-Konsolenmodus. Im vertikalen geteilten Bildschirmmodus stattdessen verwendet, um den linken und rechten Rand einzustellen (als ) oder zurückzusetzen. CSI n ; n s
CSI u RCP, SCORC Gespeicherte Cursorposition wiederherstellen Stellt die Cursorposition/den Cursorstatus im SCO-Konsolenmodus wieder her.
CSI? 25 Stunden DECTCEM Zeigt den Cursor vom VT220 an .
CSI? 25 l DECTCEM Blendet den Cursor aus.
CSI? 1049 Stunden Alternative Bildschirmpuffer aktivieren, von xterm
CSI? 1049 l Deaktivieren Sie den alternativen Bildschirmpuffer von xterm
CSI? 2004 Uhr Aktivieren Sie den Einfügemodus für Klammern. In das Terminal eingefügter Text wird von ESC [200~und umgeben ESC [201~, und Zeichen darin sollten nicht als Befehle behandelt werden (z. B. in Vim). Von xterm
CSI? 2004 l Deaktivieren Sie den Einfügemodus für Klammern.

SGR-Parameter (Select Graphic Rendition)

Select Graphic Rdition (SGR) legt Anzeigeattribute fest. Mehrere Attribute können in der gleichen Reihenfolge, durch Semikolon getrennt, gesetzt werden. Jedes Anzeigeattribut bleibt wirksam, bis es durch ein folgendes Auftreten von SGR zurückgesetzt wird. Wenn keine Codes angegeben werden, CSI mwird wie CSI 0 m(Reset / Normal) behandelt.

Name Notiz
0 Zurücksetzen oder normal Alle Attribute aus
1 Fett oder erhöhte Intensität Wie bei schwach ist der Farbwechsel eine PC (SCO/ CGA ) Erfindung.
2 Schwach, verminderte Intensität oder schwach Kann als leichter Schriftgrad wie fett implementiert werden .
3 Kursiv Nicht weit verbreitet. Wird manchmal als invers oder blinkend behandelt.
4 Unterstreichen Style-Erweiterungen existieren für Kitty, VTE, mintty und iTerm2.
5 Langsames Blinken Weniger als 150 pro Minute
6 Schnelles Blinken MS-DOS ANSI.SYS, 150+ pro Minute; nicht weit verbreitet
7 Video umkehren oder invertieren Vertauschen Sie Vorder- und Hintergrundfarben; inkonsistente Emulation
8 Verdecken oder ausblenden Nicht weit verbreitet.
9 Durchgestri- , oder Streik Zeichen lesbar, aber wie zum Löschen markiert.
10 Primäre (Standard) Schriftart
11–19 Alternative Schriftart Alternative Schriftart auswählen n − 10
20 Fraktur (gotisch) Selten unterstützt
21 Doppelt unterstrichen; oder: nicht fett Doppelklicken unterstreicht pro ECMA-48, aber deaktiviert statt fett Intensität auf mehreren Endgeräten, auch im Linux - Kernel ‚s - Konsole vor der Version 4.17.
22 Normale Intensität Weder kühn noch schwach; Farbe ändert sich, wenn Intensität als solche implementiert ist.
23 Weder Kursiv noch Blackletter
24 Nicht unterstrichen Weder einzeln noch doppelt unterstrichen
25 Blinkt nicht
26 Proportionaler Abstand ITU T.61 und T.416, deren Verwendung auf Terminals nicht bekannt ist
27 Nicht umgekehrt
28 Verraten Nicht verdeckt
29 Nicht durchgestrichen
30–37 Vordergrundfarbe einstellen
38 Vordergrundfarbe einstellen Die nächsten Argumente sind 5;noder2;r;g;b
39 Standard Vordergrundfarbe Implementierung definiert (nach Standard)
40–47 Hintergrundfarbe einstellen
48 Hintergrundfarbe einstellen Die nächsten Argumente sind 5;noder2;r;g;b
49 Standardhintergrundfarbe Implementierung definiert (nach Standard)
50 Proportionalen Abstand deaktivieren T.61 und T.416
51 Gerahmt Implementiert als " Emoji-Variationsauswahl " in Mintty.
52 Eingekreist
53 Überstrichen
54 Weder eingerahmt noch eingekreist
55 Nicht überstrichen
58 Unterstreichungsfarbe einstellen Nicht im Standard; implementiert in Kitty, VTE, mintty und iTerm2. Die nächsten Argumente sind 5;noder2;r;g;b .
59 Standardfarbe für die Unterstreichung Nicht im Standard; implementiert in Kitty, VTE, mintty und iTerm2.
60 Ideogramm-Unterstreichung oder rechte Seitenlinie Selten unterstützt
61 Ideogramm doppelt unterstrichen oder doppelte Linie auf der rechten Seite
62 Ideogramm überstrichen oder linke Seitenlinie
63 Ideogramm doppelt überstrichen oder doppelte Linie auf der linken Seite
64 Ideogramm Stressmarkierung
65 Keine Ideogrammattribute Setzen Sie die Effekte von allen zurück 6064
73 Hochgestellt Nur in Mintty implementiert
74 Index
75 Weder hochgestellt noch tiefgestellt
90–97 Helle Vordergrundfarbe einstellen Nicht im Standard; ursprünglich implementiert von aixterm
100–107 Helle Hintergrundfarbe einstellen

Farben

3-Bit und 4-Bit

Die ursprüngliche Spezifikation hatte nur 8 Farben und gab ihnen nur Namen. Die SGR-Parameter 30–37 wählten die Vordergrundfarbe aus, während 40–47 den Hintergrund wählten. Nicht wenige Terminals haben "fett" (SGR-Code 1) als hellere Farbe anstelle einer anderen Schriftart implementiert, wodurch 8 zusätzliche Vordergrundfarben bereitgestellt werden. Normalerweise konnten Sie diese nicht als Hintergrundfarben erhalten, obwohl dies manchmal inverse Video (SGR-Code 7) erlauben würde. Beispiele: Um schwarze Buchstaben auf weißem Hintergrund zu erhalten, verwenden Sie ESC[30;47m, um rote zu erhalten verwenden Sie ESC[31m, um helles Rot zu erhalten ESC[1;31m. Um die Farben auf ihre Standardwerte zurückzusetzen, verwenden Sie ESC[39;49m(wird von einigen Terminals nicht unterstützt) oder setzen Sie alle Attribute mit zurück ESC[0m. Spätere Terminals fügten die Möglichkeit hinzu, die "hellen" Farben mit 90–97 und 100–107 direkt anzugeben.

Als die Hardware begann, 8-Bit- Digital-Analog-Wandler (DACs) zu verwenden, ordneten mehrere Softwareteile diesen Namen 24-Bit-Farbnummern zu. Die folgende Tabelle zeigt die Standardwerte, die für einige gängige Hardware und Software an den DAC gesendet werden; in den meisten Fällen sind sie konfigurierbar.

FG BG Name VGA Windows XP-
Konsole
Windows
PowerShell
Visual Studio-Code Windows 10-
Konsole
Terminal.app Kitt mIRC xterm Ubuntu Eclipse-Terminal
30 40 Schwarz 0, 0, 0 12, 12, 12 0, 0, 0 1, 1, 1 0, 0, 0
31 41 rot 170, 0, 0 128, 0, 0 205, 49, 49 197, 15, 31 194, 54, 33 187, 0, 0 127, 0, 0 205, 0, 0 222, 56, 43 205, 0, 0
32 42 Grün 0, 170, 0 0, 128, 0 13, 188, 121 19, 161, 14 37, 188, 36 0, 187, 0 0, 147, 0 0, 205, 0 57, 181, 74 0, 205, 0
33 43 Gelb 170, 85, 0 128, 128, 0 238, 237, 240 229, 229, 16 193, 156, 0 173, 173, 39 187, 187, 0 252, 127, 0 205, 205, 0 255, 199, 6 205, 205, 0
34 44 Blau 0, 0, 170 0, 0, 128 36, 114, 200 0, 55, 218 73, 46, 225 0, 0, 187 0, 0, 127 0, 0, 238 0, 111, 184 0, 0, 238
35 45 Magenta 170, 0, 170 128, 0, 128 1, 36, 86 188, 63, 188 136, 23, 152 211, 56, 211 187, 0, 187 156, 0, 156 205, 0, 205 118, 38, 113 205, 0, 205
36 46 Cyan 0, 170, 170 0, 128, 128 17, 168, 205 58, 150, 221 51, 187, 200 0, 187, 187 0, 147, 147 0, 205, 205 44, 181, 233 205, 0, 205
37 47 Weiß 170, 170, 170 192, 192, 192 229, 229, 229 204, 204, 204 203, 204, 205 187, 187, 187 210, 210, 210 229, 229, 229 204, 204, 204 229, 229, 229
90 100 Helles Schwarz (Grau) 85, 85, 85 128, 128, 128 102, 102, 102 118, 118, 118 129, 131, 131 85, 85, 85 127, 127, 127 127, 127, 127 128, 128, 128 0, 0, 0
91 101 Hellrot 255, 85, 85 255, 0, 0 241, 76, 76 231, 72, 86 252, 57, 31 255, 85, 85 255, 0, 0 255, 0, 0 255, 0, 0 255, 0, 0
92 102 Hellgrün 85, 255, 85 0, 255, 0 35, 209, 139 22, 198, 12 49, 231, 34 85, 255, 85 0, 252, 0 0, 255, 0 0, 255, 0 0, 255, 0
93 103 Helles Gelb 255, 255, 85 255, 255, 0 245, 245, 67 249, 241, 165 234, 236, 35 255, 255, 85 255, 255, 0 255, 255, 0 255, 255, 0 255, 255, 0
94 104 Hellblau 85, 85, 255 0, 0, 255 59, 142, 234 59, 120, 255 88, 51, 255 85, 85, 255 0, 0, 252 92, 92, 255 0, 0, 255 92, 92, 255
95 105 Helles Magenta 255, 85, 255 255, 0, 255 214, 112, 214 180, 0, 158 249, 53, 248 255, 85, 255 255, 0, 255 255, 0, 255 255, 0, 255 255, 0, 255
96 106 Helles Cyan 85, 255, 255 0, 255, 255 41, 184, 219 97, 214, 214 20, 240, 240 85, 255, 255 0, 255, 255 0, 255, 255 0, 255, 255 0, 255, 255
97 107 Reines Weiß 255, 255, 255 255, 255, 255 229, 229, 229 242, 242, 242 233, 235, 235 255, 255, 255 255, 255, 255 255, 255, 255 255, 255, 255 255, 255, 255
8 Bit

Als 256-Farben- Lookup-Tabellen auf Grafikkarten üblich wurden, wurden Escape-Sequenzen hinzugefügt, um aus einem vordefinierten Satz von 256 Farben auszuwählen:

ESC[38;5;⟨n⟩m Select foreground color
ESC[48;5;⟨n⟩m Select background color
  0-  7:  standard colors (as in ESC [ 30–37 m)
  8- 15:  high intensity colors (as in ESC [ 90–97 m)
 16-231:  6 × 6 × 6 cube (216 colors): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5)
232-255:  grayscale from black to white in 24 steps

Die T.416-Informationstechnologie der ITU - Open Document Architecture (ODA) und das Austauschformat: Zeicheninhaltsarchitekturen verwenden stattdessen ':' als Trennzeichen:

ESC[38;5;⟨n⟩m Select foreground color      where n is a number from the table below
ESC[48;5;⟨n⟩m Select background color
256-Farben-Modus — Vordergrund: ESC[38;5;#m Hintergrund: ESC[48;5;#m
Standardfarben Hochintensive Farben
 0   1   2   3   4   5   6   7   8   9  10 11 12 13 14 fünfzehn
216 Farben
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231
Graustufenfarben
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255

Es gab auch eine ähnliche, aber inkompatible 88-Farben-Kodierung mit derselben Escape-Sequenz, die in rxvtund zu sehen ist xterm-88color. Außer den Farbcodes ist nicht viel über das Schema bekannt. Es verwendet einen 4×4×4-Farbwürfel.

24-Bit

Als "True-Color"-Grafikkarten mit 16 bis 24 Bit Farbe üblich wurden, begannen Anwendungen, 24-Bit-Farben zu unterstützen. Zu den Terminalemulatoren, die das Einstellen von 24-Bit-Vorder- und Hintergrundfarben mit Escape-Sequenzen unterstützen, gehören Xterm, KDEs Konsole und iTerm sowie alle libvte-basierten Terminals, einschließlich GNOME Terminal .

ESC[ 38;2;⟨r⟩;⟨g⟩;⟨b⟩ m Select RGB foreground color
ESC[ 48;2;⟨r⟩;⟨g⟩;⟨b⟩ m Select RGB background color

Die T.416 Informationstechnologie - Open Document Architecture (ODA) und Austauschformat: Character Content Architectures der ITU , die als ISO/IEC International Standard 8613-6 übernommen wurde, bietet eine alternative Version, die weniger unterstützt zu werden scheint. Die Parameter nach der '2', also auch r,g,b sind optional. Beachten Sie, dass dies nicht nur die obige Sequenz ist, bei der das Semikolon durch den Doppelpunkt ersetzt wird, sondern eine führende "Farbraum-ID" (diese Tatsache wurde von vielen Terminalemulatoren übersehen, diese Auslassung scheint von der KDE-Konsole zu stammen). Die Definition der Farbraum-ID ist in diesem Dokument nicht enthalten, daher kann sie leer sein, um den nicht angegebenen Standard darzustellen. Neben dem Wert '2' zur Angabe eines Rot-Grün-Blau-Formats (und der obigen '5' für eine 0-255 indizierte Farbe) gibt es Alternativen von '0' für definierte Implementierung und '1' für transparent - weder von was haben irgendwelche weiteren Parameter; '3' gibt Farben mit einem Cyan-Magenta-Gelb-Schema an und '4' für ein Cyan-Magenta-Gelb-Schwarz-Schema, wobei letzteres die als "unbenutzt" markierte Position für die Schwarzkomponente verwendet:

ESC[ 38:2:⟨Color-Space-ID⟩:⟨r⟩:⟨g⟩:⟨b⟩:⟨unused⟩:⟨CS tolerance⟩:⟨Color-Space associated with tolerance: 0 for "CIELUV"; 1 for "CIELAB"⟩ m Select RGB foreground color
ESC[ 48:2:⟨Color-Space-ID⟩:⟨r⟩:⟨g⟩:⟨b⟩:⟨unused⟩:⟨CS tolerance⟩:⟨Color-Space associated with tolerance: 0 for "CIELUV"; 1 for "CIELAB"⟩ m Select RGB background color

OSC-Sequenzen (Operating System Command)

Meist wurden diese von Xterm definiert. Aus historischen Gründen kann xterm den Befehl sowohl mit BELals auch beenden ST.

Xterm ermöglicht das Setzen des Fenstertitels durch ESC ]0;this is the window title BEL.

Eine Nicht-Xterm-Erweiterung ist der Hyperlink ESC ]8;;link STaus dem Jahr 2017, der von VTE, iTerm2 und mintty verwendet wird.

Die Linux-Konsole verwendet ESC ] P n rr gg bb, um die Palette zu ändern, die, wenn sie fest in eine Anwendung einprogrammiert ist, andere Terminals hängen lassen kann. Das Anhängen STwird jedoch von Linux ignoriert und bildet für andere Terminals eine richtige, nicht zu beachtende Sequenz.

Fs Escape-Sequenzen

Wenn dem ESCein Byte im Bereich 0x60—0x7E folgt , ist es von diesem Typ. Wird für Steuerfunktionen verwendet, die einzeln in der ISO-IR- Registrierung registriert werden und daher auch in Kontexten verfügbar sind, in denen ein anderer C1-Steuercodesatz verwendet wird. Sie entsprechen insbesondere einzelnen Kontrollfunktionen, die von ISO/IEC JTC 1/SC 2 genehmigt und von ISO oder einer von der ISO anerkannten Stelle standardisiert wurden. Einige davon sind in ECMA-35 (ISO 2022 / ANSI X3.41) spezifiziert, andere in ECMA-48 (ISO 6429 / ANSI X3.64). ECMA-48 bezeichnet diese als „unabhängige Kontrollfunktionen“.

Einige ANSI-Escape-Sequenzen vom Typ Fs (unabhängige Funktion) werden von Terminals erkannt
Abkürzung Name Wirkung
ESC c RIS Zurücksetzen in den Ausgangszustand Löst ein vollständiges Zurücksetzen des Terminals in den ursprünglichen Zustand aus. Dies kann (falls zutreffend) umfassen: Zurücksetzen der Grafikwiedergabe, Löschen von Tabulatorstopps, Zurücksetzen auf die Standardschriftart und mehr.

Fp Escape-Sequenzen

Wenn dem ESCein Byte im Bereich 0x30—0x3F folgt , ist es von diesem Typ. Abgesondert für private Steuerfunktionen.

Einige Escape-Sequenzen vom Typ Fp (private use) werden vom VT100 , seinen Nachfolgern und/oder Terminalemulatoren wie xterm . erkannt
Abkürzung Name Wirkung
ESC 7 DECSC DEZ Cursor speichern Speichert die Cursorposition, den Kodierungsverschiebungsstatus und die Formatierungsattribute.
ESC 8 DECRC DEC Wiederherstellungs-Cursor Stellt die Cursorposition, den Kodierungsverschiebungsstatus und die Formatierungsattribute aus dem vorherigen DECSC wieder her, falls vorhanden, andernfalls werden diese alle auf ihre Standardwerte zurückgesetzt.

nF Escape-Sequenzen

Wenn dem ESCein Byte im Bereich 0x20—0x2F folgt , ist es von diesem Typ. Gefolgt von einer beliebigen Anzahl zusätzlicher Bytes in diesem Bereich und dann einem Byte im Bereich 0x30-0x7E . Sie werden weiter nach den unteren vier Bits des ersten Bytes unterteilt, zB "Typ 2F" für Sequenzen, bei denen das erste Byte 0x22 ist ; und ob das letzte Byte im privaten Nutzungsbereich 0x30—0x3F liegt (zB "Typ 2Fp") oder nicht (zB "Typ 2Ft"). Sie werden hauptsächlich für ANSI/ISO-Code-Switching-Mechanismen verwendet, wie sie von ISO-2022-JP verwendet werden , mit Ausnahme von 3FTypsequenzen (solche, bei denen das erste Zwischenbyte ist 0x23), die für einzelne Steuerfunktionen verwendet werden. Typensequenzen 3Ftsind für zusätzliche ISO-IR registrierte individuelle Steuerfunktionen reserviert, während 3FpTypensequenzen für private Steuerfunktionen verfügbar sind.

Einige ANSI-Escape-Sequenzen vom Typ 0Ft (Ansage) werden von Terminals erkannt (keine vollständige Liste)
Abkürzung Name Wirkung
ESC SP F Definiert in ECMA-35 (ANSI X3.41 / ISO 2022). Lässt die Funktionstasten ESC + Buchstaben anstelle von C1-Codes senden.
ESC SP G Definiert in ECMA-35. Lässt die Funktionstasten C1-Codes senden.
Einige Escape-Sequenzen vom Typ 3Fp (private use) werden vom VT100 , seinen Nachfolgern und/oder Terminalemulatoren wie xterm . erkannt
Abkürzung Name Wirkung
ESC # 3 DECDHL DEC Buchstaben mit doppelter Höhe, obere Hälfte Bewirkt, dass die aktuelle Zeile doppelt so lange Zeichen verwendet. Dieser Code ist für die obere Hälfte.
ESC # 4 DECDHL DEC Buchstaben mit doppelter Höhe, untere Hälfte Bewirkt, dass die aktuelle Zeile doppelt so lange Zeichen verwendet. Dieser Code ist für die untere Hälfte.
ESC # 5 DECSWL DEC-Linie mit einfacher Breite Legt fest, dass die aktuelle Zeile Zeichen mit einfacher Breite verwendet, gemäß dem Standardverhalten.
ESC # 6 DECDWL DEC-Linie mit doppelter Breite Legt fest, dass die aktuelle Zeile Zeichen doppelter Breite verwendet, wobei alle Zeichen in der zweiten Hälfte der Zeile verworfen werden.

Beispiele

CSI 2 J — Dadurch wird der Bildschirm gelöscht und bei einigen Geräten der Cursor an die y,x-Position 1,1 (obere linke Ecke) positioniert.

CSI 32 m— Dadurch wird der Text grün. Das Grün kann ein dunkles, mattes Grün sein, also möchten Sie Fett mit der Sequenz aktivieren, CSI 1 mdie es hellgrün machen würde, oder kombiniert als CSI 32 ; 1 m. Einige Implementierungen verwenden den Bold-Zustand, um das Zeichen Bright zu machen.

CSI 0 ; 6 8 ; "DIR" ; 13 p— Dies weist die Taste F10 neu zu, um an den Tastaturpuffer die Zeichenfolge "DIR" und ENTER zu senden, die in der DOS-Befehlszeile den Inhalt des aktuellen Verzeichnisses anzeigen würde. (nur MS-DOS ANSI.SYS) Dies wurde manchmal für ANSI-Bomben verwendet . Dies ist ein privater Code (wie durch den Buchstaben p angezeigt), der eine nicht standardmäßige Erweiterung verwendet, um einen Zeichenfolgenwertparameter einzuschließen. Wenn man dem Buchstaben des Standards folgt, würde die Sequenz mit dem Buchstaben D enden.

CSI s— Dadurch wird die Cursorposition gespeichert. Wenn Sie die Sequenz verwenden, CSI uwird die Position wiederhergestellt. Angenommen, die aktuelle Cursorposition ist 7(y) und 10(x). Die Sequenz CSI sspeichert diese beiden Zahlen. Nun können Sie mit der Sequenz CSI 20 ; 3 Hoder zu einer anderen Cursorposition wie 20(y) und 3(x) wechseln CSI 20 ; 3 f. Wenn Sie nun die Sequenz CSI u verwenden, kehrt die Cursorposition zu 7(y) und 10(x) zurück. Einige Terminals benötigen stattdessen die DEC-Sequenzen ESC 7/, ESC 8die breiter unterstützt werden.

In Shell-Skripting

ANSI-Escape-Codes werden häufig in UNIX- und UNIX-ähnlichen Terminals verwendet , um Syntaxhervorhebungen bereitzustellen . Auf kompatiblen Terminals werden beispielsweise mit dem folgenden Listenbefehl Datei- und Verzeichnisnamen nach Typ farbkodiert.

ls --color

Benutzer können , indem sie als Teil der Escape - Codes in ihre Skripte verwenden Standardausgabe oder Standardfehler . Zum Beispiel die folgenden GNU sed Befehl die Ausgabe des verschönert make Befehl von Zeilen mit Wörtern , die mit „Warn“ bei der Anzeige invertiert und Wörter mit „ERR“ im hellen Gelb auf einem dunkelroten Hintergrund ( Groß- und Kleinschreibung wird ignoriert). Die Darstellungen der Codes sind hervorgehoben.

make 2>&1 | sed -e 's/.*\bWARN.*/\x1b[7m&\x1b[0m/i' -e 's/.*\bERR.*/\x1b[93;41m&\x1b[0m/i'

Die folgende Bash- Funktion lässt das Terminal blinken (durch abwechselndes Senden von Codes für den umgekehrten und normalen Videomodus), bis der Benutzer eine Taste drückt.

flasher () { while true; do printf \\e[?5h; sleep 0.1; printf \\e[?5l; read -s -n1 -t1 && break; done; }

Dies kann verwendet werden, um einen Programmierer zu warnen, wenn ein langer Befehl endet, z. B. mit make ; flasher.

printf \\033c

Dadurch wird die Konsole zurückgesetzt, ähnlich dem Befehl resetauf modernen Linux-Systemen; es sollte jedoch auch auf älteren Linux-Systemen und auf anderen (Nicht-Linux) UNIX-Varianten funktionieren.

In C

Ausgabe des Beispielprogramms auf Gnome Terminal
#include <stdio.h>

int main(void)
{
  int i, j, n;
  
  for (i = 0; i < 11; i++) {
    for (j = 0; j < 10; j++) {
      n = 10*i + j;
      if (n > 108) break;
      printf("\033[%dm %3d\033[m", n, n);
    }
    printf("\n");
  }
  return 0;
}

Terminal-Eingabesequenzen

Das Drücken von Sondertasten auf der Tastatur sowie die Ausgabe vieler xterm CSI-, DCS- oder OSC-Sequenzen erzeugt oft eine CSI-, DCS- oder OSC-Sequenz, die vom Terminal an den Computer gesendet wird, als ob der Benutzer sie eingegeben hätte.

Beim Eingeben von Eingaben auf einem Terminal können Tastendrücke außerhalb des normalen alphanumerischen Haupttastaturbereichs als ANSI-Sequenzen an den Host gesendet werden. Bei Tasten mit einer äquivalenten Ausgabefunktion, wie z. B. den Cursortasten, spiegeln diese oft die Ausgabesequenzen. Für die meisten Tastendrücke gibt es jedoch keine äquivalente Ausgabesequenz.

Es gibt mehrere Kodierungsschemata, und leider mischen die meisten Terminals Sequenzen aus verschiedenen Schemata, so dass die Host-Software in der Lage sein muss, mit Eingabesequenzen unter Verwendung eines beliebigen Schemas umzugehen. Um die Sache zu verkomplizieren, haben die VT-Terminals selbst zwei Eingabeschemata, den Normalmodus und den Anwendungsmodus , die von der Anwendung umgeschaltet werden können.

(Entwurfsteil)

<char>                                -> char
<esc> <nochar>                        -> esc
<esc> <esc>                           -> esc
<esc> <char>                          -> Alt-keypress or keycode sequence
<esc> '[' <nochar>                    -> Alt-[
<esc> '[' (<num>) (';'<num>) '~'      -> keycode sequence, <num> defaults to 1

Wenn das Abschlusszeichen '~' ist, muss die erste Zahl vorhanden sein und ist eine Tastencode-Zahl, die zweite Zahl ist ein optionaler Modifikatorwert. Wenn das abschließende Zeichen ein Buchstabe ist, ist der Buchstabe der Schlüsselcodewert und die optionale Zahl der Modifiziererwert.

Der Modifikatorwert ist standardmäßig 1 und nach dem Subtrahieren von 1 wird eine Bitmap von gedrückten Modifikatortasten angezeigt: Meta-Strg-Alt-Umschalt. Zum Beispiel ist <esc>[4;2~ Shift-End, <esc>[20~ ist Funktionstaste 9, <esc>[5C ist Strg-Rechts.

vt sequences:
<esc>[1~    - Home        <esc>[16~   -             <esc>[31~   - F17
<esc>[2~    - Insert      <esc>[17~   - F6          <esc>[32~   - F18
<esc>[3~    - Delete      <esc>[18~   - F7          <esc>[33~   - F19
<esc>[4~    - End         <esc>[19~   - F8          <esc>[34~   - F20
<esc>[5~    - PgUp        <esc>[20~   - F9          <esc>[35~   - 
<esc>[6~    - PgDn        <esc>[21~   - F10         
<esc>[7~    - Home        <esc>[22~   -             
<esc>[8~    - End         <esc>[23~   - F11         
<esc>[9~    -             <esc>[24~   - F12         
<esc>[10~   - F0          <esc>[25~   - F13         
<esc>[11~   - F1          <esc>[26~   - F14         
<esc>[12~   - F2          <esc>[27~   -             
<esc>[13~   - F3          <esc>[28~   - F15         
<esc>[14~   - F4          <esc>[29~   - F16         
<esc>[15~   - F5          <esc>[30~   -

xterm sequences:
<esc>[A     - Up          <esc>[K     -             <esc>[U     -
<esc>[B     - Down        <esc>[L     -             <esc>[V     -
<esc>[C     - Right       <esc>[M     -             <esc>[W     -
<esc>[D     - Left        <esc>[N     -             <esc>[X     -
<esc>[E     -             <esc>[O     -             <esc>[Y     -
<esc>[F     - End         <esc>[1P    - F1          <esc>[Z     -
<esc>[G     - Keypad 5    <esc>[1Q    - F2       
<esc>[H     - Home        <esc>[1R    - F3       
<esc>[I     -             <esc>[1S    - F4       
<esc>[J     -             <esc>[T     - 

<esc>[A bis <esc>[D sind die gleichen wie die ANSI-Ausgabesequenzen. Die <num> wird normalerweise weggelassen, wenn keine Modifier-Tasten gedrückt werden, aber die meisten Implementierungen geben immer die <num> für F1-F4 aus. (Entwurfsteil)

Xterm verfügt über eine umfassende Dokumentationsseite zu den verschiedenen Schemata der Funktionstasten- und Mauseingabesequenzen der VT-Terminals von DEC und verschiedener anderer Terminals, die es emuliert. Thomas Dickey hat es im Laufe der Zeit viel unterstützt; Außerdem führt er eine Liste von Standardschlüsseln, die von anderen Terminalemulatoren zum Vergleich verwendet werden.

  • Auf der Linux-Konsole generieren bestimmte Funktionstasten Sequenzen der Form . Die CSI-Sequenz sollte auf der enden .CSI [ char[
  • Alte Versionen von Terminator generieren, wenn F1–F4 mit Modifikatoren gedrückt werden. Das fehlerhafte Verhalten wurde von GNOME Terminal kopiert .SS3 1; modifiers char
  • xterm antwortet, wenn nach der Cursorposition gefragt wird und wenn die F3-Taste mit Modifikatoren gedrückt wird, die bei Zeile == 1 kollidieren . Dies kann mit dem ? privater Modifizierer as , der in der Antwort als widergespiegelt wird .CSI row ; column RCSI 1 ; modifiers RCSI ? 6 nCSI ? row ; column R
  • Viele Terminals stellen ESCjedem Zeichen voran , das mit gedrückter Alt-Taste eingegeben wird. Dies schafft Mehrdeutigkeit für Großbuchstaben und Symbole @[\]^_, die C1-Codes bilden würden.
  • Konsole generiert, wenn F1–F4 mit Modifikatoren gedrückt wird.SS3 modifiers char

Siehe auch

Anmerkungen

Verweise

Externe Links