tmux 256-цветный вывод на 256-цветный терминал, 8-цветный вывод на 8-цветный терминал

tmux 256-цветный вывод на 256-цветный терминал, 8-цветный вывод на 8-цветный терминал

Я хотел бы tmuxавтоматически выбрать 256-цветный режим, т.е. иметь переменную окружения

TERM=tmux-256color

внутри tmuxкогда переменная окружения

TERM=xterm-256color

был установленснаружи.

Поведение по умолчанию

256-цветный эмулятор терминала

Текущее поведение позволяет tmuxвыбрать 8-цветный режим в любом случае: используйте эмулятор терминала, поддерживающий 256 цветов, например Gnome Terminal или xterm, и убедитесь, что он поддерживает 256 цветов.

echo $TERM; tput colors
# xterm-256colors
# 256

затем начать tmux. По умолчанию tmuxпереключится на 8 цветов:

echo $TERM; tput colors
# screen
# 8

8-цветный эмулятор терминала

Если вместо этого вы переключитесь на 8-цветный терминал, т.е. переключитесь на /dev/tty2нажатие Ctrl+Alt+F2, вы получите

echo $TERM; tput colors
# linux
# 8

и внутри tmuxтот же старый

echo $TERM; tput colors
# screen
# 8

Принудительный 256-цветный режим

Я могу принудительно tmuxвключить режим 256 цветовдобавив следующее к~/.tmux.conf

set -s default-terminal "tmux-256color"

Однако это также применимо, есливнешний эмулятор терминалаизначально не поддерживал 256 цветов. Это не то, что мне нужно.

Адаптивный 256-цветный режим

Естьвопроси аЧасто задаваемые вопросына GitHub, где указано, что установлена ​​одна из (люди сообщают о противоречивых параметрах)

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"

должен был бы tmuxвыбрать цветовой режим терминала, но ни один из них не работает в моей установке (tmux 3.0 на Arch).

Существует ли точный способ выбора tmux8 или 256 цветов в зависимости от того, что поддерживает текущий эмулятор терминала?

решение1

На самом деле tmux не может сделать это самостоятельно, поскольку он не может изменить TERM для уже запущенных программ, например, если вы отсоединяетесь от терминала с помощью xterm-256color и снова подключаетесь к терминалу с помощью xterm.

Однако вы можете сделать это самостоятельно. TERM клиента доступен в формате client_termname. Так что вы можете поместить что-то вроде этого в свой PS1 или .profile или что-то еще:

if [ -n "$TMUX" ]; then
    T=$(tmux display -p '#{client_termname}')
    case "$T" in
    *-256color)
         export TERM=tmux-256color
         ;;
    *)
         export TERM=tmux
         ;;
    esac
fi

Очевидно, что по умолчанию будет использоваться tmux, если вы создаете панели в неприсоединенном сеансе (client_termname будет пустым), или TERM из последнего использованного клиента, если у вас есть сеанс, прикрепленный к нескольким клиентам.

Если вы не хотите делать это в своей оболочке таким образом, вы можете использовать клиентский хук для изменения default-terminal, но это будет применяться только к новым панелям, а не к существующим.

Другой вариант — постоянно запускать tmux-256color и позволить tmux переводить цвета в более низкую цветовую гамму, когда внешний терминал не может обрабатывать 256 цветов.

Все, что написано в разделе часто задаваемых вопросов о Tc, касается RGB-цвета (истинного цвета), а не того, о чем вы спрашиваете.

Связанный контент