![tmux 256-цветный вывод на 256-цветный терминал, 8-цветный вывод на 8-цветный терминал](https://rvso.com/image/164713/tmux%20256-%D1%86%D0%B2%D0%B5%D1%82%D0%BD%D1%8B%D0%B9%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%20%D0%BD%D0%B0%20256-%D1%86%D0%B2%D0%B5%D1%82%D0%BD%D1%8B%D0%B9%20%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B0%D0%BB%2C%208-%D1%86%D0%B2%D0%B5%D1%82%D0%BD%D1%8B%D0%B9%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%20%D0%BD%D0%B0%208-%D1%86%D0%B2%D0%B5%D1%82%D0%BD%D1%8B%D0%B9%20%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B0%D0%BB.png)
Я хотел бы 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).
Существует ли точный способ выбора tmux
8 или 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-цвета (истинного цвета), а не того, о чем вы спрашиваете.