Introduzione
La mia domanda nasce dalla necessità di capire perché Ho ora (dopo più prove) Terminale e tmux supporta 256 colori e tput colors
dicendomi che ce ne sono solo 8.
Sfondo
Cominciamo dall'inizio.
Sto usando un Ubuntu scatola, Guake , tmux , Vim e adoro il tema Solarized . Avevano un aspetto davvero orribile, quindi ho deciso di abilitare il supporto a 256 colori e giocare un po'.
Vediamo cosa succede per il mio Terminale . tput colors
dice che ci sono 8 colori. Personalmente li ho impostati sul viola, a sinistra, e ovviamente sulla destra abbiamo 2 diverse tonalità di blu. $TERM
dice xterm
. (Per avere le ls
colorate Io eval
questo nel mio .bashrc
.)
Vim sembra anche a posto, nonostante lo chiamo con il 256
bandiera in un ambiente in cui 256 colori non supportato.
set t_Co=256
let g:solarized_termcolors=256
colorscheme solarized
L'unico che si lamenta dello spazio colore ridotto è tmux . Chiamando tmux
fornisce i risultati "errati" previsti.
Ma chiamando tmux
con il -2
flag fa funzionare tutto bene, magicamente .
Ora l'unica cosa che ho capito è che -2
è equivalente a export TERM=screen-256color
(fonte).
Guak si comporta in modo analogo al Terminale ed entrambi rispondono xterm
alla domanda echo $TERM
.
Domanda
In sostanza, qualcuno capisce perché tutto funziona anche se non dovrebbe?
- Sono sadico di lamentarmi del perché le cose funzionano? Forse.
- C'è una ragione migliore? Certo:vorrei sistemare l'aspetto di altre scatole Ubuntu nel mio ufficio e vorrei capire perché le cose funzionano o non funzionano.
Ulteriori esperimenti
Esecuzione di questo script (leggermente modificato) sul mio xterm
fornisce il seguente risultato:256 colori, ma solo 16 vengono visualizzati correttamente.
Poi, cambiando il profilo del terminale, cambiano anche questi 16 colori.
Seguiranno altri test.
Da sinistra a destra, dall'alto in basso, abbiamo Solarized tema colore, dircolor
ansi-dark
e 256dark
, quindi predefinito (Tango ) combinazione di colori, dircolor
ansi-dark
e 256dark
.
Osservazione :in teoria il dircolor
ansi-dark
su Solarizzato la combinazione di colori dovrebbe corrispondere strettamente a dircolor
256dark
. Ciò non sta chiaramente accadendo per i file elencati specifici. Invece, questo accade quando nella directory di lavoro ci sono cartelle , file di testo e link simbolici . Conclusione :nessuna attenzione è stata prestata durante la codifica del 256dark
colori.
Conclusioni preliminari
xterm
supporta 256 colori, nonostante tput colors
dice. I programmi possono fare riferimento a ansi
tavolozza (personalizzabile dall'utente) o definirne i colori, scegliendo tra un totale di 256 colori.
Risposta accettata:
Ci sono alcune informazioni sul supporto a 256 colori nelle FAQ di tmux.
Correlati:elenco di shell che supportano la parola chiave `local` per la definizione di variabili locali?Il rilevamento del numero di colori supportati dal terminale purtroppo non è semplice, per ragioni storiche. Vedere Verifica di quanti colori supporta il mio emulatore di terminale per una spiegazione. Ciò significa che
- tmux non può determinare in modo affidabile se il terminale supporta più di 8 colori;
- tmux non può comunicare in modo affidabile all'applicazione che supporta più di 8 colori.
Quando sei in tmux, il terminale con cui stai interagendo è tmux. Non supporta tutte le sequenze di controllo di xterm. In particolare non supporta il OSC 4 ; …
sequenza di controllo per interrogare o impostare valori di colore. Devi usarlo durante l'esecuzione diretta in xterm, al di fuori di tmux.
Se esegui tmux -2
, quindi tmux inizia con il supporto a 256 colori, anche se non pensa che il tuo terminale supporti 256 colori (cosa piuttosto comune).
Per impostazione predefinita, tmux si pubblicizza come screen
senza supporto a 256 colori. Puoi modificare il valore di TERM
in .tmux.conf
per indicare il supporto a 256 colori:
set -g default-terminal "screen-256color"
Puoi usare TERM=xterm-256color
o TERM=screen-256color
su Ubuntu. Questi valori causeranno problemi solo se accedi a una macchina remota che non ha una voce termcap/terminfo per questi nomi. Puoi copiare le voci nella tua home directory sulla macchina remota; questo funziona con la maggior parte delle moderne implementazioni terminfo.
# From the Ubuntu machine to a machine that doesn't have *-256color terminfo entries
ssh somewhere.example.com mkdir -p .terminfo/s .terminfo/x
scp -p /lib/terminfo/s/screen-256color somewhere.example.com:.terminfo/s/
scp -p /lib/terminfo/x/xterm-256color somewhere.example.com:.terminfo/x/