Je me demande pourquoi Shift+ Arrow Keyrésultat dans l' un des A
, B
, C
ou D
lettres.
Pourquoi pas d'autres lettres? Pourquoi une lettre?
Je me demande pourquoi Shift+ Arrow Keyrésultat dans l' un des A
, B
, C
ou D
lettres.
Pourquoi pas d'autres lettres? Pourquoi une lettre?
Shift + Arrow Keys
ne fait rien.Réponses:
Les émulateurs de terminaux tels que
gnome-terminal
("Terminal" dans Ubuntu) mais aussixterm
eturxvt
sont 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
$TERM
variable, une base de données nomméeterminfo
est 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;2
mais n'affiche rien car il ne connaît pas cette séquence d'échappement. MaisA
est laissé et affiché.la source
^[[A
sens lorsque je clique sur les touches fléchées pendant qu'un processus est en cours d'exécution sur le terminal.cat >/dev/null
puis taper et appuyer sur Ctrl + C (ou Entrée puis Ctrl + D) lorsque vous avez terminé.