186

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 7

271

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
  • perhaps you need three digit colours? This script outputs like color12 but that is not accepted by tmux as a valid colour. Jan 11, 2013 at 11:49
  • 8
    My tmux (1.6) accepts even colors like colour12 (mind the "u").
    – cYrus
    Jan 11, 2013 at 12:28
  • 1
    @cYrus starting with 3.2, tmux also supports color12 (without the "u")
    – user383438
    Apr 15, 2021 at 18:53
152

I found this image to be enlightening.

enter image description here

2
  • 41
    You can create it with for i in {0..255}; do printf "\x1b[38;5;${i}mcolor%-5i\x1b[0m" $i ; if ! (( ($i + 1 ) % 8 )); then echo ; fi ; done Oct 4, 2017 at 11:10
  • 2
    An alternative output that groups the colors after colour15 is generated with for i in {0..255}; do printf "\x1b[38;5;${i}mcolor%-5i\x1b[0m" $i ; if ! (( ($i - 3) % 6 )); then echo ; fi ; done.
    – G-Wiz
    Feb 8, 2023 at 22:48
26

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
  • 1
    Can you? I can't see how to...
    – Eric
    Apr 23, 2012 at 18:18
  • 6
    set-option message-bg "#abcdef"; the quotes are necessary.
    – chepner
    May 1, 2012 at 20:05
  • You also seem to have to use the full 6 hex chars, no 3 char shortcuts i.e. #fff will not work, you have to use #ffffff
    – Schlueter
    Dec 9, 2015 at 21:44
20

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
8

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
  • 4
    Script show-256-colors.sh can be useful to show background colors as well. Aug 2, 2018 at 1:47
  • 1
    You ought to default it to say, at least 4 columns, to distinguish it from the origin script.
    – dbkeys
    Aug 26, 2019 at 13:28
7

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

0

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
  • 1
    Suggestion: note this script requires zsh.
    – kkahl
    Dec 28, 2021 at 0:38

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .