4

Я пытаюсь найти способ легко переключаться между светлыми / темными соляризованными темами без необходимости создавать новый сеанс терминала / tmux. Я запускаю mintty на компьютере с Windows и обычно захожу на компьютер с Linux и подключаюсь к сеансу tmux.

Используя соляризованные мятные цвета от mavnn и соляризованные цвета tmux от Seebi , я написал несколько функций bash, которые могут изменять цвета терминала на лету. Это в моем .bashrc:

function godark()
{
    ~/solarized/sol.dark
    tmux source-file ~/tmux/tmuxcolors-dark.conf
}

function golight()
{
    ~/solarized/sol.light
    tmux source-file ~/tmux/tmuxcolors-light.conf
}

Так что внутри sol.dark есть такие инструкции, как:

echo -ne '\eP\e]10;#839496\a' # Foreground -> base0
echo -ne '\eP\e]11;#002B36\a' # Background -> 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 ответ1

4

Вы можете отправить escape-последовательность изнутри tmux на содержащий терминал, преобразовав вашу escape-последовательность следующим образом:

  1. удвоить все вхождения \e
  2. prepend \ePtmux;
  3. добавить \e\\

Например, используя st в качестве моего эмулятора терминала, я могу переопределить цвет # 1 (красный) его палитры, выполнив

printf '\e]4;1;#aa0000\a'

Чтобы сделать то же самое из Tmux, я должен использовать

printf '\ePtmux;\e\e]4;1;#aa0000\a\e\\'

При использовании сценария / функции оболочки для переключения цветов проверьте переменную среды $TMUX . Если он не пустой, значит вы внутри tmux.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .