Unix-Terminals senden ASCII-Codes unter 32 für Ctrl+ eine andere Taste und haben mindestens zwei Möglichkeiten, „Meta“ zu senden (nämlich entweder Code 27 voranzustellen oder das höchste Bit eines ASCII-Zeichens festzulegen). Gibt es einen Präzedenzfall für eine Möglichkeit, die Verwendung anderer Sondertasten wie „Super“ oder die Windows-Logo-Taste oder die Mac- CmdTaste zu kodieren?
Ich möchte Cmd+Pfeiltasten in iTerm2 zuordnen, weiß aber nicht, welche Codes ich ihnen zuweisen soll. Ich verwende die OptionTaste für „Meta“ bereits mit Pfeiltasten.
Antwort1
Die Konvention, das 8. Bit zu setzen, wenn Meta gedrückt wird, ist ziemlich veraltet und wird nicht mehr oft verwendet, oder tatsächlich überhaupt nicht in modernen Terminals, die mehr Zeichen als nur ASCII unterstützen. Die Konvention, ESC voranzustellen, ist heutzutage übrigens auch unüblich.
Die 32 ASCII-Steuerzeichen werden tatsächlich als ASCII-Steuerzeichen gesendet (Codepunkte weniger als 32), aber das umfasst nur Strg-@, Strg-A bis Strg-Z, ESC, Strg-\, Strg-], Strg-^ und Strg-_. Alles andere, wie zum Beispiel Strg-4, existiert in ASCII nicht und es gibt keine Konvention für das Senden über ein Terminal.
Im Grunde gilt Folgendes: Alles, was nicht als einfaches Zeichen gesendet werden kann (also in Unicode für moderne Unicode-fähige Terminals existiert), muss als Escape-Sequenz gesendet werden. Escape-Sequenzen werden durch das geltende Terminalemulationsprotokoll definiert. Fast alle heute verwendeten Terminalemulationsprotokolle sind von VT100 abgeleitet oder ähneln diesem. Escape-Sequenzen sind für häufig vorkommende Tasten auf Tastaturen verfügbar, die nicht als Zeichen existieren: Pfeiltasten, Funktionstasten usw.
VT100 und verwandte Terminalemulationsprotokolle enthalten keine Konventionen für die Übermittlung von Sondertastendrücken, nicht einmal die Standardtasten wie Umschalt und Strg. Auf einem TTY ausgeführte Software kann nicht zwischen dem Drücken der Eingabetaste und dem Drücken der Umschalt-Eingabetaste unterscheiden. Sie kann nicht einmal zwischen dem Drücken der Eingabetaste und dem Drücken der Strg-M-Taste unterscheiden.
Die Tatsache, dass diese Modifikatorsequenzen nicht über ein Terminal übertragen werden können, kann als positiv angesehen werden. Beispielsweise kann die MacOS-Terminalanwendung den Tastendruck ⌘V für ihre eigene Verwendung (Einfügen) beanspruchen, da er ohnehin nicht an das TTY gesendet werden kann.