-#!/usr/bin/perl
-# Usage: colortable
-# Print a color table of ANSI colors (normal+bright)
+#!/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)
-sub printrow {
- $bg = $_[0];
- for ($bright = 0; $bright < 2; $bright++) {
- # Normal background
- $bgc = $bg;
- printf("\x1b[0m %2s ",$bgc);
- for ($fg=30; $fg<=37; $fg++) {
- $fgc = $bright == 1 ? ($fg+60) : $fg;
- printf("\x1b[%sm\x1b[%sm %2s ", $bgc, $fgc, $fgc);
- }
- if ($bg > 0) {
- # Bright background
- $bgc = $bg+60;
- printf("\x1b[0m %3s ",$bgc);
- for ($fg=30; $fg<=37; $fg++) {
- $fgc = $bright == 1 ? ($fg+60) : $fg;
- printf("\x1b[%sm\x1b[%sm %2s ", $bgc, $fgc, $fgc);
- }
- }
- printf("\x1b[0m\n");
- }
-}
+T='gYw' # The test text
+bright=0 # Don't print bright colors by default
+test "$1" = "-x" -o "$1" = "-a" && bright=1
-# No background
-for ($bg=0; $bg<=0; $bg++) {
- printrow $bg;
-}
-# Background 40-47 (standard)
-for ($bg=40; $bg<48; $bg++) {
- printrow $bg;
-}
+# 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