Come fare: sottolineato, grassetto, corsivo, barrato, colore, sfondo e dimensioni nel Terminale Gnome?


58

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

Colore

background

font <(è mono se non lo sapevi)

taglia


1
E cosa vuole esattamente cambiare? Il prompt, il testo che inserisci, l'output dei tuoi comandi?
Radu Rădeanu,

esportare PS1 in realtà. Anche se mi piacerebbe anche per l'eco di base.
Akiva,

1
Se supportasse "Faint", cambierei. :(
Jürgen A. Erhard,

Risposte:


75

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

inserisci qui la descrizione dell'immagine

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


Ne ho aggiunti altri tre per dimensione, carattere e sfondo. Sono possibili?
Akiva,

1
@Akiva Puoi cambiare facilmente il colore di sfondo (Vedi la sezione dedicata ). Per quanto riguarda le dimensioni, non credo sia possibile. Per il font, l'unica impostazione è un valore gconf globale ( /apps/gnome-terminal/profiles/Default/font)
Sylvain Pineau,

1
@dashesy: ​​secondo en.wikipedia.org/wiki/ANSI_escape_code , 53 dovrebbe fare la riga. Ma nel mio terminale non fa nulla.
Sylvain Pineau,

1
@egmont Ricordo che volevo usarlo in 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).
dashesy,

1
@dashesy Grazie, in realtà è un caso d'uso piuttosto interessante :) I progressi di Gnome-terminal sono tracciati qui .
egmont,

26

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

inserisci qui la descrizione dell'immagine


20

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


16

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[mo \e[0mche 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\\'

Ecco uno screenshot che dimostra il risultato: Rendering in gnome-terminal 3.28


2
Uno screenshot del risultato sarebbe bello, per quelli di noi che non hanno queste versioni gnome-terminal / vte.
Marius Gedminas,

@MariusGedminas Fatto.
egmont,

Risposta fantastica! Grazie per aver dedicato del tempo a raccogliere tutti questi! Mi chiedo se funzioneranno anche su iTerm2 (proverò a controllarlo a breve ...)
filbranden

2

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.