|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
CONSOLE_CODESSection: Manuel du programmeur Linux (4)Updated: 25 juillet 2003 Index Return to Main Contents NOMconsole_codes - Séquence de contrôle des consoles.DESCRIPTIONSous Linux, le gestionnaire de console implémente un sous-ensemble important des séquences de contrôle des terminaux VT102 et ECMA-48/ISO 6429/ANSI X3.64, ainsi que quelques séquences spécifiques pour le changement de palette de couleurs, de fonte de caractères, etc... Dans la description ci-dessous, la seconde colonne de la table contient les mnémoniques ECMA-48 ou DEC (ces derniers ayant le préfixe DEC) pour chaque fonction indiquée. Les séquences sans mnémoniques ne correspondent ni à l'ECMA-48 ni au VT102.Lorsque tout le prétraitement nécessaire à une sortie est terminé, et qu'un flux de caractères arrive au gestionnaire de console pour être effectivement affiché, se produit tout d'abord une traduction des codes utilisés pour le prétraitement en code utilisés pour l'affichage. Si la console est en mode UTF-8, les octets arrivants sont tout d'abord assemblés en codes sur 16 bits au standard Unicode. Sinon chaque octet est transformé en fonction de la table de correspondance en cours (qui convertit chaque octet en une valeur Unicode). Voir le paragraphe JEUX DE CARACTÈRES plus bas pour plus de détails. Normalement, la valeur Unicode est convertie en un index dans la table de caractères, qui est alors stocké dans la mémoire vidéo, afin que le symbole graphique correspondant (comme ceux qui se trouvent dans la mémoire morte vidéo), apparaisse sur l'écran. Notez que l'utilisation de l'Unicode, et la conception des PC, permettent de disposer simultanément de 512 symboles différents. Si la valeur Unicode rencontrée est un caractère de contrôle, ou si l'on est déjà dans le traitement d'une séquence d'échappement, la valeur sera traitée de manière particulière. Plutôt que d'être convertie en un index dans la table des caractères et affichée comme un symbole, elle peut provoquer un déplacement du curseur, ou toute autre fonction de contrôle. Voir le paragraphe CONTRÔLE DE LA CONSOLE LINUX plus bas pour plus de détails. Il vaut mieux éviter en général de coder en dur les contrôles de terminaux dans les programmes. Linux propose l'utilisation de la base de données terminfo(5) concernant les possibilités des terminaux. Plutôt que d'émettre des séquences d'échappement à la main, vous pourrez presque toujours utiliser des bibliothèques de gestion de terminaux utilisant terminfo, ou des utilitaires comme ncurses(3), tput(1), ou reset(1). COMMANDES DE LA CONSOLE LINUXCe paragraphe décrit tous les caractères de commande et les séquences d'échappement qui déclenchent certaines fonctions spéciales (c'est à dire n'affichant pas un symbole graphique à la position du curseur) sur la console Linux. Caractères de contrôleUn caractère est dit "de contrôle" s'il correspond à l'un des 14 codes suivants (avant traduction par la table de correspondance en cours) : 00 (NUL), 07 (BEL), 08 (BS), 09 (HT), 0A (LF), 0B (VT), 0C (FF), 0D (CR), 0E (SO), 0F (SI), 18 (CAN), 1A (SUB), 1B (ESC), 7F (DEL). On peut demander un mode d'affichage des caractères de contrôle (voir plus bas), dans lequel les codes 07, 09, 0B, 18, 1A, et 7F seront quand même affichés sous forme graphique. Inversement, en mode UTF-8 tous les codes de l'intervalle 00-1F sont considérés comme des caractères de contrôle quelque soit le mode d'affichage de ces codes.Lorsqu'un caractère de contrôle est rencontré, il agit immédiatement, puis est oublié (même au milieu d'une séquence d'échappement, laquelle continue avec le caractère suivant). Toutefois, ESC indique le début d'une nouvelle séquence d'échappement, annulant alors une éventuelle séquence déjà commencée. De même CAN et SUB annulent toute séquence d'échappement entamée. Les caractères de contrôle reconnus sont BEL, BS, HT, LF, VT, FF, CR, SO, SI, CAN, SUB, ESC, DEL, CSI. Ils effectuent les actions suivantes :
Séquences d'échappement ESC, non CSI
Séquences d'échappement ECMA-48 CSICSI (ou ESC [) est suivi d'une série de paramètres, au plus NPAR (16), représentés par des nombres décimaux séparés par des points virgules. Un paramètre vide ou absent est considéré comme nul. La série de paramètre peut être précédée par un point d'interrogation. Toutefois, après CSI [ (ou ESC [ [) un seul caractère est lu, et le reste de la séquence est ignoré. L'idée est d'éliminer les touches de fonctions doublées. L'action déclenchée par une séquence CSI est indiquée par le dernier caractère.
Affichage graphique ECMA-48La séquence ECMA-48 SGR suivante ESC [ <paramètres> m fixe les paramètres d'affichage. Plusieurs attributs peuvent être indiqués dans la même séquence.
Modes ECMA-48
Demande de rapport d'état ECMA-48
Modes privés DEC (DECSET/DECRST)Ces modes ne sont pas décrits dans l'ECMA-48. La liste ci-dessous présente les séquences d'activation des modes, les séquences de désactivation sont obtenues en remplaçant le `h' final par un `l'.
Séquences CSI privées de la console LinuxLes séquences suivantes ne sont ni ECMA-48 ni du VT102 original. Elles sont spécifiques au gestionnaire de console de Linux. Les couleurs sont indiquées ainsi : 0 = noir, 1 = rouge, 2 = vert, 3 = marron, 4 = bleu, 5 = magenta, 6 = cyan, 7 = blanc.
JEUX DE CARACTÈRESLe noyau connaît 4 types de traductions des octets en symboles graphiques pour la console. Les 4 tables sont a) Latin1 -> PC, b) VT100 graphique -> PC, c) PC -> PC, d) spécifique utilisateur. Il existe deux jeux de caractères, appelés G0 et G1, et l'un d'entre eux est sélectionné comme jeu en cours (initialement G0). La frappe de ^N sélectionne le jeu G1 comme jeu en cours, la frappe de ^O sélectionne le jeu G0. Ces variables G0 et G1 pointent vers des tables de traduction, qui peuvent être modifiées par l'utilisateur. Initialement elles pointent respectivement vers les tables a) et b). Les séquences ESC ( B, ESC ( 0, ESC ( U et ESC ( K font pointer G0 respectivement vers les tables a), b), c) et d). Les séquences ESC ) B, ESC ) 0, ESC ) U, ESC ) K font pointer G1 vers les tables a), b), c) et d) respectivement. La séquence ESC c réinitialise le terminal. C'est ce qui doit être effectué lorsque l'écran est rempli de codes incompréhensibles. La commande classique "echo ^V^O" sélectionne seulement le jeu G0, elle ne garantit pas que G0 pointe sur la table a). Dans certaines distributions, on trouve une commande reset(1) qui effectue simplement "echo ^[c". Si l'entrée de la base terminfo pour la console est correcte, et dispose d'une entrée rs1=\Ec alors la commande "tput reset" fonctionnera aussi. La table de correspondance définie par l'utilisateur peut être construite en utilisant mapscrn(8). Cette correspondance agit ainsi : si le symbole c doit être imprimé, alors le symbole s = map[c] est envoyé à la mémoire vidéo. La représentation graphique correspondant à s est placée par défaut en mémoire morte, et peut être modifiée en utilisant setfont(8). GESTION DE SOURISLes possibilités de gestion de souris sont prévues pour fournir un rapport d'état de la souris compatible avec xterm. Comme le gestionnaire de console n'a aucun moyen de connaître le périphérique, ni le type de souris, ces rapports sont envoyés dans le flux de saisie de la console uniquement quand une requête ioctl de mise à jour de la souris est reçue. Ces requêtes doivent être déclenchées par une application utilisateur capable de gérer les souris, comme le démon gpm(8). Les paramètres numériques pour toutes les séquences de suivi de souris engendrées par xterm sont encodés dans un unique caractère, de code valeur+040. par exemple, `!' correspond à 1. Le système de coordonnées d'écran commence à 1. En mode de compatibilité X10, une séquence d'échappement est envoyée lors de l'appui sur un bouton, encodant la position et le numéro du bouton pressé. Ce mode est activé avec ESC [ ? 9 h et désactivé par ESC [ ? 9 l. Lors d'une pression sur un bouton, xterm envoie ESC [ M bxy (6 caractères). Dans ce message b correspond au numéro de bouton -1, x et y sont les coordonnées de l'emplacement où le bouton a été pressé. Ce sont les mêmes codes que ceux produits par le noyau. En mode de suivi normal (non implémenté sous Linux 2.0.24), une séquence d'échappement est envoyée lors de l'appui sur un bouton, mais aussi lors du relâchement. Des informations sur les touches de modification (SHIFT, CTL...) sont également envoyées. Le mode est activé par ESC [ ? 1000 h et désactivé avec ESC [ 1000 l. Lors de l'appui ou du relâchement d'un bouton, xterm envoie ESC [ M bxy. Les deux bits de poids faible de b correspondent à l'état du bouton 0=B1 pressé, 1=B2 pressé, 2=B3 pressé, 3=relâchement. Les bits de poids forts codent l'éventuelle touche modificatrice enfoncée lors de l'appui sur le bouton 4=Shift, 8=Méta, 16=Control. À nouveau x et y sont les coordonnées de la souris au moment de l'évènement. Le coin en haut à gauche de l'écran a pour coordonnées (1,1). COMPARAISON AVEC D'AUTRES TERMINAUXBeaucoup d'autres terminaux sont dits compatibles VT100, comme la console Linux. Nous allons voir ici les différences entre cette dernière et les deux types principaux de terminaux : le DEC VT102 et xterm(1). Gestion des caractères de contrôleLe VT102 reconnaissait les caractères de contrôle supplémentaires suivants :
Une gestion de DC1/DC3 compatible VT100 pouvait être activé par le gestionnaire de terminaux. Le programme xterm (en mode VT100) reconnaît les caractères de contrôle BEL, BS, HT, LF, VT, FF, CR, SO, SI, ESC. Séquences d'échappementLes séquences d'échappement VT100 non implémentées sur la console Linux :
Le programme xterm (en mode VT100) reconnaît ESC c, ESC # 8, ESC >, ESC =, ESC D, ESC E, ESC H, ESC M, ESC N, ESC O, ESC P ... ESC \, ESC Z (il répond ESC [ ? 1 ; 2 c, `Je suis un VT100 avec des options vidéo avancées') et ESC ^ ... ESC \ avec les mêmes significations que celles indiquées plus haut. Il accepte ESC (, ESC ), ESC *, ESC + suivis de 0, A, B pour les caractères spéciaux DEC, les tracés de lignes, l'ASCII UK, et l'ASCII US, respectivement. Il accepte ESC ] pour fixer certaines ressources :
Les codes suivants ont une signification légèrement différente des codes originaux :
Il reconnaît également :
Il ne reconnaît pas ESC % ... Séquences CSILe programme xterm (avec XFree86 3.1.2G) ne reconnaît pas les séquences de clignotement ou d'invisibilité. La version de base sous X11R6 ne reconnaît pas les séquences de choix de couleur. Toutes les autres séquences ECMA-48 CSI reconnues par la console Linux sont reconnue par xterm, et inversement.Le programme xterm reconnaîtra également toutes les séquences privées DEC citées plus haut, mais aucune séquence privée Linux. Pour plus de détail sur les séquences privées d'xterm consulter le document Xterm Control Sequences d'Edward Moy et Stephen Gildea, disponible avec la distribution X. BOGUESAvec le noyau 2.0.23, CSI fonctionne mal, et les caractères NUL ne sont pas ignorés dans les séquences d'échappement. VOIR AUSSIconsole(4), console_ioctl(4), charsets(4)TRADUCTIONChristophe Blaess, 1996-2003.
Index
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
Home :: Copyright :: Privacy :: Credits :: Get a free Linuxinfor Email Account Document on this page is part of "Linuxinfor Man Pages in HTML Format: man4". See Index Page for more info about Authorship and Copyright. 1999-2008 Linuxinfor.com. No rights reserved. |