Alternando cores solarizadas com mintty e tmux

4

Estou tentando encontrar uma maneira de alternar facilmente entre temas solares claros / escuros sem a necessidade de criar uma nova sessão terminal / tmux. Estou executando o mintty em uma máquina Windows e geralmente efetuo login em uma máquina Linux e conecto a uma sessão do tmux.

Usando cores solarty da mavnn e as cores tmux solarizadas do seebi , escrevi algumas funções bash que podem alterar as cores do terminal em tempo real. Isso está no meu .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
}

Então, dentro do sol.dark, há instruções como:

echo -ne '\eP\e]10;#839496\a' # Foreground -> base0
echo -ne '\eP\e]11;#002B36\a' # Background -> base03

e dentro do meu tmuxcolors-dark.conf eu vou ter coisas como:

set-option -g status-bg colour235 #base02
set-option -g status-fg colour130 #yellow

Isso está quase funcionando. Se eu não tenho o tmux aberto eu posso digitar "godark" e o mintty vai mudar para um tema escuro, mas se eu digitar isso no tmux, ele irá mudar minha barra de status do tmux para o tema correto, mas o fundo do meu terminal não muda de cor . Eu realmente não entendo as seqüências de escape ANSI então talvez eu esteja fazendo algo bobo aqui. Eu apreciaria qualquer ajuda para fazer isso funcionar!

    
por Jeff 09.03.2015 / 06:14

1 resposta

4

Você pode enviar uma seqüência de escape de dentro do tmux para o terminal que contém, transformando sua sequência de escape assim:

  1. duplique todas as ocorrências de \e
  2. prefixar \ePtmux;
  3. acrescentar \e\

Por exemplo, usando st como meu emulador de terminal, posso redefinir a cor # 1 (vermelha) de sua paleta executando

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

Para fazer o mesmo a partir do tmux, eu tenho que usar

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

Ao usar um script / função shell para alternar cores, verifique a variável de ambiente $TMUX . Se não estiver vazio, então você está dentro do tmux.

    
por 27.03.2015 / 16:19