#!/usr/bin/env bash # prompt-colors.sh # # source this file to get color definitions # are also printed to STDERR. define_color_names() { ColorNames=( Black Red Green Yellow Blue Magenta Cyan White ) FgColors=( 30 31 32 33 34 35 36 37 ) BgColors=( 40 41 42 43 44 45 46 47 ) local AttrNorm=0 local AttrBright=1 local AttrDim=2 local AttrUnder=4 local AttrBlink=5 local AttrRev=7 local AttrHide=8 # define "BoldCOLOR", "BrightCOLOR", and "DimCOLOR" names # _map_colors ATTRNAME ATTRVALUE # # Defines three names for every color, attribute combintaion: # {ATTRNAME}{COLORNAME} # {ATTRNAME}{COLORNAME}Fg # {ATTRNAME}{COLORNAME}Bg # # Example: BoldRed, BoldRedFg, BoldRedBg _map_colors() { local x=0 local attrname="${1}" local attrcode="${2}" while (( x < 8 )) ; do local colorname="${ColorNames[x]}" local fgcolorcode="${FgColors[x]}" local bgcolorcode="${BgColors[x]}" longcolorname="${attrname}${colorname}" _def_color "${longcolorname}" "${attrcode}" "${fgcolorcode}" _def_color "${longcolorname}Fg" "${attrcode}" "${fgcolorcode}" _def_color "${longcolorname}Bg" "${attrcode}" "${bgcolorcode}" (( x++ )) done } # _term_color [ N | N M ] _term_color() { local cv if [[ "${#}" -gt 1 ]]; then cv="${1};${2}" else cv="${1}" fi echo "\[\033[${cv}m\]" } # def_color NAME ATTRCODE COLORCODE _def_color() { local def="${1}=\"\`_term_color ${2} ${3}\`\"" eval "${def}" } _map_colors Bold ${AttrBright} _map_colors Bright ${AttrBright} _map_colors Dim ${AttrDim} _map_colors '' ${AttrNorm} _def_color IntenseBlack 0 90 _def_color ResetColor 0 0 } # do the color definitions only once if [[ -z "${ColorNames+x}" || "${#ColorNames[*]}" = 0 || -z "${IntenseBlack:+x}" || -z "${ResetColor:+x}" ]]; then define_color_names fi