Warum ist CTL-3 / CTL- # gleich CTL- [? (und andere) bei ASCII-Steuerzeichen

390
John de Largentaye

Ich habe ASCII-Steuerzeichen wiederentdeckt, als ich mit einem Code für die Terminalemulation herumfummelte und ein kleines Programm geschrieben habe, das den Hex-Wert jedes Schlüssels ausgibt, den ich drücke (tcsetattr () mit ~ ICANON).

Während ich es verstehe, wenn Sie die Tasten Control und D gleichzeitig drücken (CTL-D), das ASCII ^D/ EOT/ -steuerzeichen generiert 0x04, und eine Reihe anderer, wie auf der WP ASCII- Seite beschrieben, war ich überrascht (zumindest unter OS X)., einige andere unerwartete Schlüssel generierten auch Steuerzeichen:

CTL-2/@ = NUL = ^@ = 0x00 (expected actually) CTL-3/# = ESC = ^[ = 0x1B CTL-4/$ = FS = ^\ = 0x1C CTL-5/% = GS = ^] = 0x1D CTL-6/^ = RS = ^^ = 0x1E (expected actually) CTL-7/& = CTL-/ = US = ^_ = 0x1F CTL-8/* = DEL = ^? = 0x7F 

Beachten Sie, dass CTL-1, -9 und -0 keine Steuerzeichen, sondern nur die normalen Ziffern erzeugen.

Warum generieren Terminals neben diesen beiden erwarteten Zeichen (NUL und RS) Steuerzeichen für diese Untermenge von Zifferntasten?

Edit: um klar zu sein, ich bin mir bewusst und verstehe, dass CTL - [= Esc und die anderen Standard "Caret" / Steuertasten (^ \, ^], ^^, ^ _, ^?). Ich frage mich, warum die Zahlentasten ^ #, ^ $, ^%, ^ &, ^ * und ^ / mit ihnen überlappen.

1
^ - [= Esc wird weitgehend unterstützt und ist der kompatibelste Weg, um eine Esc-Taste an vim zu senden (auch über mehrere Terminals hinweg, die Remote-Sitzungen usw. verwenden). Ctrl-] ist so weithin bekannt, dass Win95s Telnet.exe 0x1D nicht unterstützt, jedoch Ctrl-]. ^ -? ist überhaupt nicht überraschend, vielleicht aufgrund einiger alter Experimente, die ich gemacht habe. Mein Hauptargument ist, dass ich aus Vertrautheit abschließend weiß, dass zumindest einige von ihnen nicht annähernd OSX-spezifisch sind. TOOGAM vor 8 Jahren 0
Ich weiß sehr genau über ^ [= ESC und die anderen Standard-Kontrollzeichen, darum geht es nicht. John de Largentaye vor 8 Jahren 0

1 Antwort auf die Frage

0
YvesQuemener

Caret-Notation bedeutet wie ^ D eigentlich nicht Strg-D. Es bedeutet "Das ASCII-Steuerzeichen mit der Nummer, die dem alphabetischen Rang des Buchstabens entspricht", in diesem Fall D = 4, also ^ D = 0x04. Einige Leute entschieden, dass es schön wäre, diese Caret-Notation den Buchstaben der Tastatur von Strg-X zuzuordnen. Offensichtlich bricht es bei 27 oder 0x1B, wo die Leute kreativ sein mussten.

Ich verstehe, dass es niemals einen Standard gab, um Steuerzeichen besser als 0x1A abzubilden, und dass verschiedene historische Implementierungen eine Zeitlang nebeneinander existierten.

Nicht wirklich wichtig, aber bekam ein Zitat für "^ D! = CTL-D ursprünglich"? :) Wikipedia hat keine. John de Largentaye vor 8 Jahren 0
Laut http://superuser.com/a/764656/541440, und in die Geschichte der Teletypen https://en.wikipedia.org/wiki/Teleprinter#Control_characters zu graben, scheint es von Anfang an so gewesen zu sein bedeutet, dass diese Steuerzeichen mit der Strg + -Taste erzeugt werden können John de Largentaye vor 8 Jahren 0