<Précédent | Table des matières | Suivant>
Ajout de couleur
La plupart des programmes d'émulation de terminal répondent à certaines séquences de caractères non imprimables pour contrôler des éléments tels que les attributs des caractères (comme la couleur, le texte en gras et le texte clignotant redouté) et la position du curseur. Nous couvrirons un peu la position du curseur, mais nous examinerons d'abord la couleur.
Confusion terminale
Dans les temps anciens, lorsque les terminaux étaient connectés à des ordinateurs distants, il existait de nombreuses marques concurrentes de terminaux et ils fonctionnaient tous différemment. Ils avaient des claviers différents et ils avaient tous des manières différentes d'interpréter les informations de contrôle. Les systèmes Unix et de type Unix ont deux sous-systèmes assez complexes pour gérer le babel du contrôle de terminal (appelé termecap ainsi que infos sur le terme). Si vous regardez dans les recoins les plus profonds des paramètres de votre émulateur de terminal, vous pouvez trouver un paramètre pour le type d'émulation de terminal.
Dans un effort pour que les terminaux parlent une sorte de langage commun, l'American National Standards Institute (ANSI) a développé un ensemble standard de séquences de caractères pour contrôler les terminaux vidéo. Les anciens utilisateurs DOS se souviendront AN-SI.SYS fichier qui a été utilisé pour permettre l'interprétation de ces codes.
La couleur des caractères est contrôlée en envoyant à l'émulateur de terminal un Code d'échappement ANSI intégré dans le flux de caractères à afficher. Le code de contrôle ne « s'imprime » pas sur l'écran, il est plutôt interprété par le terminal comme une instruction. Comme nous l'avons vu dans le tableau ci-dessus, les \[ ainsi que \] les séquences sont utilisées pour encapsuler des caractères non imprimables. Un code d'échappement ANSI commence par un octal 033 (le code généré par la touche d'échappement), suivi d'un attribut de caractère facultatif, suivi d'une instruction. Par exemple, le code pour définir la couleur du texte sur normal (attribut = 0), le texte noir est :
\033[0;30m
Voici un tableau des couleurs de texte disponibles. Notez que les couleurs sont divisées en deux groupes, différenciés par l'application de l'attribut caractère gras (1) qui crée l'apparence de couleurs « claires » :
Tableau 13- 2 : Séquences d'échappement utilisées pour définir les couleurs du texte
Séquence | Couleur du texte | Séquence | Couleur du texte |
\033[0;30m | Noir | \033[1;30m | Gris foncé |
\033[0;31m | Rouge | \033[1;31m | Rouge clair |
\033[0;32m | Vert | \033[1;32m | Green Light |
\033[0;33m | Marron | \033[1;33m | Jaune |
\033[0;34m | Bleu | \033[1;34m | Bleu clair |
\033[0;35m | Violet | \033[1;35m | Violet clair |
Ajout de couleur
\033[0;36m | Cyan | \033[1;36m | Cyan clair |
\033[0;37m | Gris Clair | \033[1;37m | Blanc |
Essayons de faire une invite rouge. Nous allons insérer le code d'échappement au début :
$ PS1="\[\033[0;31m\]<\u@\h \W>\$ "
$
$ PS1="\[\033[0;31m\]<\u@\h \W>\$ "
$
Cela fonctionne, mais notez que tout le texte que nous tapons après l'invite est également rouge. Pour résoudre ce problème, nous allons ajouter un autre code d'échappement à la fin de l'invite qui indique à l'émulateur de terminal de revenir à la couleur précédente :
$ PS1="\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\] "
$
$ PS1="\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\] "
$
C'est mieux!
Il est également possible de définir la couleur d'arrière-plan du texte à l'aide des codes répertoriés ci-dessous. Les couleurs d'arrière-plan ne prennent pas en charge l'attribut bold.
Tableau 13-3 : Séquences d'échappement utilisées pour définir la couleur d'arrière-plan
Séquence | Couleur de fond | Séquence | Couleur de fond |
\033[0;40m | Noir | \033[0;44m | Bleu |
\033[0;41m | Rouge | \033[0;45m | Violet |
\033[0;42m | Vert | \033[0;46m | Cyan |
\033[0;43m | Marron | \033[0;47m | Gris Clair |
Nous pouvons créer une invite avec un fond rouge en appliquant une simple modification au premier code d'échappement :
$ PS1="\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\] "
<moi@linuxbox ~>$
$ PS1="\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\] "
<moi@linuxbox ~>$
Essayez les codes couleurs et voyez ce que vous pouvez créer !
Remarque : Outre les attributs de caractère normal (0) et gras (1), le texte peut également recevoir des attributs de soulignement (4), de clignotement (5) et d'inverse (7). Cependant, dans l'intérêt du bon goût, de nombreux émulateurs de terminaux refusent d'honorer l'attribut clignotant.