#!/bin/bash # # This file echoes four gradients with 24-bit color codes # to the terminal to demonstrate their functionality. # The foreground escape sequence is ^[38;2;;;m # The background escape sequence is ^[48;2;;;m # range from 0 to 255 inclusive. # The escape sequence ^[0m returns output to default # # From # https://github.com/gnachman/iTerm2/blob/master/tests/24-bit-color.sh # and presumably covered by # https://github.com/gnachman/iTerm2/blob/master/LICENSE # SEQ1= if which gseq >/dev/null 2>&1; then SEQ1=gseq elif seq --version|grep -q GNU; then SEQ1=seq fi if [ -n "$SEQ1" ]; then # GNU seq requires a -ve increment if going backwards seq1() { if [ $1 -gt $2 ]; then $SEQ1 $1 -1 $2 else $SEQ1 $1 $2 fi } SEQ=seq1 else SEQ=seq fi SEPARATOR=':' setBackgroundColor() { echo -en "\033[48${SEPARATOR}2${SEPARATOR}$1${SEPARATOR}$2${SEPARATOR}$3""m" } resetOutput() { echo -en "\033[0m\n" } # Gives a color $1/255 % along HSV # Who knows what happens when $1 is outside 0-255 # Echoes "$red $green $blue" where # $red $green and $blue are integers # ranging between 0 and 255 inclusive rainbowColor() { let h=$1/43 let f=$1-43*$h let t=$f*255/43 let q=255-t if [ $h -eq 0 ] then echo "255 $t 0" elif [ $h -eq 1 ] then echo "$q 255 0" elif [ $h -eq 2 ] then echo "0 255 $t" elif [ $h -eq 3 ] then echo "0 $q 255" elif [ $h -eq 4 ] then echo "$t 0 255" elif [ $h -eq 5 ] then echo "255 0 $q" else # execution should never reach here echo "0 0 0" fi } for i in `$SEQ 0 127`; do setBackgroundColor $i 0 0 echo -en " " done resetOutput for i in `$SEQ 255 128`; do setBackgroundColor $i 0 0 echo -en " " done resetOutput for i in `$SEQ 0 127`; do setBackgroundColor 0 $i 0 echo -n " " done resetOutput for i in `$SEQ 255 128`; do setBackgroundColor 0 $i 0 echo -n " " done resetOutput for i in `$SEQ 0 127`; do setBackgroundColor 0 0 $i echo -n " " done resetOutput for i in `$SEQ 255 128`; do setBackgroundColor 0 0 $i echo -n " " done resetOutput for i in `$SEQ 0 127`; do setBackgroundColor `rainbowColor $i` echo -n " " done resetOutput for i in `$SEQ 255 128`; do setBackgroundColor `rainbowColor $i` echo -n " " done resetOutput