Lorsque je maintiens les touches Shift et Ctrl du clavier et que j'appuie sur les touches fléchées, des combinaisons de caractères s'affichent à l'écran : ;6D;6A;6C;6B
Quelle est la signification de ces caractères ;NumberLetter ?
Lorsque je maintiens les touches Shift et Ctrl du clavier et que j'appuie sur les touches fléchées, des combinaisons de caractères s'affichent à l'écran : ;6D;6A;6C;6B
Quelle est la signification de ces caractères ;NumberLetter ?
L'entrée sur un terminal est une séquence de caractères (ou plus précisément une séquence d'octets). Les données non imprimables, telles que les touches de fonction et les touches fléchées, doivent être codées sous la forme d'un ou de plusieurs caractères. Certaines touches sont codées sous la forme de caractères de contrôle Par exemple ^I
(HT, Ctrl+I) pour les Tab clé. Mais il n'y a pas assez de caractères de contrôle pour coder toutes les combinaisons de touches. Les touches de fonction et les touches du curseur sont donc codées sous forme de séquences de plusieurs caractères. En pratique, tous les terminaux utilisent des séquences d'échappement qui commencent par le caractère ESC (Escape, ^[
) suivi de quelques caractères imprimables. Les détails de l'encodage peuvent varier d'un terminal à l'autre et peuvent dépendre de la configuration du terminal.
Les séquences d'échappement ont une longueur variable, de sorte que le seul moyen de savoir quand une séquence se termine est de connaître la façon dont elle est construite. Si l'application exécutée dans le terminal (par exemple l'interpréteur de commandes) reconnaît la séquence d'échappement comme un accord de touches, elle invoque la fonctionnalité liée à cet accord de touches. Si l'application ne reconnaît pas la séquence d'échappement, il y a un moment où elle abandonne et traite les caractères suivants comme des caractères ordinaires.
Le codage standard de facto pour les touches du curseur est le suivant Up envoie ^[[A
(où ^[
signifie un caractère d'échappement, et non la séquence de deux caractères (accent circonflexe et crochet), Down envoie ^[[B
, Right envoie ^[[C
y Left envoie ^[[D
. Les modificateurs sont indiqués par un point-virgule et un chiffre, et pour les touches du curseur, par un point-virgule supplémentaire. 1
avant le point-virgule. Le nombre 6
indique les modificateurs Ctrl + Shift . Voir cette réponse pour plus de détails.
Lorsque vous appuyez sur Ctrl+Shift+Left le terminal envoie ^[[1;6D
(rappelons que ^[
est un caractère d'échappement). L'interpréteur de commandes lit ^[[1
et constate alors qu'aucune de ses combinaisons de touches ne commence par ces trois caractères. Il abandonne donc (et peut émettre un bip s'il est configuré pour émettre un bip lorsqu'il reçoit une entrée non valide). Il continue à lire et voit ;6D
qui sont des caractères d'imprimerie ordinaires.
Pour connaître la séquence d'échappement envoyée par votre terminal pour une touche ou un accord de touches donné, appuyez sur la touche Ctrl+V puis l'accord clé. Ctrl+V ( ^V
) est un accord de touches dans les shells et autres applications terminales qui signifie "traiter le caractère suivant littéralement", et qui entraîne l'insertion littérale du premier caractère de la séquence d'échappement, suivi des autres caractères de la séquence d'échappement (qui sont des caractères d'impression ordinaires). Si vous voulez lier cet accord dans votre shell ou autre application terminale, vous devez lier cette séquence d'échappement.
Comme je l'ai indiqué plus haut, il existe des différences entre les terminaux. Il existe une norme de facto pour les cas simples, mais moins lorsque des modificateurs interviennent. En outre, de nombreux terminaux ignorent tout simplement certains modificateurs sur certaines touches. Par exemple, sur le terminal Big Sur, Ctrl+Shift+<em>cursor key</em> est indiscernable de <em>cursor key</em> par défaut ; ceci peut être configuré dans les préférences ("Profils" > "Clavier")). Iterm2 est livré avec plus de séquences d'échappement, y compris Ctrl+Shift+<em>cursor key</em> .
Pour en savoir plus :
LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.