Quelle sono sequenze di caratteri inviati dal tuo terminale quando premi un determinato tasto. Niente a che vedere con bash o readline di per sé, ma ti consigliamo di sapere quale sequenza di caratteri invia una determinata chiave o combinazione di tasti se vuoi configurarti readline
per fare qualcosa alla pressione di un determinato tasto.
Quando si preme il Atasto, generalmente i terminali inviano il carattere a
(0x61). Se si preme <Ctrl-I>
o <Tab>
, generalmente si invia il ^I
carattere noto anche come TAB
o \t
(0x9). La maggior parte dei tasti funzione e di navigazione generalmente invia una sequenza di caratteri che inizia con ^[
(control- [), noto anche come ESC
o \e
(0x1b, 033 ottale), ma la sequenza esatta varia da terminale a terminale.
Il modo migliore per scoprire cosa invia una chiave o una combinazione di tasti per il tuo terminale, è eseguirlo sed -n l
e digitarlo seguito dalla Entertastiera. Quindi vedrai qualcosa di simile:
$ sed -n l
^[[1;5A
\033[1;5A$
La prima linea è causata dal terminale locale echo
eseguito dal dispositivo terminale (potrebbe non essere affidabile in quanto le impostazioni del dispositivo terminale lo influenzerebbero).
La seconda riga viene emessa da sed
. Il $
non è da inserire, è solo per mostrare dove la fine della linea è.
Sopra Ciò significa che Ctrl-Up(che ho premuto) inviare i 6 caratteri ESC
, [
, 1
, ;
, 5
e A
(0x1b 0x5b 0x31 0x3b 0x35 0x41)
Il terminfo
database registra un numero di sequenze per un numero di chiavi comuni per un numero di terminali (basato sul $TERM
valore).
Per esempio:
TERM=rxvt tput kdch1 | sed -n l
Ti direbbe quale sequenza di escape viene inviata rxvt
premendo il Deletetasto.
Puoi cercare quale chiave corrisponde a una determinata sequenza con il tuo terminale corrente con infocmp
(qui assumendo ncurses
infocmp):
$ infocmp -L1 | grep -F '=\E[Z'
back_tab=\E[Z,
key_btab=\E[Z,
Le combinazioni di tasti come Ctrl-Upnon hanno voci corrispondenti nel terminfo
database, quindi per scoprire cosa inviano, leggi l'origine o la documentazione per il terminale corrispondente o provalo con il sed -n l
metodo sopra descritto.
bind -p
.