Caret bracket square bracket A ^ [[A - Qu'est-ce que cela signifie?

13

Je m'excuse si cela a déjà été demandé, mais je n'ai aucune idée de la façon dont je peux le découvrir moi-même - lorsque je recherche "^ [[A" dans n'importe quel moteur de recherche, il ignore complètement la partie "^ [[".

Quoi qu'il en soit, ma question: Parfois dans le terminal (sur un Mac) lorsque je frappe les touches fléchées, les caractères "^ [[A", "^ [[B", "^ [[C" ou "^ [[D" apparaissent) . Je me souviens avoir rencontré cela il y a quelques années lors de l'utilisation (très probable) de DOS et je pense que cela s'est produit beaucoup plus fréquemment aussi.

Pourquoi cela se produit-il et que signifient-ils?

Phill
la source

Réponses:

20

Ce sont des codes d'échappement ANSI . Le ^[représente un caractère ESC (escape), le suivant [est un crochet carré gauche réel et la lettre indique la fonction du code d'échappement. La Esc[pièce est appelée CSI (Control Sequence Introducer). Donc, la séquence CSI Asignifie flèche vers le haut, ou CUU (CUrsor Up).

Quoi qu'il en soit, ce schéma remonte à l'époque du terminal d'affichage VT100 (introduit en 1978). Certaines des séquences d'échappement utilisées par le VT100 ont été normalisées par l'ANSI au début des années 1980 et sont restées d'usage courant depuis.

Normalement, lorsque vous appuyez sur les touches fléchées, un programme (disons le shell) écoute et peut agir sur elles. Ainsi, lorsque vous appuyez sur la flèche vers le haut, elle revient dans l'historique de vos commandes. Cependant, si un programme en cours d'exécution qui ne comprend pas les séquences d'échappement des touches fléchées, elles finissent généralement par être renvoyées en écho vers le terminal comme n'importe quelle autre touche que vous pourriez frapper. C'est pourquoi vous voyez parfois ^[[Asi vous appuyez sur la touche flèche vers le haut.

Greg Hewgill
la source
Il convient également de souligner que ^ est la convention UNIX courante pour afficher le "contrôle" dans le terminal. Par exemple, si vous deviez appuyer sur Ctrl + A et qu'il devait être ignoré de la même manière, il serait affiché comme "^ A". Ctrl + [est en fait un synonyme du caractère d'échappement. Soit dit en passant, qu'est-ce qui fait que cela se produit en premier lieu; quel logiciel décide d'imprimer le signe d'insertion? Est-ce l'émulateur de terminal lui-même, ou autre chose que je ne connais pas?
Muzer
@Muzer, le noyau lui-même effectue le formatage par insertion des caractères en écho. La fonctionnalité peut être désactivée avecstty -echoctl
Le noyau? Intéressant, je ne savais pas que cela allait aussi loin (bien qu'avec du recul, cela aurait dû être évident, car cela se produit même au tout début du démarrage!).
Muzer