2 votes

Séquences d'échappement du terminal dans GNU Screen

Je ne comprends pas bien le concept des séquences d'échappement dans un terminal (ou un émulateur de terminal pour être plus précis) et leur relation avec l'écran. bindkey commande. J'ai regardé quelques exemples .screenrc que j'ai trouvé sur internet où j'ai vu la configuration suivante :

# switch windows with F3 (prev) and F4 (next)
bindkey "^[OR" prev
bindkey "^[OS" next

# switch layouts with Ctrl+F3 (prev layout) and Ctrl+F4 (next)
bindkey "^[O1;5R" layout prev
bindkey "^[O1;5S" layout next

Je ne sais pas pourquoi, par exemple, la séquence ^[0R signifie F3 et la séquence ^[01;5R signifie Ctrl+F3 . Existe-t-il un tableau pour de telles séquences ?

Ces séquences me rappellent également les séquences utilisées pour configurer les couleurs dans une invite de terminal (par exemple en utilisant la commande $PS1 ) comme \[\033[0m\] pour la réinitialisation et \[\033[30m\] pour le noir de premier plan. Existe-t-il réellement une relation entre ces deux "séquences de code" ou s'agit-il simplement de mon imagination pure ?

1voto

Arkadiusz Drabczyk Points 2334

Bonne question.

Oui, ce sont des codes d'échappement ANSI.

Vous pouvez consulter une liste des codes d'échappement ANSI pour VT100 ici : http://www.braun-home.net/michael/info/misc/VT100_commands.htm mais il y a un moyen plus rapide - dans votre émulateur de terminal, appuyez sur Control - v et ensuite Control - F3 par exemple et vous verrez ceci :

$ ^[[1;5R

En man bash il est dit :

   quoted-insert (C-q, C-v)
          Add the next character typed to the line verbatim.  This
          is how to insert characters like C-q, for example.

Remarquez que ^[ elle-même est Escape dans la sortie de quoted-insert et vous pouvez étudier cette réponse https://unix.stackexchange.com/a/108014/72304 pour savoir où ce d'où vient cette notation.

Pour mieux comprendre - comme vous le savez déjà, il y a quelques ANSI pour sélectionner les codes d'échappement couleur qui utilisent Escape clé. Il existe plusieurs méthodes pour saisir un littéral Escape - nous pouvons par exemple utiliser la notation octale car nous savons que Escape es \033 dans le tableau ASCII :

printf "\033[1;34mThis is a blue text.\n\033[0m"

Nous pouvons également utiliser \e que certaines implémentations de printf comprendre :

printf "\e[1;34mThis is a blue text.\n\e[0m"

Mais vous pouvez aussi utiliser quoted-insert pour insérer un littéral Escape - pointez votre curseur à la place de \e pour le retirer, appuyez sur Control - v puis appuyez sur Escape . Vous obtiendrez ceci :

printf "^[[1;34mThis is a blue text.\n^[[0m"

Remarquez que lorsque vous faites ça dans votre émulateur de terminal ^[ sera sera traité comme un seul caractère. Copier la ligne ci-dessus et la coller dans dans votre émulateur de terminal ne fonctionnera pas car vous obtiendrez 2 caractères séparés distincts au lieu d'un seul.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X