Ich möchte, dass tmux
der 256-Farben-Modus automatisch ausgewählt wird, d. h. ich möchte eine Umgebungsvariable
TERM=tmux-256color
innen tmux
wenn die Umgebungsvariable
TERM=xterm-256color
war eingestelltdraußen.
Standardverhalten
256-Farben-Terminalemulator
Das aktuelle Verhalten besteht darin, tmux
in jedem Fall den 8-Farben-Modus auszuwählen: Verwenden Sie einen Terminalemulator, der 256 Farben unterstützt, z. B. Gnome Terminal oder xterm, und stellen Sie sicher, dass dieser 256 Farben unterstützt
echo $TERM; tput colors
# xterm-256colors
# 256
dann starten tmux
. Standardmäßig tmux
wird auf 8 Farben umgeschaltet:
echo $TERM; tput colors
# screen
# 8
8-Farben-Terminalemulator
Wenn Sie stattdessen zu einem 8-Farben-Terminal wechseln, d. h. indem /dev/tty2
Sie Strg+Alt+F2 drücken, erhalten Sie
echo $TERM; tput colors
# linux
# 8
und im Inneren tmux
der gleichen alten
echo $TERM; tput colors
# screen
# 8
Erzwungener 256-Farben-Modus
Ich kann tmux
den 256-Farben-Modus erzwingenindem Sie Folgendes hinzufügen zu~/.tmux.conf
set -s default-terminal "tmux-256color"
Dies gilt jedoch auch dann, wenn dieäußerer Terminalemulatorhat von Anfang an keine 256 Farben unterstützt. Das ist nicht das, was ich will.
Adaptiver 256-Farben-Modus
Es gibtein Problemund einFAQauf GitHub dieser Zustand setzt einen der (Leute melden widersprüchliche Parameter)
set -ga terminal-overrides ",xterm-256color*:Tc"
set -sa terminal-overrides ",xterm-256color*:Tc"
set -ga terminal-overrides ",*256col*:Tc"
set -sa terminal-overrides ",*256col*:Tc"
sollte tmux
den Farbmodus des Terminals übernehmen, aber keines davon funktioniert auf meiner Installation (tmux 3.0 auf Arch).
Gibt es eine definitive Möglichkeit, tmux
entweder 8 oder 256 Farben auszuwählen, je nachdem, was der aktuelle Terminalemulator unterstützt?
Antwort1
Dies ist nicht wirklich etwas, was tmux vollständig für Sie tun kann, da es TERM bei bereits laufenden Programmen nicht ändern kann, beispielsweise wenn Sie sich mit xterm-256color von einem Terminal trennen und die Verbindung zu einem Terminal mit xterm wiederherstellen.
Sie können es jedoch selbst tun. Der TERM des Clients ist im Format client_termname verfügbar. Sie können also so etwas wie das Folgende in Ihre PS1 oder .profile oder was auch immer einfügen:
if [ -n "$TMUX" ]; then
T=$(tmux display -p '#{client_termname}')
case "$T" in
*-256color)
export TERM=tmux-256color
;;
*)
export TERM=tmux
;;
esac
fi
Wenn Sie Bereiche in einer nicht verknüpften Sitzung erstellen, wird standardmäßig tmux verwendet (client_termname ist leer), oder der TERM des zuletzt verwendeten Clients, wenn Sie eine Sitzung mit mehreren Clients verknüpft haben.
Wenn Sie dies nicht auf diese Weise in Ihrer Shell tun möchten, können Sie den an den Client angeschlossenen Hook verwenden, um das Standardterminal zu ändern. Dies gilt jedoch nur für neue Bereiche, nicht für vorhandene.
Eine andere Möglichkeit wäre, immer mit tmux-256color zu arbeiten und tmux die Farbe herunterrechnen zu lassen, wenn das externe Terminal keine 256 Farben verarbeiten kann.
In den FAQ zu Tc geht es ausschließlich um RGB-Farben (True Color), nicht um das, wonach Sie fragen.