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/