Come fare: sottolineato, grassetto, corsivo, barrato e colore nel Terminale Gnome?
Grassetto
Corsivo
sottolineare
s̶t̶r̶i̶k̶e̶ ̶i̶t̶ ̶l̶i̶k̶̶e̶ ̶i̶t̶s̶ ̶h̶o̶t
background
font
<(è mono se non lo sapevi)
Come fare: sottolineato, grassetto, corsivo, barrato e colore nel Terminale Gnome?
Grassetto
Corsivo
sottolineare
s̶t̶r̶i̶k̶e̶ ̶i̶t̶ ̶l̶i̶k̶̶e̶ ̶i̶t̶s̶ ̶h̶o̶t
background
font
<(è mono se non lo sapevi)
Risposte:
I terminali ANSI / VT100 e gli emulatori di terminali non sono solo in grado di visualizzare testo in bianco e nero; possono visualizzare colori e testi formattati grazie alle sequenze di escape. Queste sequenze sono composte dal carattere Escape (spesso rappresentato da "^ [" o "Esc") seguito da altri caratteri: "Esc [FormatCodem".
In Bash, il personaggio può essere ottenuto con le seguenti sintassi:
\e
\033
\x1B
I comandi (per un facile copia-incolla):
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"
Sorgente (inclusi tutti i tipi di codici colore di primo piano / sfondo): http://misc.flogisoft.com/bash/tip_colors_and_formatting
/apps/gnome-terminal/profiles/Default/font
)
PS1
(in gnome-terminal in realtà) perché sottolinea un po 'di tipo nel testo sottostante che rende più difficile la lettura, e ovviamente il barrato sembrava sbagliato. Avere una linea lì aiuterebbe a individuare i comandi precedenti quando si scorre verso l'alto (così fa il colore).
Per estendere la risposta di Sylvain, alcune funzioni di supporto:
ansi() { echo -e "\e[${1}m${*:2}\e[0m"; }
bold() { ansi 1 "$@"; }
italic() { ansi 3 "$@"; }
underline() { ansi 4 "$@"; }
strikethrough() { ansi 9 "$@"; }
red() { ansi 31 "$@"; }
Poi
Qualcosa che non è stato ancora trattato è la combinazione di due o tre parametri, ad esempio grassetto e sottolineato , in un colore predefinito. Ciò si ottiene con una sintassi a 3 vie, ad esempio:
~$ printf "\e[3;4;33mthis is a test\n\e[0m"
causerà la stampa di "this is a test" in giallo ( 33m
), corsivo ( 3m
) E sottolineato ( 4m
).
Si noti che è non è necessario ripetere la \e[
ogni volta.
Nota anche che (come Sylvain) ho anche aggiunto una \e[0m
per ripristinare le impostazioni ogni volta, perché altrimenti il colore giallo e lo stile del carattere rimarranno attivi nel terminale! Inutile dire che devi assolutamente fare attenzione a questi per essere ripristinati negli script, perché agli utenti che usano i tuoi script potrebbe non piacere se lo script modifica permanentemente le impostazioni di colore + stile nel terminale!
Il Terminale 3.28 di GNOME (VTE 0.52), debuttando in Ubuntu 18.04 LTS, aggiunge il supporto per alcuni altri stili tra cui sottolineature ricche e colorate come visto in Kitty, sottolineatura come visto in Konsole e infine l'attributo di battito di ciglia tanto amato o odiato da tutti.
Funzionano automaticamente anche in qualsiasi altro emulatore di terminale basato su VTE (ad es. Tilix, Terminator, Xfce4-terminal, Guake ecc.), Dato che VTE è almeno alla versione 0.52.
Ecco un elenco che mostra le sequenze di escape standard, oltre alle aggiunte di GNOME Terminal (VTE). Nota che per ogni sequenza di apertura sto mostrando anche solo la sequenza di chiusura di quella proprietà, piuttosto che quella generica \e[m
o \e[0m
che disabilita tutte le modalità speciali.
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'
(*) I valori Truecolor per le sottolineature sono leggermente approssimati.
E un po 'strano che non si adatta perfettamente a questa immagine, poiché è più una funzionalità che uno stile, ma probabilmente vale la pena menzionare qui, è il supporto per i collegamenti ipertestuali co-progettato con iTerm2, disponibile dal Terminale GNOME 3.26 (VTE 0.50) :
echo -e '\e]8;;http://askubuntu.com\e\\hyperlink\e]8;;\e\\'
Sostituisci queste sequenze codificate con:
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
Fare riferimento a "man terminfo" e "man tput" per le descrizioni complete di questi comandi.
Esempio :
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"
}