Recherche inversée de code de contrôle pour les terminaux

Je crois comprendre que les terminaux utilisent souvent des codes de contrôle ANSI pour représenter des séquences de caractères non alphanumériques. Par exemple, lors de l'édition de .inputrc pour Bash sous Linux, il est facile de find des séquences de code qui se présentent comme suit:

 "\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 

Les commands ci-dessus définissent les raccourcis keyboard pour les commands Bash history-search-backward , etc.

Maintenant, dans bash, je peux utiliser read pour voir comment les caractères tapés dans mon keyboard sont mappés aux codes de contrôle ANSI. Par exemple, si j'exécute read , puis entrez Ctrl-P , j'obtiens: ^P De même, si j'entre Alt-W , j'obtiens: ^[W

Ma question est la suivante: y a-t-il un programme, un outil ou un site Web qui fait le contraire? C'est-à-dire un outil qui affiche ou affiche la séquence de touches du keyboard que j'ai besoin de taper sur mon keyboard pour get une séquence de code de contrôle ANSI donnée. Par exemple, entrer ^[W devrait afficher: Alt-W

Merci!

infocmp peut vous aider. Il écrit escape comme \E plutôt que \e ou ^[ .

Par exemple, pour find \e[A , qui est votre historique-search-arrière:

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

Ce qui vous request d'appuyer sur le slider, flèche vers le haut.

Notez que vous aurez besoin du drapeau -x (montré ci-dessus) pour afficher certaines combinaisons, par exemple Ctrl + <- .

Ces keys étendues ne font pas partie de la norme, elles ne figurent donc pas dans la page de manuel terminfo, mais elles sont documentées dans le file terminfo .

Notez également que les séquences de contrôle varient selon le terminal utilisé.

Vous pouvez get des informations sur un terminal différent en utilisant infocmp -1x <terminal> , par exemple infocmp -1x rxvt , infocmp -1x putty , etc.

Une fois que vous avez trouvé ce que terminfo pense que vous avez, les choses seront plus faciles si vous définissez votre variable TERM pour correspondre.

La fonction de cat est la façon habituelle de le faire, puisque vous pouvez l'utiliser pour montrer ce que votre keyboard envoie réellement. bash n'utilise aucune des informations étendues dans la database du terminal (il utilise un sousset des capacités termcap conventionnelles).

L'inconvénient d'utiliser cat , bien sûr, est de déterminer si

 ^[[A 

est ^ [ A ou escape A (en notant que bash fournit un \e imprimable pour représenter le caractère d' échappement ).

En pratique, vous pouvez ignorer le premier: essentiellement personne n'émet les trois caractères littéraux, "tout le monde" envoie ce ^[ comme caractère d' échappement ].

Pour en savoir plus:

  • Comment puis-je voir ce que mon keyboard envoie? (FAQ ncurses)
  • unmap (un programme qui traduit l' échappement dans \E ).