#!/bin/bash
# Usage: colortable [-x]
#
# Print a color table of ANSI colors (normal+bright) to demonstrate what
# colors are available. Each line is the color code of one foreground
# color, out of 17 (default + 16 escapes), followed by a test use of that
# color on all nine background colors (default + 8 escapes).
#
# (Based on: http://www.faqs.org/docs/Linux-HOWTO/Bash-Prompt-HOWTO.html)

T='gYw'   # The test text
bright=0  # Don't print bright colors by default
test "$1" = "-x" -o "$1" = "-a" && bright=1

# Standard background colors
echo
echo -e "                 40m     41m     42m     43m     44m     45m     46m     47m";
for FGs in  '    m' '   1m' \
            '  30m' '  90m' '1;30m' \
            '  31m' '  91m' '1;31m' \
            '  32m' '  92m' '1;32m' \
            '  33m' '  93m' '1;33m' \
            '  34m' '  94m' '1;34m' \
            '  35m' '  95m' '1;35m' \
            '  36m' '  96m' '1;36m' \
            '  37m' '  97m' '1;37m'; do
  FG=${FGs// /}
  if [ "${FG:0:1}" != "9" -o $bright -eq 1 ]; then
    echo -en " $FGs \033[$FG  $T  \033[0m"
    for BG in 40m 41m 42m 43m 44m 45m 46m 47m; do
      echo -en " \033[$FG\033[$BG  $T  \033[0m";
    done
    echo;
  fi
done
echo

# Bright background colors
test $bright -eq 0 && exit 0
echo -e "                 100m    101m    102m    103m    104m    105m    106m    107m";
for FGs in  '    m' '   1m' \
            '  30m' '  90m' '1;30m' \
            '  31m' '  91m' '1;31m' \
            '  32m' '  92m' '1;32m' \
            '  33m' '  93m' '1;33m' \
            '  34m' '  94m' '1;34m' \
            '  35m' '  95m' '1;35m' \
            '  36m' '  96m' '1;36m' \
            '  37m' '  97m' '1;37m'; do
  FG=${FGs// /}
  echo -en " $FGs \033[$FG  $T  \033[0m"
  for BG in 100m 101m 102m 103m 104m 105m 106m 107m; do
    echo -en " \033[$FG\033[$BG  $T  \033[0m";
  done
  echo;
done
echo