Por exemplo:
"\e[1;5C"
"\e[Z"
"\e-1\C-i"
Sei apenas pedaços, como \e
suportes para escape e C-
para Ctrl, mas quais são esses números ( 1
) e letras ( Z
)? Quais são as ;
, [
e -
indicações para?
Existe apenas tentativa e erro, ou existe uma lista completa de códigos de chave bash e uma explicação de sua sintaxe?
bind -p
.Respostas:
Essas são seqüências de caracteres enviadas pelo seu terminal quando você pressiona uma tecla específica. Nada a ver com bash ou linha de leitura propriamente dita, mas você desejará saber qual sequência de caracteres uma determinada tecla ou combinação de teclas envia se desejar configurar
readline
para fazer algo após pressionar uma tecla.Quando você pressiona a Atecla, geralmente os terminais enviam o
a
caractere (0x61). Se você pressionar<Ctrl-I>
ou<Tab>
, geralmente enviará o^I
caractere também conhecido comoTAB
ou\t
(0x9). A maioria das teclas de função e navegação geralmente envia uma sequência de caracteres que começa com^[
(control- [), também conhecido comoESC
ou\e
(0x1b, 033 octal), mas a seqüência exata varia de terminal para terminal.A melhor maneira de descobrir o que uma tecla ou combinação de teclas envia para o seu terminal é executar
sed -n l
e digitar seguido pelo Enterteclado. Então você verá algo como:A primeira linha é causada pelo terminal local
echo
feito pelo dispositivo de terminal (pode não ser confiável, pois as configurações do dispositivo de terminal o afetariam).A segunda linha é emitida 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 tenha pressionado) enviar os 6 caracteres
ESC
,[
,1
,;
,5
eA
(0x1b 0x5b 0x31 0x3b 0x35 0x41)O
terminfo
banco de dados registra várias sequências para várias chaves comuns para vários terminais (com base no$TERM
valor).Por exemplo:
Diria qual sequência de escape é enviada
rxvt
ao pressionar a Deletetecla.Você pode procurar qual tecla corresponde a uma determinada sequência com o seu terminal atual com
infocmp
(aqui assumindoncurses
infocmp):Combinações de teclas como Ctrl-Upnão possuem entradas correspondentes no
terminfo
banco de dados; portanto, para descobrir o que elas enviam, leia a fonte ou a documentação do terminal correspondente ou tente com osed -n l
método descrito acima.fonte
\e-1\C-i
é um guia para trás, porquecontrol
ei
insere uma guia eescape
seguido por-1
diz bash para fazê-lo para trás uma vez (I arregalou isso e encontrei algumas coisas sobredigit-arguments
).$ sed -n 1
sed: -e expression #1, char 1: missing command
tput smkx
, seu terminal envia\e[OD
(kcub1
) e depoistput rmkx
,\e[D
(cub1
, o mesmo código da sequência que move o cursor para a esquerda, para que o eco dessas teclas mova o cursor. Tentestty -echoctl; tput rmkx; sleep inf
e você verá as teclas de seta movem o cursor quando não estão no modo de teclado ).É fornecido via biblioteca gnu readline. você deve consultar o readline do man 3 para descobrir sua descrição.
Parece que você também precisa de informações sobre o que significa os códigos escspe liks
\[A
. Você pode encontrar essas informações no artigo de código da ANSI esacape da wikipedia .fonte
\[A
está na tabela "códigos CSI" na linha: "CSI n A"[Z
,[1;5C
ou-1
?Esses códigos são da mesma fonte? O último parece uma ligação de linha de leitura GNU. É isso que o usuário envia para uma festança (veja a resposta do rush). As duas primeiras, no entanto, parecem mais com seqüências de controle terminal (mesmo que a primeira seja mal formada). É isso que o bash ou outro programa envia de volta ao emulador de terminal, a fim de controlar os movimentos do cursor, as cores do texto e similares.
fonte
A maneira mais fácil que encontrei para verificar qual sequência de escape é gerada por uma tecla ou combinação de teclas é pressionar Ctrl+ vem um terminal e, em seguida, pressionar a tecla / combinação que você deseja conhecer.
Você vai ter uma seqüência como
^[Oa
e você vai ter que traduzir o^[
em\e
ou\033
ou\x1b
ou qualquer outra representação sua espera sistema KeyBinding para o caractere de escape.Começou como uma função do Emacs denominada
quoted-insert
e, como as teclas padrão do Bash e Zsh imitam o Emacs, eles também a copiaram.O Bash obtém através da biblioteca de entrada GNU Readline que outras coisas, como o
import rlcompleter
aprimoramento do Python, também usam.Aqui está a descrição do manual Readline :
Isso deve funcionar em qualquer coisa baseada no GNU Readline.
Quanto ao Zsh, que usa sua própria alternativa chamada ZLE, ele apenas respeita a
C-q
ligação original do Emacs quando está no modo Vi, ironicamente, masC-v
ainda funciona no modo de entrada padrão do tipo Emacs. (Procurequoted-insert
naszshzle
páginas de manual ou zshall` e o segundo par de resultados deve listar as teclas de atalho padrão.)Para um mnemônico, aconselho pensar em Ctrl+ vcomo pedir isso v erbatim.
fonte