Comment faire: souligner, gras, italique, barré, couleur, arrière-plan et taille dans Gnome Terminal?

58

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

Couleur

background

font <(son mono si vous ne pouviez pas dire)

Taille

Akiva
la source
1
Et que veux-tu changer exactement? L'invite, le texte que vous entrez, le résultat de vos commandes?
Radu Rădeanu
exporter réellement PS1. Bien que je l’aimerais aussi pour l’écho de base.
Akiva
1
Si cela supportait "Faint", je changerais. :(
Jürgen A. Erhard

Réponses:

75

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

entrez la description de l'image ici

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

Sylvain Pineau
la source
J'en ai ajouté trois autres pour la taille, la police et l'arrière-plan. Sont-ils possibles?
Akiva
1
@ Akiva Vous pouvez facilement changer la couleur de fond (voir la section dédiée ). En ce qui concerne la taille, je ne pense pas que ce soit possible. Pour la police de caractères, le seul paramètre est une valeur globale gconf ( /apps/gnome-terminal/profiles/Default/font)
Sylvain Pineau le
1
@dashesy: ​​Selon en.wikipedia.org/wiki/ANSI_escape_code , 53 devrait faire le survol. Mais dans mon terminal ne fait rien.
Sylvain Pineau
1
@egmont Je me souviens que je voulais l'utiliser 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).
Dashesy
1
@ dashesy Merci, c'est en fait un cas d'utilisation plutôt cool :) Les progrès de Gnome-terminal sont suivis ici .
egmont
26

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

entrez la description de l'image ici

glenn jackman
la source
20

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[0mpour 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!

erreur de syntaxe
la source
16

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[mou \e[0mqui 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\\'

Voici une capture d'écran démontrant le résultat: Rendu dans gnome-terminal 3.28

Egmont
la source
2
Une capture d'écran du résultat serait ravissante pour ceux d'entre nous qui ne possèdent pas ces versions gnome-terminal / vte.
Marius Gedminas
@MariusGedminas Fait.
egmont
Réponse géniale! Merci d'avoir pris le temps de rassembler tout cela! Je me demande s'ils travaillent aussi sur iTerm2 (j'essaierai de vérifier cela moi-même sous peu ...)
Filbranden
2

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" }

FCA
la source