--- /dev/null
+#!/bin/bash
+# https://tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html
+#
+# This file echoes a bunch of color codes to the
+# terminal to demonstrate what's available. Each
+# line is the color code of one forground color,
+# out of 17 (default + 16 escapes), followed by a
+# test use of that color on all nine background
+# colors (default + 8 escapes).
+#
+
+T='gYw' # The test text
+
+echo -e "\n 40m 41m 42m 43m\
+ 44m 45m 46m 47m";
+
+for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' \
+ '1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' \
+ ' 36m' '1;36m' ' 37m' '1;37m';
+ do FG=${FGs// /}
+ echo -en " $FGs \033[$FG $T "
+ for BG in 40m 41m 42m 43m 44m 45m 46m 47m;
+ do echo -en "$EINS \033[$FG\033[$BG $T \033[0m";
+ done
+ echo;
+done
+echo
--- /dev/null
+#!/bin/bash
+# https://tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html
+# https://gist.github.com/XVilka/8346728#gistcomment-3528771
+
+T='::' # The test text
+
+function echo_block() {
+ local fs=$1
+ local bs=$2
+ echo " 01234567"
+ for (( f = 0; f < 8; f++ )); do
+ echo -en " ${f} "
+ for (( b = 0; b < 8; b++ )); do
+ echo -en "\033[38;5;$((fs+f))m\033[48;5;$((bs+b))m$T\033[0m";
+ done
+ echo
+ done
+}
+
+function print_colors() {
+ local c
+ for (( c = $1; c < $1 + $2; c++)); do
+ echo -en "\033[48;5;${c}m$T\033[0m"
+ done
+ echo
+}
+function colors() {
+ print_colors 0 8
+ print_colors 8 8
+ for (( c = 16; c < 256 - 24; c += 36 )); do
+ print_colors $c 36
+ done
+ print_colors $((256 - 24)) 24
+}
+
+function true_colors() {
+ awk -v term_cols="${width:-$(tput cols || echo 80)}" 'BEGIN{
+ s="/\\";
+ for (colnum = 0; colnum<term_cols; colnum++) {
+ r = 255-(colnum*255/term_cols);
+ g = (colnum*510/term_cols);
+ b = (colnum*255/term_cols);
+ if (g>255) g = 510-g;
+ printf "\033[48;2;%d;%d;%dm", r,g,b;
+ printf "\033[38;2;%d;%d;%dm", 255-r,255-g,255-b;
+ printf "%s\033[0m", substr(s,colnum%2+1,1);
+ }
+ printf "\n";
+ }'
+}
+
+colors
+true_colors