Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/12/2013, à 15:54

JujuLand

Utilisation de la couleur dans une console (gnome-terminal, xterm, ..)

Cà fait un petit moment que je cherchais çà (vieux souvenir de batch sous windows, avec ansi.sys):

J'ai trouvé une doc ici http://web.archive.org/web/201301250000 … 256-notes/

Mais c'est particulièrement casse pied de rentrer ces séquences ...
Aussi, j'ai créé un shell que j'ai mis sous /usr/local/bin. Il crée simplement des variables plus faciles à manier.

Pour une utilisation plus aisée, il suffit de l'appeler depuis .profile en ajoutant cette ligne:

. colors

Voici le contenu de ce shell qui s'appelle évidemment colors

#!bin/bash

# Définition des couleurs
# Arrière-plan
export bBla='\033[40m'
export bRed='\033[41m'
export bGre='\033[42m'
export bYel='\033[43m'
export bBlu='\033[44m'
export bMag='\033[45m'
export bCya='\033[46m'
export bWhi='\033[47m'
# Avant-plan normal
export fBla='\033[30m'
export fRed='\033[31m'
export fGre='\033[32m'
export fYel='\033[33m'
export fBlu='\033[34m'
export fMag='\033[35m'
export fCya='\033[36m'
export fWhi='\033[37m'
# Avant-plan gras
export gBla='\033[1;30m'
export gRed='\033[1;31m'
export gGre='\033[1;32m'
export gYel='\033[1;33m'
export gBlu='\033[1;34m'
export gMag='\033[1;35m'
export gCya='\033[1;36m'
export gWhi='\033[1;37m'
# Retour aux couleurs par défaut (B/N)
export noColor='\033[0m'
# Déplacements sur l'écran:
export mho='\033[0H'
export men='\033[0F'
export mle='\033[0D'
export mri='\033[0C'
export mup='\033[0A'
export mdo='\033[0B'

De cette sorte, les variables sont connues dans tout le système, pas besoin de les exporter.

Pour les utiliser dans un shell, il suffit d'ajouter des options à echo

echo -e[n] "texte et séquences"

-e pour utiliser les séquences d'échappement
-n pour que echo ne génère pas de changement de ligne

Voilà, amusez-vous bien avec vos écrans de shell ...
Petit exemple tiré de la page citée précédemment, et agrémentée d'un exemple de déplacement de curseur qui ne figurait pas dans la version précédente. Mais çà avait été modifié avant d'avoir mis colors dispo pour utiliser des variables.
Seule contrainte des variables, elle ne peuvent pa être accolées avec du texte derrière, un espace doit au moins séparer la variable du texte.

Exemple : '$gRed test' fonctionnera,
alors que '$gRedtest' ne fonctionnera pas.
Peut-être qu'en replaçant par
                '\033[1;31mtest'
çà fonctionnerait.
L'idée m'a juste effleurée en ecivant ce post, et je n'ai pas essayé ...

#!/bin/bash
#
# Description:
#
#    Prints a color table of 8bg * 8fg * 2 states (regular/bold)
#
# Copyright:
#
#    (C) 2009 Wolfgang Frisch <xororand@unfoog.de>
#
# License:
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.

echo
echo Table for 16-color terminal escape sequences.
echo Replace ESC with \\033 in bash.
echo
echo -e "Backgrounde | Foreground colors"
echo -e "oh, la vilaine faute, appuyez entrée, et je vais la supprimer ..."
read
echo -en "\033[A\033[A\033[A\033[C\033[C\033[C\033[C\033[C\033[C\033[C\033[C\033[C\033[C | Foreground colors "
echo -e  "\033[B"
echo -e "Partie, la vilaine faute ... "
read
echo "---------------------------------------------------------------------"
for((bg=40;bg<=47;bg++)); do
	for((bold=0;bold<=1;bold++)) do
		echo -en "\033[0m"" ESC[${bg}m   | "
		for((fg=30;fg<=37;fg++)); do
			if [ $bold == "0" ]; then
				echo -en "\033[${bg}m\033[${fg}m [${fg}m  "
			else
				echo -en "\033[${bg}m\033[1;${fg}m [1;${fg}m"
			fi
		done
		echo -e "\033[0m"
	done
	echo "--------------------------------------------------------------------- "
done

A+


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne