Reverse code-code procure por terminais

6

Meu entendimento é que os terminais geralmente usam códigos de controle ANSI para representar seqüências de caracteres não-alfanuméricos. Por exemplo, ao editar .inputrc para o Bash no Linux, é fácil encontrar sequências de código com a seguinte aparência:

"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word

Os comandos acima definem combinações de teclas para os comandos Bash history-search-backward , etc ..

Agora, no bash, eu posso usar read para ver como os caracteres digitados no meu teclado são mapeados para códigos de controle ANSI. Por exemplo. Por exemplo, se eu executar read e, em seguida, inserir Ctrl-P , receberei: ^P . Da mesma forma, se eu inserir Alt-W , recebo: ^[W .

Minha pergunta é: existe algum programa, ferramenta ou site que faça o oposto? Ou seja uma ferramenta que gera ou mostra a sequência de teclas do teclado que preciso digitar no teclado para obter uma determinada sequência de código de controle ANSI. Por exemplo, inserir ^[W deve produzir: Alt-W

Obrigado!

    
por Amelio Vazquez-Reina 12.04.2011 / 22:50

2 respostas

7

infocmp pode ajudar. Escreve escape como \E em vez de \e ou ^[ .

Por exemplo, para encontrar \e[A , que é o seu histórico de pesquisa para trás:

$ infocmp -1x | grep -F '=\E[A,'
       cuu1=\E[A,
$ man 5 terminfo | grep '  cuu1  '
       cursor_up                     cuu1       up       up one line

O que indica que você deve pressionar o cursor para cima, a.k.a. seta para cima.

Observe que você precisará da sinalização -x (mostrada acima) para exibir algumas combinações, por exemplo, Ctrl + < - .

Essas chaves estendidas não fazem parte do padrão, portanto, elas não estão listadas na página man do terminfo, mas estão documentadas no arquivo terminfo .

Observe também que as seqüências de controle variam dependendo de qual terminal você usa.

Você pode obter informações sobre um terminal diferente usando infocmp -1x <terminal> , por exemplo, infocmp -1x rxvt , infocmp -1x putty , etc.

Depois de descobrir qual deles você acha que o terminfo tem, as coisas ficarão mais fáceis se você definir a variável TERM para corresponder.

    
por 12.04.2011 / 23:07
2

A função cat é a maneira usual de fazer isso, já que você pode usá-lo para mostrar o que o seu teclado realmente envia. O bash não usa nenhuma das informações estendidas no banco de dados do terminal (ele usa um subconjunto dos recursos de termcap convencionais).

A desvantagem de usar cat , é claro, é determinar se

^[[A

é ^ [ A ou escape A (observando que o bash fornece uma \e imprimível para representar o caractere escape ).

Na prática, você pode ignorar o primeiro: essencialmente, ninguém envia os três caracteres literais, "everyone" envia esse ^[ como o caractere escape ). / p>

Leitura adicional:

por 03.11.2016 / 02:19