115 lines
3.0 KiB
Bash
115 lines
3.0 KiB
Bash
#!/usr/bin/env bash
|
|
# prompt-colors.sh
|
|
#
|
|
# source this file to get color definitions
|
|
# are also printed to STDERR.
|
|
|
|
# bash/zsh cross compatibility notes:
|
|
# - using colors modules to set colors in zsh, please autoload it
|
|
# - Dim colors, Intense Black not supported in zsh
|
|
|
|
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:1}"
|
|
local fgcolorcode="${FgColors[@]:$x:1}"
|
|
local bgcolorcode="${BgColors[@]:$x:1}"
|
|
longcolorname="${attrname}${colorname}"
|
|
|
|
if [ -n "$ZSH_VERSION" ]; then
|
|
# zsh
|
|
lowercolorname=$(echo $colorname | tr '[A-Z]' '[a-z]')
|
|
_def_color_zsh "${longcolorname}" "${attrcode}" "${lowercolorname}" "fg"
|
|
_def_color_zsh "${longcolorname}Fg" "${attrcode}" "${lowercolorname}" "fg"
|
|
_def_color_zsh "${longcolorname}Bg" "${attrcode}" "${lowercolorname}" "bg"
|
|
else
|
|
# bash
|
|
_def_color "${longcolorname}" "${attrcode}" "${fgcolorcode}"
|
|
_def_color "${longcolorname}Fg" "${attrcode}" "${fgcolorcode}"
|
|
_def_color "${longcolorname}Bg" "${attrcode}" "${bgcolorcode}"
|
|
fi
|
|
(( 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}"
|
|
}
|
|
|
|
# def_color_zsh NAME ATTRCODE COLORNAME FG|BG
|
|
_def_color_zsh() {
|
|
if [ "${3}" = "0" ]; then
|
|
local def="${1}=\"%{\$reset_color%}\""
|
|
else
|
|
case ${2} in
|
|
1) # bold color
|
|
local def="${1}=\"%{\$${4}_bold[${3}]%}\""
|
|
;;
|
|
*)
|
|
local def="${1}=\"%{\$${4}[${3}]%}\""
|
|
;;
|
|
esac
|
|
fi
|
|
eval "${def}"
|
|
}
|
|
|
|
|
|
_map_colors Bold ${AttrBright}
|
|
_map_colors Bright ${AttrBright}
|
|
_map_colors Dim ${AttrDim}
|
|
_map_colors '' ${AttrNorm}
|
|
|
|
if [ -n "$ZSH_VERSION" ]; then
|
|
_def_color_zsh IntenseBlack 0 90
|
|
_def_color_zsh ResetColor 0 0
|
|
else
|
|
_def_color IntenseBlack 0 90
|
|
_def_color ResetColor 0 0
|
|
fi
|
|
}
|
|
|
|
# do the color definitions only once
|
|
if [[ -z "${ColorNames+x}" || "${#ColorNames[*]}" = 0 || -z "${IntenseBlack:+x}" || -z "${ResetColor:+x}" ]]; then
|
|
define_color_names
|
|
fi
|