4

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.

Using mavnn's solarized mintty colors and seebi's solarized tmux colors, I have written some bash functions that can change the terminal colors on the fly. This is in my .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
}

So inside of sol.dark there are instructions such as:

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

and inside of my tmuxcolors-dark.conf I'll have things such as:

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

This is almost working. If I do not have tmux open I can type "godark" and mintty will change to a dark theme, but if I type this in tmux, it will change my tmux status bar to the correct theme, but my terminal background does not change color. I do not really understand ANSI escape sequences so maybe I'm doing something silly here. I'd appreciate any help in getting this working!

Jeff
  • 1,767
  • 2
  • 14
  • 21
  • Try starting tmux as `tmux -2` to support 256 colors, from inside a terminal set as `screen-256color`. For more info see [this article](http://www.terminally-incoherent.com/blog/2012/10/17/vim-solarized-and-tmux/). – harrymc Mar 16 '15 at 19:32
  • Thanks, @harrymc. I did try this and unfortunately it did not help. From what I can tell I have 256 colors working fine, I just cannot switch between light and dark themes. – Jeff Mar 17 '15 at 03:13

1 Answers1

5

You can send an escape sequence from inside tmux to the containing terminal by transforming your escape sequence like this:

  1. double all occurrences of \e
  2. prepend \ePtmux;
  3. append \e\\

For example, using st as my terminal emulator, I can redefine color #1 (red) of its palette by executing

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

To do the same from within tmux, I have to use

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

When using a shell script/function to switch colors, check for the $TMUX environment variable. If it is not empty, then you are inside tmux.

igor
  • 260
  • 1
  • 3
  • 9