Modifica del colore del testo e dello sfondo del terminale?


Risposte:


50

Su alcuni terminali compatibili XTerm / ANSI (come xterme gnome-terminal), è possibile impostare i colori utilizzando una tavolozza più grande della tavolozza predefinita 8/16 colori (ad esempio utilizzando una tavolozza 88 colori, 256 colori o 16777216 colori (RGB) ; entrambi xterme gnome-terminalsupportano sia la tavolozza 256 colori che la tavolozza 16777216 colori (RGB)); tenere presente che la shell potrebbe sovrascrivere questo (questo è il caso ad es zsh.

Ecco uno script per elencare i colori nella tavolozza a 256 colori insieme al loro codice colore ANSI in terminali compatibili XTerm / ANSI con un supporto per tavolozza a 256 colori:

#!/bin/bash
for((i=16; i<256; i++)); do
    printf "\e[48;5;${i}m%03d" $i;
    printf '\e[0m';
    [ ! $((($i - 15) % 6)) -eq 0 ] && printf ' ' || printf '\n'
done

screenshot1

immagine dello schermo

A seconda che si desideri applicare il colore al primo piano o allo sfondo, utilizzare un <fg_bg>valore di 38o 48(rispettivamente) nel comando seguente:

printf '\e[<fg_bg>;5;<ANSI_color_code>m'

Ad esempio, per impostare il colore di primo piano ( <fg_bg>= 38) su rosso ( <ANSI_color_code>= 196) e il colore di sfondo ( <fg_bg>= 48) su nero ( <ANSI_color_code>= 0):

printf '\e[38;5;196m Foreground color: red\n'
printf '\e[48;5;0m Background color: black\n'

screenshot3

È necessario ridisegnare il prompt utilizzando printf '\e[K'per applicare il colore di sfondo all'intera linea e per applicare il colore di primo piano al cursore:

screenshot4

La stessa cosa può essere realizzata utilizzando valori RGB anziché codici colore ANSI in un terminale compatibile; a seconda che si desideri applicare il colore al primo piano o allo sfondo, utilizzare un <fg_bg>valore di 38o 48(rispettivamente) nel comando seguente:

printf '\e[<fg_bg>;2;<R>;<G>;<B>m'

Ad esempio, per impostare il colore di primo piano ( <fg_bg>= 38) su rosso ( <R>= 255, <G>= 0, <B>= 0) e il colore di sfondo ( <fg_bg>= 48) su nero ( <R>= 0, <G>= 0, <B>= 0):

printf '\e[38;2;255;0;0m Foreground color: red\n'
printf '\e[48;2;0;0;0m Background color: black\n'

screenshot5

Ancora una volta, è necessario ridisegnare il prompt utilizzando printf '\e[K'per applicare il colore di sfondo all'intera linea e per applicare il colore di primo piano al cursore:

screenshot6

Utilizzando entrambi i metodi, è possibile utilizzare printf '\e[0m'per ripristinare tutti gli attributi:

screenshot7


1
Entrambi xterme gnome-terminalriconoscono le sequenze di escape di colore vero \ e [38/48; 2; R; G; Bm; tuttavia, xtermarrotonda il colore effettivo al più vicino nella sua tavolozza di 256 colori. gnome-terminalvisualizza il colore esatto indicato nella sequenza di escape.
egmont,

2
\ e [K è pericoloso; in alcuni emulatori (ad es. xterm) se il cursore si trova sul margine destro (visualizzato visivamente nella colonna più a destra, ma logicamente già oltre quello dato che un carattere era già stampato nella colonna più a destra), quest'ultima lettera viene rimossa. Vedi ad esempio bugzilla.gnome.org/show_bug.cgi?id=740789 o savannah.gnu.org/bugs/?36831 .
egmont,

Correggendo me stesso: se emetti \ e [K all'inizio della riga (all'inizio del prompt, piuttosto che alla fine di esso), ovviamente è sicuro. (Non funzionerà con il prompt o il comando multilinea.)
egmont,

@egmont Grazie per le informazioni utili, vedo che su GNOME Bugzilla contrassegnato come fisso, è questo il caso? Non posso provarlo proprio in questo momento, quindi lo farò più tardi per verificare se questo è ancora il caso (a meno che tu non risponda prima) e includa tali informazioni nella risposta.
kos,

Le nuove versioni di gnome-terminal non eliminano quel personaggio. Se questo è il comportamento corretto è discutibile. Dopotutto, gli emulatori grafici dei terminali emulano alcuni dispositivi antichi. Dovremmo emulare le loro cattive decisioni di progettazione (come fa xterm qui) o dovremmo scavalcare (come facciamo in gnome-terminal)? È una domanda difficile senza una singola risposta corretta.
egmont,

34

Informazioni contenute in questa pagina , esclusa la colonna di anteprima:

Le sequenze sono composte dal carattere Escape (spesso rappresentato da " ^[" o " <Esc>") seguito da alcuni altri caratteri: " ^[FCm" (dove si FCtrova uno dei numeri nell'elenco puntato di seguito).

In bash, il Esccodice può essere uno dei seguenti:

  1. \e
  2. \033 (Ottale)
  3. \x1B (Esadecimale)

Nota 1: la \e[0msequenza " " rimuove tutti gli attributi (formattazione e colori). Può essere una buona idea aggiungerlo alla fine di ogni testo colorato.

Nota 2: i colori di primo piano e di sfondo possono variare, a seconda della configurazione del terminale e non tutti i colori sono supportati .

Set / Reset

  • 0: Reimposta / rimuove tutti gli attributi modificatore, primo piano e sfondo: echo -e "\e[0mNormal Text"
  • 1: Grassetto / luminoso: echo -e "Normal \e[1mBold"
  • 2: Dim: echo -e "Normal \e[2mDim"
  • 4: Sottolineato: echo -e "Normal \e[4mUnderlined"
  • 5: Lampeggiante (non funziona nella maggior parte dei terminali tranne XTerm): echo -e "Normal \e[5mBlink"
  • 7: Inverti / Inverti: echo -e "Normal \e[7minverted"
  • 8: Nascosto (utile per informazioni sensibili): echo -e "Normal \e[8mHidden Input"
  • 21: Ripristina / Rimuovi grassetto / luminoso: echo -e "Normal \e[1mBold \e[21mNormal"
  • 22: Ripristina / Rimuovi dim: echo -e "Normal \e[2mDim \e[22mNormal"
  • 24: Reimposta / Rimuovi sottolineatura: echo -e "Normal \e[4mUnderlined \e[24mNormal"
  • 25: Ripristina / Rimuovi lampeggio: echo -e "Normal \e[5mBlink \e[25mNormal"
  • 27: Ripristina / Rimuovi inversione / inversione: echo -e "Normal \e[7minverted \e[27mNormal"
  • 28: Ripristina / Rimuovi nascosto: echo -e "Normal \e[8mHidden \e[28mNormal"

Primo piano

  • 39: Impostazione predefinita (generalmente verde, bianco o grigio chiaro): echo -e "Default \e[39mDefault"
  • 30: Nero: echo -e "Default \e[30mBlack"(meglio in combinazione con un colore di sfondo: echo -e "Default \e[30;107mBlack on white")
  • 31: Rosso (non utilizzare con sfondo verde)
  • 32: Verde
  • 33: Giallo
  • 34: Blu
  • 35: Magenta / Viola
  • 36: Ciano
  • 37: Grigio chiaro
  • 90: Grigio scuro
  • 91: Rosso chiaro
  • 92: Verde chiaro
  • 93: Giallo chiaro
  • 94: Azzurro
  • 95: Magenta chiaro / rosa
  • 96: Ciano chiaro
  • 97: Bianca

sfondo

  • 49: Colore di sfondo predefinito (di solito nero o blu)
  • 40: Nero
  • 41: Rosso
  • 42: Verde
  • 43: Giallo
  • 44: Blu
  • 45: Magenta / Viola
  • 46: Ciano
  • 47: Grigio chiaro (non utilizzare con il primo piano bianco)
  • 100: Grigio scuro (non utilizzare con il primo piano nero)
  • 101: Rosso chiaro
  • 102: Verde chiaro (non utilizzare con il primo piano bianco)
  • 103: Giallo chiaro (non utilizzare con il primo piano bianco)
  • 104: Azzurro (non utilizzare con il primo piano giallo chiaro)
  • 105: Magenta chiaro / rosa (non utilizzare con il primo piano chiaro)
  • 106: Ciano chiaro (non utilizzare con il primo piano bianco)
  • 107: Bianco (non utilizzare con il primo piano chiaro)

Per impostare contemporaneamente i colori di primo piano e di sfondo, usa il modulo echo -e "\e[S;FG;BGm". Ad esempio: echo -e "\e[1;97;41m"(grassetto primo piano bianco su sfondo rosso)

Per 256 opzioni di colore, vedere la pagina di origine.


30

Cambia i colori su base accidentale

Se si intende cambiare i colori su base accidentale :

Puoi usare il comando setterm :

setterm -term linux -back <background_colour> -fore <text_color> -clear

dai colori, puoi scegliere tra (sia in primo piano che in fondo):

black|blue|green|cyan|red|magenta|yellow|white|default

per più opzioni:

setterm -help

Modifica le impostazioni del tuo profilo (colore)

In 14.04, non ho trovato un'opzione da utilizzare dconfper impostare i colori o il terminale. Puoi comunque usaregconftool

  • Devi prima ottenere il nome del tuo profilo:

    gconftool-2 --get /apps/gnome-terminal/global/profile_list
    
  • Quindi, per impostare i colori del testo del tuo profilo:

    gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/foreground_color" --type string "#FFFFFF"
    

    ad esempio per impostare il colore del testo su bianco

    Lo stesso con il colore di sfondo:

    gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string "#000000"
    

    ad esempio per impostare il colore di sfondo sul nero

In alternativa, per impostare il nome dei colori, puoi semplicemente usare whiteo green, dalla stessa tavolozza del comando setterm, ad es .:

gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string black

1
Questi dovrebbero essere doppi trattini nel comando setterm iniziale.
user1770201,

Ha funzionato il 14.04, ma non il 16.04 (beta; non sono sicuro se questo sia il motivo) ... Comunque, ha dconf write /org/gnome/terminal/legacy/profiles:/:<profile_id>/background-color "'rgb(0,0,0)'"fatto il trucco.
Janaka Bandara,

Non funziona su Ubuntu 1704, sembra male
Wax Cage il

1
gconftool-2(per Ubuntu 14.04 e forse alcune versioni successive) dconfo gsettingssu versioni più recenti di Ubuntu cambiano le impostazioni di gnome-terminal e hanno effetto immediato su tutte le schede e le finestre dello stesso profilo. Non credo che OP stesse cercando questo comportamento.
egmont,

5

I vari codici colore utilizzati per ottenere stampe colorate possono anche essere utilizzati per ottenere sfondi colorati :

40  black
41  red
42  green
43  yellow
44  blue
45  magenta
46  cyan
47  white

Pertanto, il seguente comando trasforma il mio sfondo in rosso:

$ echo -e '\e[0;41m'

A seconda della shell, dell'emulatore di terminale, ecc., Potrebbe non essere necessario -e.


3

Vedi la risposta di kos per commutare il primo piano o lo sfondo su un particolare colore della tavolozza, o persino un colore RGB diretto in alcuni terminali. L'effetto di tale sequenza dura fino a quando non viene selezionato un colore diverso (o viene ripristinato al valore predefinito).

Un altro approccio, supportato da alcuni emulatori di terminale, è ridefinire i valori esatti RGB dei colori di primo piano e di sfondo predefiniti del terminale usando le sequenze di escape OSC 10/11:

echo -ne '\e]10;#123456\e\\'  # set default foreground to #123456
echo -ne '\e]11;#abcdef\e\\'  # set default background to #abcdef

È probabile che ciò duri molto più a lungo (fino a quando non viene ignorato da un altro OSC 10/11 o ripristinato tramite OSC 110/111), ma a differenza dell'approccio dconf, ciò influisce ancora solo sul terminale corrente.

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.