Ich frage mich , warum Shift+ Arrow KeyErgebnis in einen der A
, B
, C
oder D
Buchstaben.
Warum nicht andere Briefe? Warum überhaupt einen Brief?
Shift + Arrow Keys
macht gar nichts.
Ich frage mich , warum Shift+ Arrow KeyErgebnis in einen der A
, B
, C
oder D
Buchstaben.
Warum nicht andere Briefe? Warum überhaupt einen Brief?
Shift + Arrow Keys
macht gar nichts.
Antworten:
Terminal - Emulatoren wie gnome-terminal
( „Terminal“ in Ubuntu) , sondern auch xterm
und urxvt
sind „Emulatoren“ genannt , weil sie das Verhalten der älteren Terminals zu reproduzieren , die die einzige Anzeige eines Computers waren. Solche Terminals kommunizierten mit dem Computer über ein textbasiertes Protokoll und waren ursprünglich nur zum Empfangen von Text ausgelegt. Schnell wurde mehr Kontrolle benötigt: Wie lösche ich eine Zeile? Farben verwenden? Oder die Cursorposition ändern?
Quelle: Die Kunst der Unix-Benutzerfreundlichkeit - Befehlszeilenschnittstellen
Escape-Sequenzen wurden für jedes Terminal entwickelt, um solche Dinge zu tun. Sie sind benannt Flucht , weil sie mit dem ASCII - Escape - Code zu starten: 33
. Es gibt keine Möglichkeit, ein solches Zeichen direkt auszudrucken, weshalb es für solche Sequenzen gut geeignet ist. Wenn wir dies noch anzeigen wollen, ^[[
wird verwendet, und das werde ich in meinen Erklärungen verwenden.
Als das Terminal empfangen wurde ^[[A
, bedeutete dies nicht "print ^ [[A", sondern "der Benutzer hat die Aufwärtspfeiltaste gedrückt". "A" ist hier völlig willkürlich: Es ist einfach der Buchstabe, über den sich alle einig waren, denn genau das hat das DEC VT-52 und sein Nachfolger, das beliebte VT-100-Terminal, verwendet.
Quelle: DEC VT-52 Wartungshandbuch 1976
So funktionieren Terminalemulatoren auch heute noch: Abhängig von der $TERM
Variablen gibt eine Datenbank mit dem Namen terminfo
an, welche Codes an die Shell gesendet werden sollen (bash, sh, zsh ...). Diese ist dann dafür verantwortlich, diese zu verstehen und zu reagieren zu ihnen.
Der Code für Shift+ uplautet nun ^[[1;2A
: Der Terminal-Emulator sendet diesen Code an die Shell, die versucht zu interpretieren ^[[1;2
, aber nichts anzeigt, weil sie nichts über diese Escape-Sequenz weiß. Wird A
aber gelassen und angezeigt.
^[[A
macht jetzt Sinn, wenn ich auf die Pfeiltasten klicke, während ein Prozess auf dem Terminal läuft.
cat >/dev/null
dann eingeben und Strg + C (oder Eingabe, dann Strg + D) drücken, wenn Sie fertig sind.