#!/usr/bin/env bash #--- colour functions # tested on 16/88/256/truecolor TERM definitions # limited to 256 colours # usage: # source ./pb # printf %b "$(pb_bg 196)$(pb_fg 254) RED $(pb_nc)\n" pb_ctest() { if [ -z "$TERM" ] ; then return 1 fi case $1 in '' | *[!0-9]* ) return 1;; esac local x x=$(tput colors) if [ -z "$1" ] || (("$1" >= "$x")) ; then return 1 fi return 0 } pb_terminfo() { local x x=$(tput colors) echo "TERM = $TERM : $x colours supported" } pb_nc() { printf '\033[0;0m' return 0 } pb_fg() { if pb_ctest $1; then printf %s "\033[38;5;$1m" return 0 else return 1 fi } pb_bg() { if pb_ctest $1; then printf %s "\033[48;5;$1m" return 0 else return 1 fi } pb_ef() { case $1 in "bold") printf %s "\033[1m" return 0 ;; "dim") printf %s "\033[2m" return 0 ;; "italic") printf %s "\033[3m" return 0 ;; "underline") printf %s "\033[4m" return 0 ;; "blink") printf %s "\033[5m" return 0 ;; "reverse") printf %s "\033[7m" return 0 ;; "hidden") printf %s "\033[8m" return 0 ;; "strikethrough") printf %s "\033[9m" return 0 ;; *) return 1 ;; esac } # end 256 colour functions