Comment faire: souligner, gras, italique, barré et couleur dans Gnome Terminal?
Audacieux
Italique
souligner
st̶r̶i̶k̶e̶ ̶i̶t̶ ̶l̶i̶k̶̶e i̶t̶s̶ ̶h̶o̶t
background
font
<(son mono si vous ne pouviez pas dire)
Comment faire: souligner, gras, italique, barré et couleur dans Gnome Terminal?
Audacieux
Italique
souligner
st̶r̶i̶k̶e̶ ̶i̶t̶ ̶l̶i̶k̶̶e i̶t̶s̶ ̶h̶o̶t
background
font
<(son mono si vous ne pouviez pas dire)
Réponses:
Les terminaux et les émulateurs de terminaux ANSI / VT100 ne sont pas seulement capables d’afficher du texte en noir et blanc; ils peuvent afficher des couleurs et des textes formatés grâce à des séquences d'échappement. Ces séquences sont composées du caractère Escape (souvent représenté par "^ [" ou "Esc") suivi de quelques autres caractères: "Esc [FormatCodem".
Dans Bash, le caractère peut être obtenu avec les syntaxes suivantes:
\e
\033
\x1B
Les commandes (pour un copier-coller facile):
echo -e "\e[1mbold\e[0m"
echo -e "\e[3mitalic\e[0m"
echo -e "\e[4munderline\e[0m"
echo -e "\e[9mstrikethrough\e[0m"
echo -e "\e[31mHello World\e[0m"
echo -e "\x1B[31mHello World\e[0m"
Source (y compris tous les types de codes de couleur de premier plan / d’arrière-plan): http://misc.flogisoft.com/bash/tip_colors_and_formatting
/apps/gnome-terminal/profiles/Default/font
)
PS1
(dans gnome-terminal en fait) parce que les mots soulignés se confondaient avec le texte en dessous, ce qui rendait la lecture plus difficile, et bien sûr, les traits barrés semblaient être faux. Avoir une ligne ici aiderait à repérer les commandes précédentes lors du défilement (ainsi que la couleur).
Pour prolonger la réponse de Sylvain, quelques fonctions d'assistance:
ansi() { echo -e "\e[${1}m${*:2}\e[0m"; }
bold() { ansi 1 "$@"; }
italic() { ansi 3 "$@"; }
underline() { ansi 4 "$@"; }
strikethrough() { ansi 9 "$@"; }
red() { ansi 31 "$@"; }
ensuite
Quelque chose n'a pas encore été couvert est la combinaison de deux ou trois paramètres, par exemple gras et souligné , dans une couleur prédéfinie. Ceci est réalisé par une syntaxe à 3 voies, par exemple:
~$ printf "\e[3;4;33mthis is a test\n\e[0m"
"Ceci est un test" sera imprimé en jaune ( 33m
), italique ( 3m
) ET souligné ( 4m
).
Notez qu'il n'est pas nécessaire de répéter \e[
chaque fois.
Notez aussi que (comme Sylvain) j'ai aussi ajouté un \e[0m
pour réinitialiser les réglages à chaque fois, car sinon la couleur jaune et le style de police resteraient actifs dans le terminal! Inutile de dire que vous devez absolument faire attention à cela pour qu'ils soient réinitialisés dans les scripts, car les utilisateurs qui utilisent vos scripts risquent de ne pas l'apprécier si votre script modifie de manière permanente leurs paramètres de couleur + style dans le terminal!
GNOME Terminal 3.28 (VTE 0.52), qui a fait ses débuts dans Ubuntu 18.04 LTS, ajoute un support pour quelques autres styles, notamment des soulignements bouclés et colorés comme dans Kitty, des lignes comme dans Konsole, et enfin l'attribut de blink tant apprécié ou très détesté de tous.
Ceux-ci fonctionnent également automatiquement dans tout autre émulateur de terminal basé sur VTE (par exemple, Tilix, Terminator, Xfce4-terminal, Guake, etc.), étant donné que VTE est au moins à la version 0.52.
Voici une liste illustrant les séquences d'échappement standard, ainsi que les ajouts du terminal GNOME (VTE). Notez que pour chaque séquence d'ouverture, je montre également la séquence de fermeture de cette propriété uniquement, plutôt que le générique \e[m
ou \e[0m
qui désactive tous les modes spéciaux.
echo -e '\e[1mbold\e[22m'
echo -e '\e[2mdim\e[22m'
echo -e '\e[3mitalic\e[23m'
echo -e '\e[4munderline\e[24m'
echo -e '\e[4:1mthis is also underline (new in 0.52)\e[4:0m'
echo -e '\e[21mdouble underline (new in 0.52)\e[24m'
echo -e '\e[4:2mthis is also double underline (new in 0.52)\e[4:0m'
echo -e '\e[4:3mcurly underline (new in 0.52)\e[4:0m'
echo -e '\e[5mblink (new in 0.52)\e[25m'
echo -e '\e[7mreverse\e[27m'
echo -e '\e[8minvisible\e[28m <- invisible (but copy-pasteable)'
echo -e '\e[9mstrikethrough\e[29m'
echo -e '\e[53moverline (new in 0.52)\e[55m'
echo -e '\e[31mred\e[39m'
echo -e '\e[91mbright red\e[39m'
echo -e '\e[38:5:42m256-color, de jure standard (ITU-T T.416)\e[39m'
echo -e '\e[38;5;42m256-color, de facto standard (commonly used)\e[39m'
echo -e '\e[38:2::240:143:104mtruecolor, de jure standard (ITU-T T.416) (new in 0.52)\e[39m'
echo -e '\e[38:2:240:143:104mtruecolor, rarely used incorrect format (might be removed at some point)\e[39m'
echo -e '\e[38;2;240;143;104mtruecolor, de facto standard (commonly used)\e[39m'
echo -e '\e[46mcyan background\e[49m'
echo -e '\e[106mbright cyan background\e[49m'
echo -e '\e[48:5:42m256-color background, de jure standard (ITU-T T.416)\e[49m'
echo -e '\e[48;5;42m256-color background, de facto standard (commonly used)\e[49m'
echo -e '\e[48:2::240:143:104mtruecolor background, de jure standard (ITU-T T.416) (new in 0.52)\e[49m'
echo -e '\e[48:2:240:143:104mtruecolor background, rarely used incorrect format (might be removed at some point)\e[49m'
echo -e '\e[48;2;240;143;104mtruecolor background, de facto standard (commonly used)\e[49m'
echo -e '\e[21m\e[58:5:42m256-color underline (new in 0.52)\e[59m\e[24m'
echo -e '\e[21m\e[58;5;42m256-color underline (new in 0.52)\e[59m\e[24m'
echo -e '\e[4:3m\e[58:2::240:143:104mtruecolor underline (new in 0.52) (*)\e[59m\e[4:0m'
echo -e '\e[4:3m\e[58:2:240:143:104mtruecolor underline (new in 0.52) (might be removed at some point) (*)\e[59m\e[4:0m'
echo -e '\e[4:3m\e[58;2;240;143;104mtruecolor underline (new in 0.52) (*)\e[59m\e[4:0m'
(*) Les valeurs truecolor du soulignement sont légèrement approximées.
Et un peu étrange qui ne rentre pas dans cette image, car il s’agit plus d’une fonctionnalité que d’un style, mais il vaut probablement la peine de le mentionner ici, est le support des hyperliens co-conçu avec iTerm2, disponible depuis le terminal GNOME 3.26 (VTE 0.50). :
echo -e '\e]8;;http://askubuntu.com\e\\hyperlink\e]8;;\e\\'
Remplacez ces séquences codées en dur par:
tput smul # set underline
tput rmul # remove underline
tput smso # set bold on
tput rmso # remove bold
tput setaf 1 #red
tput setaf 2 #green
...
tput cup 0 0 # move to pos 0,0
Reportez-vous à "man terminfo" et "man tput" pour une description complète de ces commandes.
Exemple :
function f_help
{
c_green=$(tput setaf 2 2>/dev/null)
c_reset=$(tput sgr0 2>/dev/null)
c_bold=$(tput smso 2>/dev/null)
echo "${c_bold}DESCRIPTION${c_reset} : .... ${c_green}My green text${c_reset}My plain text"
}