web-dev-qa-db-fra.com

Où puis-je trouver une liste des codes de clé de terminal aux raccourcis de remappage de Bash?

Par exemple:

"\e[1;5C"
"\e[Z"
"\e-1\C-i"

Je connais seulement des morceaux et des morceaux, comme \e signifie évasion et C- pour Ctrl, mais quels sont ces chiffres (1) et lettres (Z)? Que sont les ;, [ et - signes pour?

Existe-t-il seulement des essais et des erreurs, ou existe-t-il une liste complète des codes de touches BASH et une explication de leur syntaxe?

45
bug

Ce sont des séquences de caractères envoyées par votre terminal lorsque vous appuyez sur une touche donnée. Rien à faire avec Bash ou Readline en soi, mais vous voudrez savoir quelle séquence de caractères une combinaison de clé ou de clé donnée envoie si vous souhaitez configurer readline pour faire quelque chose sur une touche donnée.

Quand vous appuyez sur la A Touche, généralement des terminaux envoyez le caractère a (0x61). Si vous appuyez sur <Ctrl-I> ou <Tab>, alors envoyez généralement le ^I caractère également appelé TAB ou \t (0x9). La plupart des touches de fonction et de navigation envoient généralement une séquence de caractères qui commence par le ^[ (contrôle- [), également appelé ESC ou \e (0x1b, 033 octal), mais la séquence exacte varie d'une borne à la borne.

La meilleure façon de savoir quelle combinaison de clé ou de clé envoie pour votre terminal, est exécutée sed -n l et de le taper suivi de Enter sur le clavier. Ensuite, vous verrez quelque chose comme:

$ sed -n l
^[[1;5A
\033[1;5A$

La première ligne est causée par le terminal local echo effectué par le terminal (il peut ne pas être fiable car les paramètres du périphérique terminal l'affectent).

La deuxième ligne est sortie par sed. Les $ ne doit pas être inclus, il est seulement de vous montrer où se trouve la fin de la ligne.

Au-dessus de cela signifie que Ctrl-Up (que j'ai appuyé) Envoyez les 6 caractères ESC, [, 1, ;, 5 et A (0x1b 0x5b 0x31 0x3b 0x35 0x41)

La base de données terminfo enregistre un certain nombre de séquences pour un certain nombre de clés communes pour un certain nombre de terminaux (basé sur $TERM valeur).

Par exemple:

TERM=rxvt tput kdch1 | sed -n l

Vous dirait quelle séquence d'évacuation est envoyée par rxvt lors de la pression de la Delete clé.

Vous pouvez rechercher ce que la clé correspond à une séquence donnée avec votre terminal actuel avec infocmp (ici en supposant ncurses infoCMP):

$ infocmp -L1 | grep -F '=\E[Z'
    back_tab=\E[Z,
    key_btab=\E[Z,

Combinaisons clés comme Ctrl-Up Ne pas avoir d'entrées correspondantes dans la base de données terminfo, afin de déterminer ce qu'elles envoient, lisez la source ou la documentation du terminal correspondant ou de l'essayer avec le sed -n l méthode décrite ci-dessus.

57

Il est fourni via la bibliothèque GNU Readline. Vous devriez regarder dans Man 3 readline pour connaître sa description.

On dirait que vous avez également besoin d'informations sur ce que les codes ESCSPE aiment \[A moyenne. Vous pouvez trouver ces informations dans Wikipedia ANSI ESACAPE CODE Article.

4
rush

Ces codes proviennent-ils de la même source? Le dernier ressemble à un GNU Linding Linding. C'est ce que l'utilisateur envoie à une bash (voir la réponse de Rush). Les deux premiers, cependant, ressemblent plus à Séquences de contrôle des terminaux (même si le premier serait un mal formé). C'est ce que Bash ou un autre programme renvoient à l'émulateur du terminal afin de contrôler les mouvements de curseur, les couleurs de texte et similaires.

3
Uwe

La solution la plus simple que j'ai trouvée à vérifier quelle séquence d'évacuation est générée par une clé ou une combinaison clé est d'appuyer sur Ctrl+v Dans un terminal, puis appuyez sur la touche/combo que vous souhaitez connaître.

Vous obtiendrez une séquence comme ^[Oa et vous devrez traduire le ^[ dans \e ou \033 ou \x1b ou quelle que soit autre représentation, votre système de clavier attend votre caractère d'échappement.

Il a commencé comme une fonction EMACS nommée quoted-insert Et, depuis les collexions par défaut pour Bash et ZSH Mimic Emacs, ils l'ont également copiée.

Bash l'obtient via le GNU Lisez la bibliothèque d'entrées de lecture que d'autres choses comme Python import rlcompleter Amélioration également utilise.

Voici la description du Manuel de lecture :

quoted-insert (C-q ou C-v)

Ajoutez le caractère suivant saisi à la ligne Verbatim. C'est comment insérer des séquences clés comme C-q, par exemple.

Cela devrait fonctionner dans n'importe quoi Basé sur GNU readline.

Quant à Zsh, qui utilise sa propre alternative nommée Zle, il ne fait que honorer les emacs d'origine C-q Reliure en mode VI, assez ironiquement, mais C-v fonctionne toujours dans le mode d'entrée de type EMACS par défaut. (Rechercher quoted-insert Dans le zshzle ou zshall` Manpages et la paire de résultats de TheSecond doit indiquer que les clés de clavier par défaut.)

Pour un mnémonique, je conseille de penser à Ctrl+v comme demandant cela v erbatim.

0
ssokolow