Das Problem
Auf meinem Mac (10.11) zeigt Tmux die angezeigtendim
Farben nicht richtig an, was zu Ärger führt.
Im folgenden Bild soll der Name des Commit-Autors in dargestellt werden dim white
. Dies funktioniert gut in der Terminal.app, aber nicht in Tmux .
Hat jemand eine Ahnung, wie man das debuggt?
Ich glaube, es hängt mit der $TERM
Variablen zusammen, aber ich würde nicht wissen, wo ich anfangen soll.
In Terminal.app $TERM
ist auf gesetzt xterm-256color
.
In Tmux $TERM
ist auf eingestellt screen-256color
.
In meinem habe .tmux.conf
ich set -g default-terminal "screen-256color"
. xterm-256color
In Tmux widerspricht es irgendwie der Hintergrundfarbe von Vim , ändert aber nichts am dim
Verhalten.
Mehr Informationen
Ich habe ein Problem im GitHub-Repository von Tmux geöffnet . Eine Antwort wurde gegeben, aber ich verstehe sie nicht ganz.
Es sieht so aus, als hätte Terminal.app keine dim
Direktive, obwohl es gut damit umgeht.
Tmux kann die dim
Informationen nicht abrufen , da sie nicht vorhanden sind, und zeigt daher die Schriftart nicht richtig an.
Jetzt bin ich mir nicht sicher, warum einer funktioniert, während der andere nicht funktioniert.
echo $TERM
tmux aus und aus und fügen Sie die Ausgabe der Frage hinzu. Auf den ersten Blick würde ich vermuten, dass der Wert im zugrunde liegenden Terminal einen-256color
Mehrwert haben muss.tmux
greift dies auf.screen-256color
oderxterm-256color
funktioniert gut mit derdim
Richtlinie ... :(TERM=xterm-256color tmux att
.$TERM
ist bereitsxterm-256color
in Terminal.app eingestellt . Daher hatte das AnrufenTERM=xterm-256color tmux
keine Auswirkung. Ich habe sie in der Tmux- Konfigurationsdatei alsset -g default-terminal "screen-256color"
und festgelegt"xterm-256color"
.Antworten:
tmux
(wie der GNU-Bildschirm) übersetzt die Funktionen Ihres tatsächlichen Terminals in ein (häufig anderes) internes Terminal. Sie tun dies, damit Sie eine Sitzung auf verschiedenen Terminals gleichzeitig oder zu verschiedenen Zeiten verbinden können .Wenn das gut funktioniert, sehen Sie den "gleichen" Text, unabhängig davon, von wo aus Sie eine Verbindung herstellen.
Nicht alle Terminals unterstützen
dim
. Tatsächlich tun es die meisten nicht. Die Terminaldatenbank enthält 121 Vorkommen vondim
1514 Terminalbeschreibungen.Als
screen
es um 1990 begonnen wurde, entschieden sich die Entwickler, diese Funktion zu ignorieren und stattdessen die nützlichste bereitzustellen. Sie entwarfen das Programm, um für jede Zeilen- / Spaltenzelle die Videoattribute zu speichern, die Termcap- Programme wahrscheinlich verwenden würden. Der Quellcode definiert diese:aber beide
screen
undtmux
verwenden diese internen Funktionen nur, wenn das externe Terminal sie unterstützt und in der Beschreibung des internen Terminals angegeben ist.OSX bündelt eine Kopie von ncurses und der Terminaldatenbank . Während Sie MacPorts oder Homebrew und eine installieren könnte später Version, was OSX hat ist
ncurses 5.7.20081102
. Wenn Sieinfocmp
die Terminalbeschreibungen anzeigen, wird Folgendes angezeigt:Da ist kein
dim
da. In ncurses wurde dies im April 2015 hinzugefügt :Ebenso würden Sie
dim
in xterm-256color nicht sehen . Das wurde im Juni 2014 hinzugefügt :Die Art und Weise,
dim
wie in der externen Terminal.app verwendet wird, ist nicht angegeben, aber wahrscheinlich fest codiert (ohne Verwendung der Terminalbeschreibung). Aberscreen
undtmux
wissen nicht, wie die Escape-Sequenzen eingehen, aber wissen, dassdim
dies in der Terminalbeschreibung nicht erwähnt wird und daher nicht unterstützt wird.Sie können Ihre terminfo-Datenbank aktualisieren, um
dim
diese Terminalbeschreibungen mithilfe der Dienstprogrammeinfocmp
und hinzuzufügentic
:Verwenden Sie
infocmp
diese Option, um die vorhandenen Terminalbeschreibungen fürxterm-256color
und abzurufenscreen-256color
. Dies zeigt nur den ersten; Sie würden den Vorgang natürlich für die zweite Beschreibung wiederholen:infocmp -1x xterm-256color> foo
Bearbeiten Sie die von erstellte Textdatei
infocmp
und fügen Sie diese Zeile hinzuund Ersetzen der Zeile
sgr=
durch diese Zeile:Verwenden Sie
tic
diese Option, um die Terminalbeschreibung zu ersetzen:sudo tic -x foo
Hinweis: Der Punkt der Frage war die Frage, warum dies geschieht. Nicholas Marriott lieferte Informationen zur Umgehung des Problems.
quelle
Einfache Lösung
Fügen Sie den folgenden Code hinzu
~/.tmux.conf
.Erklärung vorläufig
Application.app scheint die
dim
Direktive nicht zu haben (siehe Nummer 24).Dies ist die Ausgabe des Befehls
tmux showmsgs -T
, der in Tmux ausgeführt wird .Auf der anderen Seite "sendet" Terminal.app das
dim
ohnehin (keine Ahnung, wie oder warum ), da es funktioniert, wie im obigen Bild gezeigt.Das Hinzufügen der fehlenden
dim
Direktive (auf magische Weise ) löst das Problem.quelle