La risposta di Johan Myréen era vicina, ma non esattamente il problema: la maggior parte degli emulatori di terminale che userete hanno modalità normali e di applicazione per tasti speciali. Le descrizioni dei terminali sono scritte per una modalità, che corrisponde a ciò che utilizza un'applicazione a schermo intero. Altre applicazioni (come una shell interattiva ) in genere non inizializzano lo schermo per utilizzare la modalità applicazione . Bash ne è un esempio.
In modalità normale , xterm e terminali simili inviano escape[
(CSI) mentre in modalità applicazione , inviano le loro tastiere escapeO
(SS3). Nella sintassi terminfo, tale escape è \E
. Quindi ti infocmp
sta mostrando che la descrizione usa la modalità applicazione. La home
capacità è inviato al terminale, dicendogli come spostare il cursore nella casa posizione (in alto a sinistra), e non è la stessa khome
(inviato dal terminale utilizzando la tastiera).
Le applicazioni a schermo intero (come quelle che utilizzano ncurses) possono inviare le stringhe di capacità del terminale per l'inizializzazione della tastiera. Alcune descrizioni dei terminali mettono il terminale in modalità applicazione, altri no.
L'uso di kend
versus end
è una convenzione di denominazione: in terminfo per convenzione qualsiasi nome che inizia con k si riferisce a un tasto speciale (tasto funzione, tasto cursore, tasto tastiera) per chiarire che si tratta di stringhe che devono essere lette da un'applicazione. Ad esempio, kcub1
( tasto cursore indietro ) è diverso da cub1
(sposta il cursore indietro di una colonna).
ncurses riconosce il tasto come KEY_END
perché l'applicazione che stai utilizzando chiamerà la keypad
funzione per inizializzare il terminale usando il smkx
(il mnemonico significa "avvia la modalità di trasmissione da tastiera"). Ciò può / non può effettivamente attivare la modalità applicazione. La descrizione del terminale della console Linux no, xterm fa.
In linea di principio, è possibile utilizzare tput
per cambiare la modalità (e ottenere risultati diversi da 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
Come complicazione, le maledizioni riconosceranno un solo nome per una stringa. Alcuni terminali (come xterm) emulano terminali hardware più vecchi utilizzando nomi diversi per i tasti sulla tastiera di modifica. Nelle FAQ xterm elencate di seguito, c'è la possibilità di nominare quel tasto "Home" "Inserisci" ...
Ulteriori letture:
home
ekhome
è che lakhome
stringa è la sequenza che preme il tasto Home produce, mentre lahome
stringa è la sequenza che dovrebbe essere inviata al terminale per spostare il cursore sulla posizione iniziale. Per quanto ne so, terminfo non definisce unaend
capacità, solokend
.