Essas são sequências de caracteres enviados pelo seu terminal quando você pressiona uma determinada tecla. Nada a ver com bash ou readline por si só, mas você vai querer saber qual seqüência de caracteres uma determinada chave ou combinação de teclas envia se você quiser configurar readline
para fazer algo em uma determinada tecla pressionada.
Quando você pressiona a tecla A , geralmente os terminais enviam o caractere a
(0x61). Se você pressionar <Ctrl-I>
ou <Tab>
, geralmente envie o caractere ^I
, também conhecido como TAB
ou \t
(0x9). A maioria das teclas de função e navegação geralmente envia uma seqüência de caracteres que começa com ^[
(control- [), também conhecido como ESC
ou \e
(0x1b, 033 octal), mas a seqüência exata varia de terminal para o terminal.
A melhor maneira de descobrir o que uma chave ou combinação de teclas envia para o seu terminal, é executar sed -n l
e digitá-lo seguido por Enter no teclado. Então você verá algo como:
$ sed -n l
^[[1;5A
3[1;5A$
A primeira linha é causada pelo terminal local echo
feito pelo dispositivo terminal (pode não ser confiável, pois as configurações do dispositivo terminal o afetariam).
A segunda linha é gerada por sed
. O $
não deve ser incluído, é apenas para mostrar onde está o fim da linha.
Acima, isso significa que Ctrl-Up (que eu pressionei) envia os 6 caracteres ESC
, [
, 1
, ;
, 5
e A
(0x1b 0x5b 0x31 0x3b 0x35 0x41)
O banco de dados terminfo
registra um número de seqüências para um número de chaves comuns para um número de terminais (com base no valor $TERM
).
Por exemplo:
TERM=rxvt tput kdch1 | sed -n l
Diria a você qual sequência de escape é enviada por rxvt
ao pressionar a tecla Excluir .
Você pode procurar qual chave corresponde a uma determinada sequência com seu terminal atual com infocmp
(aqui assumindo ncurses
infocmp):
$ infocmp -L1 | grep -F '=\E[Z'
back_tab=\E[Z,
key_btab=\E[Z,
As combinações de teclas como Ctrl-Up não possuem entradas correspondentes no banco de dados terminfo
, portanto, para descobrir o que elas enviam, leia a fonte ou a documentação do terminal correspondente ou tente com o método sed -n l
descrito acima.