Unterstützung für tmux, TERM und 256 Farben

48

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 colorsmir 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 colorssagt, es gibt 8 Farben. Ich persönlich habe sie links auf lila gesetzt, und natürlich haben wir rechts zwei verschiedene Blautöne. $TERMsagt xterm. (Um das farbige lsich eval dies in meinem zu haben .bashrc.)

Bildbeschreibung hier eingeben

Vim sieht auch gut aus, obwohl ich es mit der 256Flagge 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 tmuxliefert die "falschen" erwarteten Ergebnisse.

Bildbeschreibung hier eingeben

Aber wenn man tmuxmit der -2Flagge ruft, funktioniert alles auf magische Weise .

Bildbeschreibung hier eingeben

Jetzt verstehe ich nur noch, dass -2es export TERM=screen-256color( Quelle ) entspricht.

Guake verhält sich analog zu Terminal und beide beantworten xtermdie 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 xtermComputer führt zu folgendem Ergebnis: 256 Farben, aber nur 16 werden korrekt angezeigt.

Bildbeschreibung hier eingeben

Wenn Sie das Profil des Terminals ändern, ändern sich auch diese 16 Farben.

Bildbeschreibung hier eingeben

Weitere Tests folgen.

Von links nach rechts, von oben nach unten, haben wir Solarisation Farbthema, dircolor ansi-darkund 256darkdann default ( Tango ) Farbschema, dircolor ansi-darkund 256dark.

Bildbeschreibung hier eingeben

Beobachtung : Theoretisch sollte das Farbschema dircolor ansi-darkbei 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 256darkFarben wurde nicht viel beachtet .


Vorläufige Schlussfolgerungen

xtermunterstützt trotz allem 256 Farben tput colors. Programme können auf die ansiPalette verweisen (vom Benutzer anpassbar) oder ihre Farben definieren und aus insgesamt 256 Farben auswählen.

Atcold
quelle
1
Lesen Sie diese Antwort und die Kommentare darunter. Beantwortet es Ihre Frage? Schauen Sie sich auch dieses Skript an, um die tatsächliche Anzahl der unterstützten Farben zu ermitteln.
Terdon
Hum ... ich bin immer noch ein wenig verwirrt ... Aber ich glaube, ich verstehe zumindest, dass dies tput colorsein unzuverlässiger Test ist. Könnten Sie meine vorläufigen Schlussfolgerungen überprüfen ?
Atcold
2
Ich habe die Antwort von Gilleś gelesen, dass tput colorsnur 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?
Terdon
Überprüfen Sie meine zusätzlichen Experimente oben :)
Atcold
Ah, tut mir leid, mein Schlimmes.
Terdon

Antworten:

33

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

  • tmux kann nicht zuverlässig feststellen, ob das Terminal mehr als 8 Farben unterstützt.
  • tmux kann der Anwendung nicht zuverlässig mitteilen, dass sie mehr als 8 Farben unterstützt.

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 screenohne 256-Farben-Unterstützung. Sie können den Wert von TERMin ändern, um die .tmux.confUnterstützung von 256 Farben anzugeben:

set -g default-terminal "screen-256color"

Sie können TERM=xterm-256coloroder TERM=screen-256colorauf 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.

# 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/
Gilles 'SO - hör auf böse zu sein'
quelle
Ich weiß die Erklärung zu schätzen, bin mir aber nicht sicher, ob sie auf meine Frage zielt. Nun, ich stimme zu, dass meine Frage ziemlich weit gefasst war, aber ich habe mich nicht speziell auf tmux konzentriert . Tatsächlich war tmux der einzige, der sich entsprechend den Erwartungen verhielt. Was viel mysteriöser war, war, wie xtermich 256 Farben sehen konnte, obwohl tput colorsich 8 sagte. Ich denke, die Antwort auf diese spezielle Frage wurde von @terdon in seinen Kommentaren zur Frage selbst angesprochen .
Atcold
@Atcold Es ist eine lange Frage, aber soweit ich das beurteilen kann, habe ich sie beantwortet. Die nicht-tmux-bezogenen Teile werden durch die Antwort abgedeckt, mit der terdon und ich verlinkt haben (und die ich geschrieben habe). Ihre Frage wäre ein Duplikat davon gewesen, wenn nicht der tmux-Aspekt berücksichtigt worden wäre. Was erwarteten Sie mehr von einer Antwort?
Gilles 'SO- hör auf böse zu sein'
1
@ Gilles , ich wollte nicht gemein klingen. Ich habe versucht, @terdon die Sache mit der "akzeptierten Antwort" zu akkreditieren , obwohl er in einer anderen Frage auf Ihre Antwort verweist. Trotzdem reicht der set -g default_terminal "screen-256color"Befehl nicht aus, um die 256 Farben in tmux zu aktivieren . Sie müssen alias tmux='export TERM=screen-256color; /usr/bin/tmux'( Referenz ).
Atcold
@Atcold Nein, der Alias ​​wird nicht benötigt (habe ich getestet). Außerdem würde dieses Alias ​​keinen Sinn ergeben: Es gibt vor, dass es auf dem Bildschirm oder unter tmux ausgeführt wird. Sie müssen jedoch tmux -2wie in meinem vorherigen Absatz beschrieben ausgeführt werden, wenn tmux nicht der Meinung ist, dass Ihr aktuelles Terminal 256 Farben unterstützt, ist dies alias tmux='tmux -2'sinnvoll.
Gilles 'SO - hör auf böse zu sein'
2
@Atcold Diese U & L-Antwort hat TERM=xterm-256color tmux, was im Gegensatz zu vernünftig ist TERM=screen-256color tmux. tmux -2ist überlegen, weil es funktioniert, auch wenn screen-256colores nicht in der lokalen terminfo-Datenbank enthalten ist.
Gilles 'SO - hör auf böse zu sein'
20

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 $TERMvariable) als xtermEmulator (8 Farben).

  • Tools wie tputfolgen, was auch immer eingestellt TERMist: tput colorsMöglicherweise wird 8 gedruckt, wohingegen env TERM=xterm-256color tput colors256 gedruckt werden, unabhängig davon, ob Ihr Terminal solche Funktionen tatsächlich unterstützt .

  • vimEbenfalls TERMstandardmäßig folgen , aber wie Sie angegeben haben, 256 Farben zu verwenden (über die Flagge oder die set t_Co=256), werden 256 Farben verwendet. Und es funktioniert, weil Ihr Terminal das tatsächlich unterstützt .

  • tmuxWie 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 -2Flagge, die auch es macht melden sich als xterm-256colorkompatibel Emulator.

  • xtermUnterstützt , wie in der Terminal-Emulator-Software für den X11 , mit Sicherheit 256 Farben. Aber xtermwie in TERM=xtermist ein 8-Farben "Standard". Es bedeutet die Fähigkeiten des Originals xterm . Als es vor langer Zeit auf 256 Farben aufgerüstet wurde, prägte es den xterm-256colorBegriff 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 TERMsich entsprechend interpretieren und anpassen.

  • Wie Sie aus den obigen Ausführungenexport 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 funktioniert gettydie Linux-Konsole, auf die Sie zugreifen CTRL+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 TERMund 256 Farben:

http://blog.sanctum.geek.nz/term-strings/

http://blog.sanctum.geek.nz/256-colour-terminals/

MestreLion
quelle
Ein oder zwei Beispielszenarien wären eine gute Ergänzung zu dieser Antwort.
Elijah Lynn
5

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 lxterminalauf 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. mit dircolors.256darkder "verschlechterten" einfachen Version.

Ich habe die folgende relevante Konfiguration und die Schriftart inconsolata medium verwendet:

echo $TERM
xterm

.bashrc:
eval `dircolors /path/to/dircolors.256dark`

.vimrc:
set t_Co=256
let g:solarized_termcolors=256
syntax enable
set background=dark
colorscheme solarized

.tmux.conf:
nothing at all related to colors!
start tmux with "tmux -2"

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 xterm1 zeigt nano mit der .Xresources Datei in der im Lieferumfang enthaltenen Komplettpaket (und Abtasten mit xrdb -load ~/.Xresources):

Bildbeschreibung hier eingeben 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 .cDateien, 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 .txtDateien 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:

Bildbeschreibung hier eingeben 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
"Ich verstehe Ihre Schlussfolgerung nicht, dass der 256dark-Codierung nicht viel Aufmerksamkeit geschenkt wurde, obwohl dies die einzige Farbdatei ist, die eine Liste solarisierter Verzeichnisse liefert?" Meine Verwirrung ergibt sich aus der Tatsache, dass ich die ansi-darkAusgabe als korrekt angesehen habe (da sie die nicht verschlechterte Version verwendet). Wenn Sie dann die Ausgabe von als Referenz nehmen 256dark, dann haben Sie die umgekehrte Denkweise.
Atcold
"Mit der von mir verwendeten Konfiguration sehen die Ergebnisse innerhalb und außerhalb von tmux identisch aus." Wenn Sie 256 Farben verwenden, werden diese natürlich überall dort wiedergegeben, wo 256 Farben unterstützt werden. "Es ist nicht klar, was die ansi-Lösung in diesem Zusammenhang weiter bringen würde ..." Das Ergebnis wäre, dass sie wirklich solarisiert würden (anstelle einer Annäherung).
Atcold
Ich verstehe. Ich habe den Ansi-Teil nicht wirklich recherchiert, sodass ich nicht verstehen konnte, woher du kommst. Auf jeden Fall fand ich dein Q ganz anregend, danke. Vielleicht benutze ich vi jetzt, wo ich es hübsch finde, lol. Was die Ansi-Ergebnisse angeht, habe ich jetzt tatsächlich gesehen, wie es aussieht ... sie zeigen das hier nur für Dir-Farben . Warum das h. Haben sie eine andere Codierung darunter ... Ich meine, ich sehe .txt grün ... wie ist grau in der Nähe von grün? Ich verstehe ihr Projekt nicht ernst.
Ja, ich habe den Autor persönlich kontaktiert und die Antwort lautet: "Es war seine persönliche Anpassung, da er so mochte". Ich bin sprachlos ... Ich bin froh, dass mein Q jemandem geholfen hat :)
Atcold