Je me demande pourquoi Shift+ Arrow Keyrésultat dans l' un des A, B, Cou Dlettres.
Pourquoi pas d'autres lettres? Pourquoi une lettre?
Shift + Arrow Keysne fait rien.
Je me demande pourquoi Shift+ Arrow Keyrésultat dans l' un des A, B, Cou Dlettres.
Pourquoi pas d'autres lettres? Pourquoi une lettre?
Shift + Arrow Keysne fait rien.
Réponses:
Les émulateurs de terminaux tels que gnome-terminal("Terminal" dans Ubuntu) mais aussi xtermet urxvtsont nommés "émulateurs" car ils reproduisent le comportement de terminaux plus anciens qui étaient le seul affichage d'un ordinateur. Ces terminaux communiquaient avec l'ordinateur avec un protocole textuel et étaient initialement conçus pour recevoir uniquement du texte. Rapidement, plus de contrôle était nécessaire: comment effacer une ligne? Utilisez des couleurs? Ou changer la position du curseur?
Source: L'art de l'utilisabilité d'Unix - Interfaces de ligne de commande
Les séquences d'échappement ont été conçues pour que chaque terminal fasse de telles choses. Ils sont nommés échapper parce qu'ils commencent par le code d'échappement ASCII: 33. Il n'y a aucun moyen d'imprimer un tel personnage directement, ce qui en fait un bon choix pour de telles séquences. Lorsque nous voulons toujours afficher ce caractère, ^[[est utilisé, et c'est ce que je vais utiliser dans mes explications.
Lorsque le terminal a reçu ^[[A, cela ne signifiait pas "imprimer ^ [[A", mais "l'utilisateur a appuyé sur la flèche vers le haut". "A" ici est totalement arbitraire: il se trouve que c'est la lettre sur laquelle tout le monde était d'accord, car c'est ce que le DEC VT-52 et son successeur le populaire terminal VT-100 ont utilisé.

Source: Manuel de maintenance DEC VT-52 1976
C'est toujours ainsi que fonctionnent les émulateurs de terminaux: selon la $TERMvariable, une base de données nommée terminfoest chargée de dire quels codes doivent être envoyés au shell (bash, sh, zsh ...), qui est ensuite chargé de les comprendre et de réagir pour eux.
Maintenant, le code pour Shift+ upse trouve être ^[[1;2A: l'émulateur de terminal envoie ce code au shell, qui essaie d'interpréter ^[[1;2mais n'affiche rien car il ne connaît pas cette séquence d'échappement. Mais Aest laissé et affiché.
^[[Asens lorsque je clique sur les touches fléchées pendant qu'un processus est en cours d'exécution sur le terminal.
cat >/dev/nullpuis taper et appuyer sur Ctrl + C (ou Entrée puis Ctrl + D) lorsque vous avez terminé.