Was ist die Geschichte über die Umschalt + Pfeiltasten im Terminal?

21

Ich frage mich , warum Shift+ Arrow KeyErgebnis in einen der A, B, Coder DBuchstaben.

Warum nicht andere Briefe? Warum überhaupt einen Brief?

Dan
quelle
Faszinierend: D Meine Wette? Hat mit textbasiertem Spielen zu tun: D
Rinzwind
2
Nur eine Beobachtung: Tty Shift + Arrow Keysmacht gar nichts.
Radu Rădeanu
@ Rinzwind: :)))
Radu Rădeanu
1
Ich habe diese Frage bei Unix / Linux Stack Exchange gestellt. Es gibt einige nützliche Antworten. Vielleicht möchtest du sie dir ansehen. unix.stackexchange.com/questions/73669/…
yfklon

Antworten:

27

Terminal - Emulatoren wie gnome-terminal( „Terminal“ in Ubuntu) , sondern auch xtermund urxvtsind „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?

VT-100 Terminal 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.

DEC VT-52 Wartung Manuel 1976

Quelle: DEC VT-52 Wartungshandbuch 1976

So funktionieren Terminalemulatoren auch heute noch: Abhängig von der $TERMVariablen gibt eine Datenbank mit dem Namen terminfoan, 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 Aaber gelassen und angezeigt.

Jennifer Wilson
quelle
5
Wow interessant. Das alles ^[[Amacht jetzt Sinn, wenn ich auf die Pfeiltasten klicke, während ein Prozess auf dem Terminal läuft.
Dan
4
Sie können STRG-V drücken, kurz bevor Sie UMSCHALT-Nach-Oben-Pfeil drücken, um die Escape-Sequenzen in Rohform anzuzeigen. Sofern Sie die
Standardeinstellungen
@arielf Sie können auch ausführen, cat >/dev/nulldann eingeben und Strg + C (oder Eingabe, dann Strg + D) drücken, wenn Sie fertig sind.
wjandrea vor