Einführung
Meine Frage ergibt sich aus der Notwendigkeit, das Warum zu verstehen Ich habe jetzt (nach mehreren Versuchen) Terminal und tmux unterstützt 256 Farben und tput colors
sagt mir, es gibt nur 8 von ihnen.
Hintergrund
Fangen wir von vorne an.
Ich verwende ein Ubuntu Schachtel, Guake , tmux , Vim und ich liebe das Thema Solarized . Sie sahen ziemlich schrecklich aus, also entschied ich mich, die 256-Farben-Unterstützung zu aktivieren und ein bisschen herumzuspielen.
Mal sehen, was mit meinem Terminal passiert . tput colors
sagt, es gibt 8 Farben. Ich persönlich habe sie links auf lila gesetzt und natürlich rechts haben wir 2 verschiedene Blautöne. $TERM
sagt xterm
. (Um die farbigen ls
zu haben Ich eval
dies in meiner .bashrc
.)
Vim sieht auch gut aus, obwohl ich es mit 256
aufrufe Flagge in einer Umgebung, in der 256 Farben nicht sind unterstützt.
set t_Co=256
let g:solarized_termcolors=256
colorscheme solarized
Der einzige, der sich über den reduzierten Farbraum beschwert, ist tmux . Aufruf von tmux
liefert die „falschen“ erwarteten Ergebnisse.
Aber Aufruf von tmux
mit dem -2
flag lässt alles magisch gut funktionieren .
Jetzt verstehe ich nur noch -2
entspricht export TERM=screen-256color
(Quelle).
Guake verhält sich analog zu Terminal und beide antworten xterm
auf die Frage echo $TERM
.
Frage
Versteht im Grunde irgendjemand, warum alles funktioniert, auch wenn es nicht sollte?
- Bin ich sadistisch, dass ich mich beschwere, warum die Dinge funktionieren? Vielleicht.
- Gibt es einen besseren Grund? Sicher:Ich möchte das Erscheinungsbild anderer Ubuntu-Boxen in meinem Büro korrigieren und ich möchte verstehen, warum Dinge funktionieren oder nicht funktionieren.
Zusätzliche Experimente
Ausführen dieses Skripts (leicht modifiziert) auf meinem xterm
liefert folgendes Ergebnis:256 Farben, aber nur 16 werden korrekt angezeigt.
Wenn Sie dann das Profil des Terminals ändern, ändern sich auch diese 16 Farben.
Weitere Tests folgen.
Von links nach rechts, von oben nach unten haben wir Solarized Farbthema, dircolor
ansi-dark
und 256dark
, dann Standard (Tango ) Farbschema, dircolor
ansi-dark
und 256dark
.
Beobachtung :theoretisch die dircolor
ansi-dark
auf Solarized das Farbschema sollte genau dem dircolor
entsprechen 256dark
. Dies geschieht nicht eindeutig für die spezifischen aufgelisteten Dateien. Stattdessen passiert dies durchaus, wenn sich im Arbeitsverzeichnis Ordner befinden , Textdateien und symbolische Links . Fazit :Beim Codieren von 256dark
wurde nicht viel Aufmerksamkeit geschenkt Farben.
Vorläufige Schlussfolgerungen
xterm
unterstützt 256 Farben, trotz tput colors
sagt. Programme können auf ansi
verweisen Palette (vom Benutzer anpassbar) oder definieren Sie ihre Farben, indem Sie aus insgesamt 256 Farben auswählen.
Akzeptierte Antwort:
Es gibt einige Informationen zur 256-Farben-Unterstützung in der tmux-FAQ.
Verwandte:Liste der Shells, die das Schlüsselwort "local" zum Definieren lokaler Variablen unterstützen?Die Erkennung der Anzahl der vom Terminal unterstützten Farben ist aus historischen Gründen leider nicht einfach. Eine Erklärung finden Sie unter Prüfen, wie viele Farben mein Terminalemulator unterstützt. Das bedeutet, dass
- tmux kann nicht zuverlässig feststellen, ob das Terminal mehr als 8 Farben unterstützt;
- tmux kann der Anwendung nicht zuverlässig mitteilen, dass es mehr als 8 Farben unterstützt.
Wenn Sie sich in tmux befinden, ist das Terminal, mit dem Sie interagieren, tmux. Es unterstützt nicht alle Steuersequenzen von xterm. Insbesondere wird der OSC 4 ; …
Steuersequenz zum Abfragen oder Setzen von Farbwerten. Sie müssen das verwenden, während Sie es direkt in xterm ausführen, außerhalb von tmux.
Wenn Sie tmux -2
ausführen , dann beginnt tmux mit 256-Farben-Unterstützung, auch wenn es nicht denkt, dass Ihr Terminal 256 Farben unterstützt (was ziemlich häufig vorkommt).
Standardmäßig bewirbt sich tmux als screen
ohne 256-Farben-Unterstützung. Sie können den Wert von TERM
ändern in .tmux.conf
um die 256-Farben-Unterstützung anzuzeigen:
set -g default-terminal "screen-256color"
Sie können TERM=xterm-256color
verwenden oder TERM=screen-256color
auf Ubuntu. Diese Werte verursachen nur dann Probleme, wenn Sie sich bei einem Remote-Computer anmelden, der keinen termcap/termininfo-Eintrag für diese Namen hat. Sie können die Einträge in Ihr Home-Verzeichnis auf dem entfernten Rechner kopieren; dies funktioniert mit den meisten modernen terminfo-Implementierungen.
# 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/