How does the tmux color palette work?

I'm trying to set something to gray, but can't figure out how. The only bit of info in the man page about colors I can find is:

message-bg colour Set status line message background colour, where colour is one of: black, red, green, yellow, blue, magenta, cyan, white, colour0 to colour255 from the 256-colour palette, or default.

I also found a blog post which iterates through colors, but I can't quite grok it, and don't want to sit at the terminal all day guessing color numbers until one works.

7 Answers

You can get a list with this bash snippet:

for i in {0..255}; do printf "\x1b[38;5;${i}mcolour${i}\x1b[0m\n"
done

Then use colourxxx with tmux.

3

I found this image to be enlightening.

enter image description here

1

In Subversion (what will be tmux 1.5) you can also use #abcdef hex-style colours which are mapped to the nearest 256 colour palette entry. You need quotes as it's treated as a string, whereas regular color names are treated as named constants. Also note that 3-letter shorthand (#f00) is invalid.

Example:

set pane-active-border-bg red # no quotes for name
set pane-active-border-bg "#ff0000" # quotes for rgb
3

Before tmux 3.2 (released in April 2021), tmux only supported the international (British) spelling for the 256 colour palette, e.g.

"colour121"

as opposed to the American spelling that drops the u

"color121"

If you're using tmux 3.2 or later, you can spell it either way.

0

Building up on @cYrus' answer, I wrote a script to break the output of the colors into N number of columns, where N is the first argument

# colors.sh

#!/bin/bash
if [ -z $1 ]; then BREAK=4
else BREAK=$1
fi
for i in {0..255} ; do printf "\x1b[38;5;${i}mcolour${i} \t" if [ $(( i % $BREAK )) -eq $(($BREAK-1)) ] ; then printf "\n" fi
done

Try it by saving it into a file called colors.sh, then ./colors.sh 4

Don't forget to chmod +x colors.sh first.

2

I've been using the xterm-color-table.vim script. Any 256 color terminal color table will work.

I find this function producing the most concise and clear output (it's not mine):

colors () { for i in {0..255} do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'} done
}

function output screenshot

Then you use colourXXX where XXX is the three digits code printed above as the value for fg=, bg= etc...

1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like