Print terminal colors

Print 256 colors in the terminal using this script. Run with the following command and scroll using the arrow keys:

$ bash terminal_colors.sh | less -R --chop-long-lines
print_16_colors() {
    declare -A attributes
    attributes["0"]="default"
    attributes["1"]="bold"
    attributes["2"]="dim"
    # attributes["4"]="underlined"
    # attributes["5"]="blink"
    # attributes["7"]="invert"
    # attributes["8"]="hidden"

    declare -A foreground_colors
    foreground_colors["39"]="default"
    foreground_colors["30"]="black"
    foreground_colors["31"]="red"
    foreground_colors["32"]="green"
    foreground_colors["33"]="yellow"
    foreground_colors["34"]="blue"
    foreground_colors["35"]="magenta"
    foreground_colors["36"]="cyan"
    foreground_colors["37"]="light_gray"
    foreground_colors["90"]="dark_gray"
    foreground_colors["91"]="light_red"
    foreground_colors["92"]="light_green"
    foreground_colors["93"]="light_yellow"
    foreground_colors["94"]="light_blue"
    foreground_colors["95"]="light_magenta"
    foreground_colors["96"]="light_cyan"
    foreground_colors["97"]="white"

    declare -A background_colors
    background_colors["49"]="default"
    background_colors["40"]="black"
    background_colors["41"]="red"
    background_colors["42"]="green"
    background_colors["43"]="yellow"
    background_colors["44"]="blue"
    background_colors["45"]="magenta"
    background_colors["46"]="cyan"
    background_colors["47"]="light_gray"
    background_colors["100"]="dark_gray"
    background_colors["101"]="light_red"
    background_colors["102"]="light_green"
    background_colors["103"]="light_yellow"
    background_colors["104"]="light_blue"
    background_colors["105"]="light_magenta"
    background_colors["106"]="light_cyan"
    background_colors["107"]="white"

    sorted_attribute_numbers=($(for key in ${!attributes[@]}; do echo $key; done | sort))
    sorted_foreground_numbers=($(for key in ${!foreground_colors[@]}; do echo $key; done | sort -n))
    sorted_background_numbers=($(for key in ${!background_colors[@]}; do echo $key; done | sort -n))
    for attribute_number in ${sorted_attribute_numbers[@]}; do
        attribute_value="${attributes[${attribute_number}]}"

        printf " %13s %4s " "${attribute_value}" "(${attribute_number})"
        for background_color_number in ${sorted_background_numbers[@]}; do
            background_color_name="${background_colors[${background_color_number}]}"
            printf " %19s " "${background_color_name} (${background_color_number})"
        done
        printf " %-4s %-13s " "(${attribute_number})" "${attribute_value}"
        echo

        for foreground_color_number in ${sorted_foreground_numbers[@]}; do
            foreground_color_name="${foreground_colors[${foreground_color_number}]}"

            printf " %18s " "${foreground_color_name} (${foreground_color_number})"
            for background_color_number in ${sorted_background_numbers[@]}; do
                background_color_name="${background_colors[${background_color_number}]}"

                echo -en "\e[${attribute_number};${background_color_number};${foreground_color_number}m"
                printf " %19s " "${attribute_number};${background_color_number};${foreground_color_number}m"
                echo -en "\e[0m"
            done

            printf " %-18s " "(${foreground_color_number}) ${foreground_color_name}"
            echo
        done
        echo
    done
}

print_256() {
    echo -e "256 colors\n"
    for fgbg in 38 48; do
        echo " Standard colors"
        echo -n " "
        for color in {0..7}; do
            echo -en "\x1B[${fgbg};5;${color}m"
            printf " %-9s " "${fgbg};5;${color}m"
            echo -en "\x1B[0m"
        done
        echo
        echo

        echo " High-intensity colors"
        echo -n " "
        for color in {8..15}; do
            echo -en "\x1B[${fgbg};5;${color}m"
            printf " %-9s " "${fgbg};5;${color}m"
            echo -en "\x1B[0m"
        done
        echo

        echo
        echo " 216 colors"
        echo -n " "
        i=0
        for color in {16..231}; do
            echo -en "\x1B[${fgbg};5;${color}m"
            printf " %-9s " "${fgbg};5;${color}m"
            echo -en "\x1B[0m"

            i=$(($i+1))
            if [ $((i % 36)) == 0 ]; then
                echo
                echo -n " "
            fi
        done
        echo

        echo " Grayscale colors"
        echo -n " "
        for color in {232..255}; do
            echo -en "\x1B[${fgbg};5;${color}m"
            printf " %-9s " "${fgbg};5;${color}m"
            echo -en "\x1B[0m"
        done
        echo

        echo
    done
}

print_16_colors
print_256

Comments

Leave a Reply