Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change background color of active or inactive pane in Tmux

Tags:

tmux

Are there any options to control the background color of the active or inactive panes in Tmux?

like image 240
Elijah Lynn Avatar asked Aug 27 '14 16:08

Elijah Lynn


3 Answers

It seems that tmux-2.1 (released 18 October 2015) now allows the colours of individual panes to be specified. From the changelog:

* 'select-pane' now understands '-P' to set window/pane background colours.

e.g. [from the manual] to change pane 1's foreground (text) to blue and background to red use:

select-pane -t:.1 -P 'fg=blue,bg=red'

To mimic iTerm colour scheme:

To answer the original question, I use the following lines in my ~/.tmux.conf for setting the background/foreground colours to mimic the behaviour in iTerm:

#set inactive/active window styles
set -g window-style 'fg=colour247,bg=colour236'
set -g window-active-style 'fg=colour250,bg=black'

# set the pane border colors 
set -g pane-border-style 'fg=colour235,bg=colour238' 
set -g pane-active-border-style 'fg=colour51,bg=colour236'

I hadn't seen the window-style and window-active-style commands before, but maybe they were available in previous tmux versions.

Also, these two lines are pretty useful for splitting panes easily:

bind | split-window -h
bind - split-window -v

EDIT: as Jamie Schembri mentions in the comments, tmux version 2.1 (at least) will now be installed with:

brew install tmux

EDIT (Oct 2017): brew now installs tmux 2.6, and the above still works.

EDIT Vim panes: If you find that the "inactive colouring" does not work with a Vim pane, it might be due to the colourscheme you are using. Try with the pablo scheme; i.e. in the Vim pane:

:colo pablo

To make it work with your own custom Vim colourscheme, make sure that the setting for Normal highlighting does not have ctermbg or guibg specified. As an example, the "inactive colouring" does not work with the murphy colourscheme, because in murphy.vim there is the line:

hi Normal    ctermbg=Black   ctermfg=lightgreen   guibg=Black   guifg=lightgreen

that sets ctermbg or guibg to Black. However, changing this line to:

hi Normal    ctermfg=lightgreen  guifg=lightgreen

will make the "inactive colouring" work.

EDIT July 2019 Augusto provided a good suggestion for also changing the background colour for the line numbers. What I use in my vim colourscheme is the following (you need to find and edit the colourscheme file):

hi Normal    guifg=#e6e1de ctermfg=none gui=none
hi LineNr    guifg=#e6e1de ctermfg=none gui=none
like image 164
dean. Avatar answered Nov 16 '22 03:11

dean.


There is no option to change the background color of a pane, but there is option to set the pane-border color (style)

 pane-active-border-style style
                     Set the pane border style for the currently active 
pane.  For how to specify style, see the message-command-style option. 
 Attributes are ignored.


 pane-border-style style
                     Set the pane border style for paneas aside from the 
active pane.  For how to specify style, see the message-command-style option. 
 Attributes are
                     ignored.
like image 7
Kent Avatar answered Nov 16 '22 01:11

Kent


Since tmux 3.3 (released Jun 1, 2022, so it may not have propagated to all distributions yet), there are new options to help disambiguate which pane is active (though these don't change the background color specifically):

# I find this together with default coloring of the active pane border sufficient
set -g pane-border-lines heavy

# More explicit options that I find a bit excessive
set -g pane-border-lines number
set -g pane-border-indicators both # Displays arrows pointing to the current pane.
like image 1
user21952-is-a-great-name Avatar answered Nov 16 '22 01:11

user21952-is-a-great-name