tmux 256-Farben-Ausgabe auf 256-Farben-Terminal, 8-Farben-Ausgabe auf 8-Farben-Terminal

tmux 256-Farben-Ausgabe auf 256-Farben-Terminal, 8-Farben-Ausgabe auf 8-Farben-Terminal

Ich möchte, dass tmuxder 256-Farben-Modus automatisch ausgewählt wird, d. h. ich möchte eine Umgebungsvariable

TERM=tmux-256color

innen tmuxwenn die Umgebungsvariable

TERM=xterm-256color

war eingestelltdraußen.

Standardverhalten

256-Farben-Terminalemulator

Das aktuelle Verhalten besteht darin, tmuxin 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 tmuxwird 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/tty2Sie Strg+Alt+F2 drücken, erhalten Sie

echo $TERM; tput colors
# linux
# 8

und im Inneren tmuxder gleichen alten

echo $TERM; tput colors
# screen
# 8

Erzwungener 256-Farben-Modus

Ich kann tmuxden 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 tmuxden Farbmodus des Terminals übernehmen, aber keines davon funktioniert auf meiner Installation (tmux 3.0 auf Arch).

Gibt es eine definitive Möglichkeit, tmuxentweder 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.

verwandte Informationen