diff --git a/README.md b/README.md index 359e618..ae99325 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ bes-color is a small bash bes display true colors utility library add bes-color to your require section in bes.ini ``` [require] -bes.color = 1.0 +bes.color = 1.1 ``` then do ``` @@ -42,12 +42,63 @@ predefined colors : use special var *$Coff* to disable previous color effects. +ex : +``` + echo -e "${Ctitle} mytitle${Coff}" +``` + +### use config file to load colors + +``` +color.load "/your/path/colors.ini" +``` + +without parameter, `color.load` function try to load +the default location `/usr/share/bes/colors.ini` + +contents of colors.ini file : + +``` +[set] +# background foreground +# R G B R G B +head = 53 114 160 195 223 255 +headsep = 53 114 160 252 212 102 + +[bg] +# background +# R G B +one = 63 172 138 +fail = 172 63 85 + +[fg] +# foreground +# R G B +title = 133 92 181 +headline = 22 74 133 +sep = 80 80 80 +err = 194 48 64 +val = 255 175 95 +key = 40 168 134 +action = 106 183 241 +symbol = 255 175 95 +item = 92 147 181 +usa = 255 172 0 +spe = 255 214 166 +opt = 94 215 255 +com = 175 135 175 +text = 0 132 101 +meta = 39 100 170 +``` + +in colors.ini config file, var names are without 'C' prefix + ### set foreground ``` # R G B -color.fg "Cmyfgcolor" 185 69 69 +color.fg "myfgcolor" 185 69 69 echo -e "$Cmyfgcolor foreground $Coff" ``` @@ -56,7 +107,7 @@ echo -e "$Cmyfgcolor foreground $Coff" ``` # R G B -color.bg "Cmybgcolor" 69 185 185 +color.bg "mybgcolor" 69 185 185 echo -e "$Cmybgcolor background $Coff" ``` @@ -72,9 +123,9 @@ echo -e "$Cmyfgcolor foreground $Cmybgcolor backgound $Coff" ### set background and foreground ``` -# background foreground -# R G B R G B -color.set "Cmycolor" 69 185 185 185 69 69 +# background foreground +# R G B R G B +color.set "mycolor" 69 185 185 185 69 69 echo -e "$Cmycolor cool $Coff" ``` diff --git a/bes.ini b/bes.ini index 6cd78f9..4896fc9 100644 --- a/bes.ini +++ b/bes.ini @@ -1,10 +1,13 @@ [project] vendor = bes name = color -version = 1.0 +version = 1.1 license = "GNU GPL v3" author = a-Sansara type = library homepage = "https://git.pluie.org/meta-tech/bes-color" description = "bash bes display utility true colors library" keywords = "bash, bes, color" + +[require] +bes.ini = 1.1 diff --git a/src/color.sh b/src/color.sh index 818066e..1553ea4 100755 --- a/src/color.sh +++ b/src/color.sh @@ -1,4 +1,3 @@ -#!/bin/bash # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # @author a-Sansara - https://git.pluie.org/meta-tech/bes-color @@ -10,52 +9,67 @@ function bes.color.boot () { BES_NOCOLOR=${BES_NOCOLOR:-0} if [ "$BES_NOCOLOR" -eq 0 ]; then - # by convention all colors begins with 'C' uppercase - # followed by a name in lowercase - # background foreground - # R G B R G B - color.set "Chead" 53 114 160 195 223 255 - color.set "Cheadsep" 53 114 160 252 212 102 - # background - # R G B - color.bg "Cdone" 63 172 138 - color.bg "Cfail" 172 63 85 - # foreground - # R G B - color.fg "Ctitle" 133 92 181 - color.fg "Cheadline" 22 74 133 - color.fg "Csep" 80 80 80 - color.fg "Cerr" 194 48 64 - color.fg "Cval" 255 175 95 - color.fg "Ckey" 40 168 134 - color.fg "Caction" 106 183 241 - color.fg "Csymbol" 255 175 95 - color.fg "Citem" 92 147 181 - color.fg "Cusa" 255 172 0 - color.fg "Cspe" 255 214 166 - color.fg "Copt" 94 215 255 - color.fg "Ccom" 175 135 175 - color.fg "Ctext" 0 132 101 - color.fg "Cmeta" 39 100 170 - Coff="\\033[m" + color.load + if [ $? -eq 1 ]; then + # by convention all colors begins with 'C' uppercase + # followed by a name in lowercase + # but in this calls you dont need to prefix names + # + # background foreground + # R G B R G B + color.set "head" 53 114 160 195 223 255 + color.set "headsep" 53 114 160 252 212 102 + # background + # R G B + color.bg "done" 63 172 138 + color.bg "fail" 172 63 85 + # foreground + # R G B + color.fg "title" 133 92 181 + color.fg "headline" 22 74 133 + color.fg "sep" 80 80 80 + color.fg "err" 194 48 64 + color.fg "val" 255 175 95 + color.fg "key" 40 168 134 + color.fg "action" 106 183 241 + color.fg "symbol" 255 175 95 + color.fg "item" 92 147 181 + color.fg "usa" 255 172 0 + color.fg "spe" 255 214 166 + color.fg "opt" 94 215 255 + color.fg "com" 175 135 175 + color.fg "text" 0 132 101 + color.fg "meta" 39 100 170 + Coff="\\033[m" + echo -e "$Cerr warning ${Coff}cannot load colors config file" + fi fi } # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ function color.fg() { - local -n var=$1 + local s=${1} + if [ ${s:0:1} = "C" ]; then s=${s:1}; fi + s=${s,,} + local -n var=C$1 var="\033[1;38;2;$2;$3;$4m" } # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ function color.bg() { - local -n var=$1 + local s=${1} + if [ ${s:0:1} = "C" ]; then s=${s:1}; fi + s=${s,,} + local -n var=C$1 var="\033[1;48;2;$2;$3;$4m" } # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ function color.set() { - local -n var=$1 + local s=${1} + if [ ${s:0:1} = "C" ]; then s=${s:1}; fi + s=${s,,} + local -n var=C$1 var="\033[1;48;2;$2;$3;$4;1;38;2;$5;$6;$7m" } # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -96,4 +110,24 @@ function color.env () { var=${!v} } # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +function color.load () { + local file=${1:-/usr/share/bes/colors.ini} + if [ -f "$file" ]; then + local prefix="bes_colors" + bes.ini "$file" -p "$prefix" -b 1 + for name in ${bes_colors_ALL_VARS}; do + key="${name:${#prefix}+1}" + if [ "${key:0:2}" = "fg" ]; then + color.fg "${key:3}" ${!name} + elif [ "${key:0:2}" == "bg" ]; then + color.bg "${key:3}" ${!name} + elif [ "${key:0:3}" == "set" ]; then + color.set "${key:4}" ${!name} + fi + done + else + return 1 + fi +} +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ bes.color.boot