Einführung
Meine Frage ergibt sich aus der Notwendigkeit zu verstehen, warum ich jetzt (nach mehreren Versuchen) Terminal und tmux habe, die 256 Farben unterstützen und tput colors
mir sagen, dass es nur 8 von ihnen gibt.
Hintergrund
Fangen wir von vorne an.
Ich benutze eine Ubuntu- Box, Guake , tmux , Vim und ich liebe das Thema Solarized . Sie sahen ziemlich schrecklich aus, deshalb habe ich beschlossen, 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 haben wir rechts zwei verschiedene Blautöne. $TERM
sagt xterm
. (Um das farbige ls
ich eval
dies in meinem zu haben .bashrc
.)
Vim sieht auch gut aus, obwohl ich es mit der 256
Flagge in einer Umgebung nenne, in der 256 Farben nicht unterstützt werden.
set t_Co=256
let g:solarized_termcolors=256
colorscheme solarized
Der einzige Typ, der sich über den reduzierten Farbraum beschwert, ist tmux . Das Aufrufen tmux
liefert die "falschen" erwarteten Ergebnisse.
Aber wenn man tmux
mit der -2
Flagge ruft, funktioniert alles auf magische Weise .
Jetzt verstehe ich nur noch, dass -2
es export TERM=screen-256color
( Quelle ) entspricht.
Guake verhält sich analog zu Terminal und beide beantworten xterm
die Frage echo $TERM
.
Frage
Versteht jemand im Grunde, 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? Klar: Ich möchte das Erscheinungsbild anderer Ubuntu-Boxen in meinem Büro korrigieren und möchte verstehen, warum Dinge funktionieren oder nicht funktionieren.
Zusätzliche Experimente
Das Ausführen dieses Skripts (leicht modifiziert) auf meinem xterm
Computer führt zu folgendem Ergebnis: 256 Farben, aber nur 16 werden korrekt angezeigt.
Wenn Sie das Profil des Terminals ändern, ändern sich auch diese 16 Farben.
Weitere Tests folgen.
Von links nach rechts, von oben nach unten, haben wir Solarisation Farbthema, dircolor
ansi-dark
und 256dark
dann default ( Tango ) Farbschema, dircolor
ansi-dark
und 256dark
.
Beobachtung : Theoretisch sollte das Farbschema dircolor
ansi-dark
bei Solarisation genau mit dem bei Solarisation übereinstimmen dircolor
256dark
. Dies ist bei den angegebenen Dateien nicht eindeutig der Fall. Stattdessen passiert dies, wenn sich im Arbeitsverzeichnis Ordner , Textdateien und symbolische Links befinden . Fazit : Beim Kodieren der 256dark
Farben wurde nicht viel beachtet .
Vorläufige Schlussfolgerungen
xterm
unterstützt trotz allem 256 Farben tput colors
. Programme können auf die ansi
Palette verweisen (vom Benutzer anpassbar) oder ihre Farben definieren und aus insgesamt 256 Farben auswählen.
tput colors
ein unzuverlässiger Test ist. Könnten Sie meine vorläufigen Schlussfolgerungen überprüfen ?tput colors
nur ein Wert zurückgegeben werden kann und in Terminals, die 2,8,16,88 oder 256 Farben unterstützen, nur der erste Wert (in Ihrem Fall 8) zurückgegeben wird. Verwenden Sie das Skript aus meinem letzten Kommentar, um den wahren Wert zu ermitteln. Was bringt das?Antworten:
Informationen zur 256-Farben-Unterstützung finden Sie in den häufig gestellten Fragen zu tmux .
Aus historischen Gründen ist es leider nicht einfach, die Anzahl der vom Terminal unterstützten Farben zu ermitteln. Eine Erklärung finden Sie unter Überprüfen, wie viele Farben mein Terminal-Emulator unterstützt . Das bedeutet, dass
Wenn Sie sich in tmux befinden, ist das Terminal, mit dem Sie interagieren, tmux. Es werden nicht alle Steuersequenzen von xterm unterstützt. Insbesondere wird die
OSC 4 ; …
Steuerungssequenz zum Abfragen oder Festlegen von Farbwerten nicht unterstützt . Sie müssen dies verwenden, während Sie direkt in xterm außerhalb von tmux laufen.Wenn Sie ausführen
tmux -2
, startet tmux mit 256-Farben-Unterstützung, auch wenn es nicht der Meinung ist, dass Ihr Terminal 256 Farben unterstützt (was ziemlich häufig vorkommt).Standardmäßig wirbt tmux wie
screen
ohne 256-Farben-Unterstützung. Sie können den Wert vonTERM
in ändern, um die.tmux.conf
Unterstützung von 256 Farben anzugeben:Sie können
TERM=xterm-256color
oderTERM=screen-256color
auf Ubuntu verwenden. Diese Werte verursachen nur dann Probleme, wenn Sie sich bei einem Remotecomputer anmelden, auf dem für diese Namen kein Eintrag termcap / terminfo vorhanden ist. Sie können die Einträge in Ihr Home-Verzeichnis auf dem Remote-Computer kopieren. Dies funktioniert mit den meisten modernen Terminfo-Implementierungen.quelle
xterm
ich 256 Farben sehen konnte, obwohltput colors
ich 8 sagte. Ich denke, die Antwort auf diese spezielle Frage wurde von @terdon in seinen Kommentaren zur Frage selbst angesprochen .set -g default_terminal "screen-256color"
Befehl nicht aus, um die 256 Farben in tmux zu aktivieren . Sie müssenalias tmux='export TERM=screen-256color; /usr/bin/tmux'
( Referenz ).tmux -2
wie in meinem vorherigen Absatz beschrieben ausgeführt werden, wenn tmux nicht der Meinung ist, dass Ihr aktuelles Terminal 256 Farben unterstützt, ist diesalias tmux='tmux -2'
sinnvoll.TERM=xterm-256color tmux
, was im Gegensatz zu vernünftig istTERM=screen-256color tmux
.tmux -2
ist überlegen, weil es funktioniert, auch wennscreen-256color
es nicht in der lokalen terminfo-Datenbank enthalten ist.Ich bin beeindruckt, wie reichhaltig und detailliert die Antworten (und die Frage!) Sind. Während sie wertvolle Informationen und Lösungen zu den von Ihnen erwähnten Werkzeugen bieten, geben sie nur sehr wenig Aufschluss darüber, was zum Teufel los ist und vor allem, warum die Dinge bei einigen Werkzeugen (etwas) funktionieren, wenn sie angeblich nicht funktionieren sollten.
Hier sind einige Einblicke in Ihre grundlegenden Fragen:
Was ein Terminal unterstützt und was es meldet, sind verschiedene Dinge. Gnom Terminal ist zum Beispiel fähig 256 Farben darstellen kann , aber es gibt selbst in die Umgebung (über
$TERM
variable) alsxterm
Emulator (8 Farben).Tools wie
tput
folgen, was auch immer eingestelltTERM
ist:tput colors
Möglicherweise wird 8 gedruckt, wohingegenenv TERM=xterm-256color tput colors
256 gedruckt werden, unabhängig davon, ob Ihr Terminal solche Funktionen tatsächlich unterstützt .vim
EbenfallsTERM
standardmäßig folgen , aber wie Sie angegeben haben, 256 Farben zu verwenden (über die Flagge oder dieset t_Co=256
), werden 256 Farben verwendet. Und es funktioniert, weil Ihr Terminal das tatsächlich unterstützt .tmux
Wie Gnome Terminal meldet sich auch Gnome Terminal standardmäßig als 8-Farben-Terminal. Aber im Gegensatz zu Gnome - Terminal, es nur ermöglicht 256-Farben - Fähigkeit , wenn Sie die Verwendung-2
Flagge, die auch es macht melden sich alsxterm-256color
kompatibel Emulator.xterm
Unterstützt , wie in der Terminal-Emulator-Software für den X11 , mit Sicherheit 256 Farben. Aberxterm
wie inTERM=xterm
ist ein 8-Farben "Standard". Es bedeutet die Fähigkeiten des Originalsxterm
. Als es vor langer Zeit auf 256 Farben aufgerüstet wurde, prägte es denxterm-256color
Begriff dafür.Es kommt also darauf an:
Welche Funktionen Ihr Terminal tatsächlich unterstützt (und welche dazu aktiviert sind)
Wie es solche Fähigkeiten an die Umgebung über meldet
TERM
Wie Werkzeuge
TERM
sich entsprechend interpretieren und anpassen.Wie Sie aus den obigen Ausführungen
export TERM=xterm-256color
~/.bashrc
ableiten können, vermeiden Sie es, Ihre und solche Skripte einzuschlagen . Da diese Dateien unabhängig vom verwendeten Terminal ausgeführt werden, werden alle Ihre Terminals, einschließlich Remoteverbindungen von Windows mit Putty, Linux-Konsolenterminal usw., als xterm-256color-kompatibel gemeldet. Das mag für einige zutreffen, aber sicherlich nicht für alle. Zum Beispiel funktioniertgetty
die Linux-Konsole, auf die Sie zugreifenCTRL+ALT+1..6
, nicht.Terminals sollten sich selbst als den "Standard" ausweisen, mit dem sie am kompatibelsten sind. Wenn Sie wissen, dass sie 256 Farben verarbeiten können, konfigurieren Sie sie so, dass sie als solche werben.
Last but not least ist eine erstaunliche Lektüre über
TERM
und 256 Farben:http://blog.sanctum.geek.nz/term-strings/
http://blog.sanctum.geek.nz/256-colour-terminals/
quelle
Ich werde eine ergänzende Antwort geben, die sich nur auf Ihre zusätzlichen Experimente bezieht, sofern sie sich auf die solarisierten Verzeichnisfarben beziehen .
Konfiguration
Wir haben die gleiche Farbausgabe aus dem Testskript. Der einzige Unterschied ist, dass ich
lxterminal
auf Openbox mit slim , xcompmgr und ohne DM gearbeitet habe. Daher kann ich eine benutzerdefinierte Palette nicht einfach so einstellen wie Sie, da dieser Terminalemulator diese Einstellungen in einer GUI nicht anbietet und es kein spezifisches Thema dafür gibt (diese sind nur für einige Terminalemulatoren vorhanden). Ich benutze also nur einige transluzente, nicht dekorierte Terminals und dieses Blau als Vordergrundfarbe mit einem blauen Gentoo- Hintergrund. Da ich die Ansi- Versionen der Farbdateien nicht verwenden kann , habe ich mich ausschließlich darauf konzentriert, Ergebnisse zu erzielen, z. B. mitdircolors.256dark
der "verschlechterten" einfachen Version.Ich habe die folgende relevante Konfiguration und die Schriftart inconsolata medium verwendet:
Dircolors
Das Bild unten zeigt, was mit diesen Einstellungen sowohl innerhalb als auch außerhalb von tmux passiert . Das erste Drittel links zeigt undekorierte Endfenster , die vertikal gestapelt sind (3). Auf der rechten Seite haben Sie eine tmux Montage die gleichen identische Programme zeigen (3) Ich habe auch ein enthalten solari
xterm
1 zeigt nano mit der .Xresources Datei in der im Lieferumfang enthaltenen Komplettpaket (und Abtasten mitxrdb -load ~/.Xresources
):Klicken Sie mit der rechten Maustaste auf das Bild, um es in voller Auflösung anzuzeigen
Das erste Terminal in der oberen linken Ecke zeigt die Standard-Verzeichnisfarben. Gleich darunter befindet sich die degradierte solarisierte Version. Abgesehen von dem rosa auf blauem Hintergrund für
.c
Dateien, die ich hinzugefügt habe, ist es identisch mit dem, was hiervon erwartet wird (siehe Abbildung unten als Referenz). Im Vergleich zu den Standardeinstellungen baut es weiter auf den erweiterten Attributen auf, dh fett / hell / rückwärts usw., und die Farben sind offensichtlich unterschiedlich. Die Standardfarbzuweisung für.txt
Dateien in vielen Distributionen ist grün, sollte aber stattdessen grau sein, wenn sie solarisiert sind . Eine Ansi- Datei, die eine TXT-Datei als grün darstellt, wird entweder nicht richtig oder überhaupt nicht dargestellt. Die Ergebnisse auf der rechten Seite, die Sie gezeigt haben, sind die richtigen (256 dunkel) in Bezug auf die folgende Referenz:solarisierte "degradierte" dircolors Referenzkarte
Beobachtungen
Mit der Konfiguration, die ich verwendet habe, erscheinen die Ergebnisse innerhalb und außerhalb von tmux identisch (ich habe Kommentare (#) in vi umgekehrt, aber ansonsten verhält sich das Plugin wie es sollte und der Multiplexer hat keinen Einfluss darauf). Schriftarten spielen eine große Rolle bei der Definition solarisierter Features, und eine gute Schriftart ist erforderlich, um das Erlebnis zu maximieren. Die solarisierten Verzeichnisfarben unter Verwendung der 256dark- Datei stimmen mit der Referenz überein und erfordern keine spezielle Terminalemulatorkonfiguration.
Fazit
Tatsächlich unterscheidet sich das Ansi- Rendering der Verzeichnisfarben nur vollständig von dem des degradierten solarisierten (256dark). So sehr, dass unter ansi
.txt
Dateien grün sind. Eins kann nicht verwendet werden, um das Rendern des anderen zu validieren. Beide Lösungen erfordern unterschiedliche Konfigurationen und führen zu völlig unterschiedlichen Ergebnissen.quelle
ansi-dark
Ausgabe als korrekt angesehen habe (da sie die nicht verschlechterte Version verwendet). Wenn Sie dann die Ausgabe von als Referenz nehmen256dark
, dann haben Sie die umgekehrte Denkweise.