Switching solarized colors with mintty and tmux
I am trying to find a way to easily toggle between light/dark solarized themes without needing to create a new terminal/tmux session. I am running mintty on a Windows machine and usually log into a Linux machine and connect to a tmux session.
Используя соляризованные мятные цвета от mavnn и соляризованные цвета tmux от Seebi, я написал несколько функций bash, которые могут изменять цвета терминала на лету. Это в моем.bashrc:
функция Godark() { ~/ Соляризации /sol.dark исходный файл tmux ~/tmux/tmuxcolors-dark.conf } функция golight() { ~/ Соляризации /sol.light исходный файл tmux ~/tmux/tmuxcolors-light.conf }
Так что внутри sol.dark есть такие инструкции, как:
echo -ne '\ eP \ e] 10; # 839496 \ a' # Передний план -> base0 echo -ne '\eP\e]11;#002B36\a' # Фон -> base03
и внутри моего tmuxcolors-dark.conf у меня будут такие вещи, как:
set-option -g status-bg colour235 # base02 set-option -g status-fg colour130 #yellow
Это почти работает. Если у меня нет открытого tmux, я могу напечатать "godark", и mintty изменится на темную тему, но если я введу это в tmux, изменится строка состояния моего tmux на правильную тему, но фон моего терминала не изменит цвет, Я не очень понимаю escape-последовательности ANSI, так что, возможно, я делаю что-то глупое здесь. Буду признателен за любую помощь в получении этой работы!
1 ответ
Вы можете отправить escape-последовательность изнутри tmux на содержащий терминал, преобразовав вашу escape-последовательность следующим образом:
- удвоить все случаи
\e
- перед именем
\ePtmux;
- присоединять
\e\\
Например, используя st в качестве моего эмулятора терминала, я могу переопределить цвет #1 (красный) его палитры, выполнив
printf '\e]4;1;#aa0000\a'
Чтобы сделать то же самое из Tmux, я должен использовать
printf '\ePtmux;\e\e]4;1;#aa0000\a\e\\'
При использовании сценария / функции оболочки для переключения цветов проверьте наличие $TMUX
переменная окружения. Если он не пустой, значит вы внутри tmux.