Man page - console_codes(4)

Packages contains this manual

Available languages:

en fr pt_BR es pl ko ja ru zh_TW zh_CN de

Manual

console_codes

NOM
DESCRIPTION
Commandes de la console Linux
Ensembles de caractĂšres
Gestion de souris
Comparaison avec d’autres terminaux
NOTES
BOGUES
VOIR AUSSI
TRADUCTION

NOM

console_codes — SĂ©quence de contrĂŽle et d’échappement des consoles

DESCRIPTION

Sous Linux, le gestionnaire de console implĂ©mente un sous-ensemble important des sĂ©quences de contrĂŽle des terminaux VT102 et ECMA-48/ISO/IEC 6429/ANSI X3.64, ainsi que quelques sĂ©quences spĂ©cifiques pour le changement de palette de couleurs, de jeu 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Ă©monique 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Ă©, la traduction des codes utilisĂ©s pour le prĂ©traitement en codes utilisĂ©s pour l’affichage a lieu avant tout.

Si la console est en mode UTF-8, les octets arrivant 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). Consultez la section Jeux de caractĂšres ci-aprĂšs 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 glyphe 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 glyphe, elle peut provoquer un dĂ©placement du curseur ou toute autre fonction de contrĂŽle. Consultez le paragraphe ContrĂŽle de la console Linux ci-aprĂšs 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 Linux

Ce 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 glyphe Ă  la position actuelle du curseur) sur la console Linux.

CaractĂšres de contrĂŽle

Un 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), 7 (DEL). Un « mode d’affichage des caractĂšres de contrĂŽle » (voir ci-aprĂšs), dans lequel les codes 07, 09, 0b, 18, 1a et 7f seront quand mĂȘme affichĂ©s sous forme de glyphes, peut ĂȘtre dĂ©fini. Inversement, en mode UTF-8, tous les codes de l’intervalle 00–1f sont considĂ©rĂ©s comme des caractĂšres de contrĂŽle quel que soit le « mode d’affichage des caractĂšres de contrĂŽle ».

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), et la sĂ©quence d’échappement 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 :
BEL (0x07, ^G )

émet un bip ;

BS (0x08, ^H )

provoque un retour en arriĂšre d’une colonne (mais ne remonte pas Ă  la ligne prĂ©cĂ©dente quand il est invoquĂ© en dĂ©but de ligne) ;

HT (0x09, ^I )

provoque un saut au prochain taquet de tabulation ou à la fin de ligne s’il n’y a pas de taquet d’ici là ;

LF (0x0A, ^J )
VT (0x0B, ^K )
FF (0x0C, ^L )

provoquent tous les trois un saut de ligne pour et si LF/NL (mode new-line) est actif, un retour chariot ;

CR (0x0D, ^M )

provoque un retour chariot (« carriage return ») ;

SO (0x0E, ^N )

active le jeu de caractÚres G1 ;

SI (0x0F, ^O )

active le jeu de caractÚres G0 ;

CAN (0x18, ^X )
SUB (0x1A, ^Z )

interrompent des sĂ©quences d’échappement ;

ESC (0x1B, ^[ )

dĂ©bute une sĂ©quence d’échappement ;

DEL (0x7F)

est ignoré ;

CSI (0x9B)

est équivalent à ESC [.

SĂ©quences d’échappement ESC, non CSI

Image grohtml-3860005-1.png

SĂ©quences d’échappement ECMA-48 CSI

CSI (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 Ă©tant 0. La sĂ©rie de paramĂštres peut ĂȘtre prĂ©cĂ©dĂ©e par un seul 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’ignorer les touches de fonctions rĂ©pĂ©tĂ©es.

L’action dĂ©clenchĂ©e par une sĂ©quence CSI est indiquĂ©e par le dernier caractĂšre.

Image grohtml-3860005-2.png

Sélection du rendu graphique ECMA-48

La sĂ©quence ECMA-48 SGR suivante ESC [ paramĂštres m dĂ©finit les paramĂštres d’affichage. Plusieurs attributs peuvent ĂȘtre indiquĂ©s dans la mĂȘme sĂ©quence, sĂ©parĂ©s par des points-virgules. Un attribut vide (entre les points-virgules ou en dĂ©but ou fin de chaĂźne) est interprĂ©tĂ© comme valant zĂ©ro.

Image grohtml-3860005-3.png

Les commandes 38 et 48 ont besoin d’autres arguments :

Image grohtml-3860005-4.png

Modes ECMA-48
ESC [ 3 h

DECCRM (inactif par défaut) : afficher les caractÚres de contrÎle.

ESC [ 4 h

DECIM (inactif par défaut) : mode insertion.

ESC [ 20 h

LF/NL (inactif par défaut) : faire suivre les LF, VT ou FF par un CR.

Demandes de rapport d’état ECMA-48
ESC [ 5 n

Rapport d’état du pĂ©riphĂ©rique (DSR) : la rĂ©ponse est ESC [ 0 n (Terminal OK).

ESC [ 6 n

Rapport de position du curseur (CPR) : la rĂ©ponse est ESC [ y ; x R, oĂč x,y est la position actuelle du curseur.

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 ».
ESC [ ? 1 h

DECCKM (inactif par défaut) : les touches de déplacement du curseur émettent un préfixe ESC O plutÎt que ESC [.

ESC [ ? 3 h

DECCOLM (inactif par dĂ©faut = 80 colonnes) : bascule de 80 Ă  132 colonnes. Les sources du gestionnaire de console indiquent que ce code n’est pas suffisant Ă  lui seul. Certains utilitaires comme resizecons (8) modifient Ă©galement les registres matĂ©riels de la carte vidĂ©o.

ESC [ ? 5 h

DECSCNM (inactif par dĂ©faut) : mode d’inversion vidĂ©o.

ESC [ ? 6 h

DECOM (inactif par défaut) : adressage du curseur relatif au coin haut gauche de la région de défilement.

ESC [ ? 7 h

DECAWM (actif par défaut) : saut de ligne automatique. Un caractÚre émis aprÚs la colonne 80 (ou 132 en mode DECCOLM), est affiché au début de la ligne suivante.

ESC [ ? 8 h

DECARM (actif par défaut) : répétition automatique des touches du clavier.

ESC [ ? 9 h

État de souris X10 (inactif par dĂ©faut) : dĂ©finit le mode de rapport d’état de la souris Ă  1 (ou le rĂ©initialise Ă  0) — voir ci-aprĂšs.

ESC [ ? 25 h

DECTECM (actif par défaut) : curseur visible.

ESC [ ? 1000 h

État de souris X11 (inactif par dĂ©faut) : dĂ©finit le mode de rapport d’état de la souris Ă  2 (ou le rĂ©initialise Ă  0) — voir ci-aprĂšs.

Séquences CSI privées de la console Linux

Les sĂ©quences suivantes ne sont ni ECMA-48 ni du VT102 originel. Elles sont spĂ©cifiques au gestionnaire de console de Linux. Les couleurs sont indiquĂ©es selon les paramĂštres SGR : 0 = noir, 1 = rouge, 2 = vert, 3 = marron, 4 = bleu, 5 = magenta, 6 = cyan, 7 = blanc, 8–15 = versions brillantes de 0–7.

Image grohtml-3860005-5.png

Ensembles de caractĂšres

Le noyau connaßt 4 types de traduction des octets en symboles graphiques pour la console. Les 4 tables sont a) Latin1 -> PC, b) graphismes VT100 -> 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 souris

Les possibilitĂ©s de gestion de souris sont prĂ©vues pour fournir un rapport d’état de la souris compatible avec xterm (1). 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 sĂ©quences de suivi de souris engendrĂ©es par xterm (1) 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 (1) 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 (1) envoie ESC [ M bxy . Les deux bits de poids faible de b correspondent Ă  l’état du bouton 0=MB1 pressĂ©, 1=MB2 pressĂ©, 2=MB3 pressĂ©, 3=relĂąchement. Les bits de poids fort codent l’éventuelle touche modificatrice enfoncĂ©e lors de l’appui sur le bouton 4=Shift, 8=Meta, 16=Control. À nouveau x et y sont les coordonnĂ©es de l’évĂšnement de souris. Le coin en haut Ă  gauche de l’écran a pour coordonnĂ©es (1,1).

Comparaison avec d’autres terminaux

Beaucoup 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ĂŽle

Le VT102 reconnaissait les caractÚres de contrÎle supplémentaires suivants :
NUL (0x00)

était ignoré ;

ENQ (0x05)

renvoyait un message de réponse ;

DC1 (0x11, ^Q , XON)

reprenait une transmission ;

DC3 (0x13, ^S , XOFF)

faisait que vt100 ignorait tous les codes saufs XOFF et XON (et arrĂȘtait Ă©galement la transmission).

Une gestion de DC1/DC3 compatible VT100 pouvait ĂȘtre activĂ©e par le pilote de terminal.

Le programme xterm (1) (en mode VT100) reconnaĂźt les caractĂšres de contrĂŽle BEL, BS, HT, LF, VT, FF, CR, SO, SI, ESC.

SĂ©quences d’échappement

Les sĂ©quences d’échappement VT100 non implĂ©mentĂ©es sur la console Linux :

Image grohtml-3860005-6.png

Le programme xterm (1) (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.

L’utilisateur peut configurer xterm (1) pour qu’il rĂ©ponde aux sĂ©quences de contrĂŽle VT220, qui s’identifiera comme VT52, VT100, et au-delĂ  selon la maniĂšre dont il est configurĂ© et initialisĂ©.

Il accepte ESC ] (OSC) pour dĂ©finir certaines ressources. En plus de la fin de chaĂźne (ST) ECMA-48, xterm (1) accepte qu’une chaĂźne OSC se termine par BEL. Il y a quelques sĂ©quences de contrĂŽle OSC reconnues par xterm (1) :

Image grohtml-3860005-7.png

Il reconnait les codes suivants avec une signification lĂ©gĂšrement diffĂ©rente des codes originaux (sauvant plus d’états, avec un comportement plus proche de VT100/VT220) :

Image grohtml-3860005-8.png

Il reconnaßt également :

Image grohtml-3860005-9.png

Il reconnaĂźt Ă©galement ESC % et fournit une implĂ©mentation plus complĂšte d’UTF-8 que la console Linux.

Séquences CSI

Les anciennes versions de xterm (1), par exemple depuis X11R5, interprĂštent un SGR clignotant comme un SGR gras. Les versions suivantes implĂ©mentant les couleurs ANSI, par exemple XFree86 3.1.2A en 1995, ont amĂ©liorĂ© cela en autorisant l’attribut clignotant Ă  ĂȘtre affichĂ© comme une couleur. Les versions modernes de xterm implĂ©mentent le SGR clignotant sous la forme de texte clignotant et autorisent encore le texte colorĂ© comme possibilitĂ© alternative de rendu des SGR. Les versions de base sous X11R6 ne reconnaissaient pas les SGR de choix de couleur avant la publication de X11R6.8, qui a incorporĂ© le xterm de XFree86. Toutes les sĂ©quences ECMA-48 CSI reconnues par Linux le sont aussi par xterm , bien que xterm (1) implĂ©mente plusieurs sĂ©quences de contrĂŽle ECMA-48 et DEC non reconnues par Linux.

Le programme xterm (1) reconnaĂźt Ă©galement toutes les sĂ©quences du mode privĂ© DEC citĂ©es plus haut, mais aucune sĂ©quence du mode privĂ© Linux. Pour plus de dĂ©tails sur les sĂ©quences privĂ©es d’ xterm (1) consultez le document Xterm Control Sequences d’Edward Moy, Stephen Gildea et Thomas E. Dickey disponible avec la distribution X. Ce document, quoique succinct, est plus complet que cette page de manuel. Pour une vue gĂ©nĂ©rale chronologique,

http://invisible-island.net/xterm/xterm.log.html

indique les changements apportés à xterm.

Le programme vttest

http://invisible-island.net/vttest/

montre le fonctionnement de beaucoup de ces sĂ©quences de contrĂŽle. La distribution source de xterm (1) contient Ă©galement des scripts d’exemple utilisant d’autres fonctionnalitĂ©s.

NOTES

ESC 8 (DECRC) n’est pas capable de revenir au jeu de caractĂšres prĂ©cĂ©dant le changement fait avec ESC %.

BOGUES

Dans Linux 2.0.23, CSI fonctionne mal, et les caractĂšres NUL ne sont pas ignorĂ©s dans les sĂ©quences d’échappement.

Certaines versions du noyau (aprĂšs Linux 2.0) interprĂštent les sĂ©quences de contrĂŽle sur 8 bits. Ces contrĂŽles « C1 » utilisent des codes entre 128 et 159 pour remplacer ESC [, ESC ] et d’autres initiateurs similaires de sĂ©quence de contrĂŽle sur deux octets. Il en existe des fragments dans les noyaux modernes (soit nĂ©gligĂ©s soit cassĂ©s par les changements pour la gestion UTF-8), mais l’implĂ©mentation est incomplĂšte et ne devrait ĂȘtre considĂ©rĂ©e comme fiable.

Les sĂ©quences « mode privé » Linux ne suivent pas les rĂšgles ECMA-48 des sĂ©quences de contrĂŽle en mode privĂ©. En particulier, celles terminant par ] n’utilisent pas un caractĂšre de terminaison standard. La sĂ©quence OSC (de rĂ©glage de la palette) pose un problĂšme plus important, puisque xterm (1) peut l’interprĂ©ter comme une sĂ©quence de contrĂŽle exigeant une fin de chaĂźne (« string terminator » — ST). Contrairement aux sĂ©quences setterm (1) qui seront ignorĂ©es (Ă©tant des sĂ©quences de contrĂŽle non autorisĂ©es), la sĂ©quence de palette donnera l’impression que xterm (1) s’est figĂ© (bien que presser la touche entrĂ©e rĂšgle ce problĂšme). Pour satisfaire les applications qui ont Ă©tĂ© codĂ©es en dur pour utiliser les sĂ©quences de contrĂŽle Linux, rĂ©glez la ressource brokenLinuxOSC de xterm (1) Ă  vrai.

Une ancienne version de ce document insinuait que Linux reconnaissait la séquence de contrÎle ECMA-48 destinée au texte invisible. Elle est ignorée.

VOIR AUSSI

ioctl_console (2), charsets (7)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Cédric Boutillier <cedric.boutillier@gmail.com>, Frédéric Hantrais <fhantrais@gmail.com> et Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .