Die Antwort von Johan Myréen war knapp, aber nicht genau das Problem: Die meisten Terminalemulatoren, die Sie verwenden, verfügen über Normal- und Anwendungsmodi für Sondertasten. Terminalbeschreibungen werden für einen Modus geschrieben, der der Verwendung einer Vollbildanwendung entspricht. Andere Anwendungen (z. B. eine interaktive Shell ) initialisieren den Bildschirm normalerweise nicht, um den Anwendungsmodus zu verwenden . Bash ist ein Beispiel dafür.
Im normalen Modus senden xterm und ähnliche Terminals escape[
(CSI), während im Anwendungsmodus ihre Tastaturen senden escapeO
(SS3). In TERM Syntax, dass Flucht ist \E
. Dies infocmp
zeigt Ihnen, dass die Beschreibung den Anwendungsmodus verwendet. Die home
Fähigkeit wird gesendet an das Terminal, es wie sagen Sie den Cursor auf dem bewegen , nach Hause Position (oben links), und ist nicht das gleiche wie khome
(eingesandt von dem Endgerät über die Tastatur).
Vollbildanwendungen (z. B. solche, die ncurses verwenden) senden möglicherweise die Terminalfähigkeitszeichenfolgen zum Initialisieren der Tastatur. Einige Terminalbeschreibungen versetzen das Terminal in den Anwendungsmodus, andere nicht.
Die Verwendung von kend
versus end
ist eine Namenskonvention: In terminfo per Konvention bezieht sich jeder Name, der mit k beginnt, auf eine spezielle Taste (Funktionstaste, Cursortaste, Tastaturtaste), um zu verdeutlichen, dass es sich um Zeichenfolgen handelt, die von einer Anwendung gelesen werden sollen. Beispiel: kcub1
(Cursor-Rückwärts- Taste ) unterscheidet sich von cub1
(Bewegen Sie den Cursor eine Spalte zurück).
ncurses erkennt die Taste als, KEY_END
weil die von Ihnen verwendete Anwendung die keypad
Funktion zum Initialisieren des Terminals mit smkx
dem aufruft (die Mnemonik bedeutet "Tastatur-Sendemodus starten"). Dadurch wird möglicherweise der Anwendungsmodus aktiviert. Die Terminalbeschreibung der Linux-Konsole funktioniert nicht, die von xterm nicht.
Im Prinzip können Sie tput
den Modus umschalten (und unterschiedliche Ergebnisse erhalten showkey
):
$ showkey -a
Press any keys - Ctrl-D will terminate this program
^[[H 27 0033 0x1b
91 0133 0x5b
72 0110 0x48
^C 3 0003 0x03
^D 4 0004 0x04
$ tput smkx
$ showkey -a
Press any keys - Ctrl-D will terminate this program
^[OH 27 0033 0x1b
79 0117 0x4f
72 0110 0x48
Als Komplikation erkennen Flüche nur einen Namen für eine Zeichenfolge. Einige Terminals (z. B. xterm) emulieren ältere Hardware-Terminals mit unterschiedlichen Namen für die Tasten auf der Bearbeitungstastatur. In den unten aufgeführten xterm-FAQ gibt es die Möglichkeit, die "Home" -Taste "Insert" zu benennen ...
Weiterführende Literatur:
home
undkhome
besteht darin, dass diekhome
Zeichenfolge die Sequenz ist, die durch Drücken der Home-Taste erzeugt wird, während diehome
Zeichenfolge die Sequenz ist, die an das Terminal gesendet werden sollte, um den Cursor an die Home-Position zu bewegen. Meines Wissens definiert terminfo keineend
Fähigkeit, nurkend
.