Caret eckige Klammer eckige Klammer A ^ [[A - Was bedeutet das?

13

Entschuldigung, wenn dies bereits gefragt wurde, aber ich habe keine Ahnung, wie ich das selbst herausfinden kann - wenn ich in einer Suchmaschine nach "^ [[A" suche, ignoriert es den Teil "^ [[" insgesamt.

Wie auch immer, meine Frage: Manchmal erscheinen im Terminal (auf einem Mac), wenn ich die Pfeiltasten drücke, die Zeichen "^ [[A", "^ [[B", "^ [[C" oder "^ [[D" . Ich erinnere mich an die Begegnung vor Jahren, als ich (höchstwahrscheinlich) auch DOS verwendete, und ich denke, dass sie auch viel häufiger auftrat.

Warum passiert das und was bedeuten sie?

Phill
quelle

Antworten:

20

Dies sind ANSI-Escape-Codes . Das ^[Symbol steht für ein ESC-Zeichen (Escape-Zeichen), das nächste [für eine eckige Klammer links und der Buchstabe für die Funktion des Escape-Codes. Der Esc[Teil wird als CSI (Control Sequence Introducer) bezeichnet. Also die ReihenfolgeCSI A bedeutet also Pfeil nach oben oder CUU (CUrsor Up).

Wie auch immer, dieses Schema stammt aus der Zeit des VT100 Anzeigeterminals (eingeführt 1978). Einige der vom VT100 verwendeten Escape-Sequenzen wurden Anfang der 1980er-Jahre von ANSI standardisiert und sind seitdem gebräuchlich.

Wenn Sie die Pfeiltasten drücken, hört normalerweise ein Programm (beispielsweise die Shell) zu und kann auf sie reagieren. Wenn Sie also den Aufwärtspfeil drücken, wird ein Bildlauf in Ihrem Befehlsverlauf durchgeführt. Wenn jedoch ein Programm ausgeführt wird, das die Escape-Sequenzen für Pfeiltasten nicht versteht, werden sie normalerweise wie jede andere Taste, die Sie drücken, zum Terminal zurückgesendet. Deshalb sehen Sie manchmal, ^[[Aob Sie die Aufwärtspfeiltaste drücken.

Greg Hewgill
quelle
Es ist auch erwähnenswert, dass ^ die übliche UNIX-Konvention ist, um "control" im Terminal anzuzeigen. Wenn Sie beispielsweise Strg + A drücken und es auf die gleiche Weise ignorieren, wird es als "^ A" angezeigt. Strg + [ist eigentlich ein Synonym für das Escape-Zeichen. Was ist es übrigens, das dies überhaupt erst möglich macht? Welche Software entscheidet sich, das Caret zu drucken? Handelt es sich um den Terminalemulator selbst oder um etwas anderes, das mir nicht bekannt ist?
Muzer
@Muzer der Kernel selbst formatiert die Echo-Zeichen. Die Funktion kann mitstty -echoctl
Der Kernel? Interessant, ich wusste nicht, dass es so tief geht (obwohl es im Nachhinein offensichtlich sein sollte, da es sogar in sehr frühen Stadien des Bootens passiert!).
Muzer