From 879d54031dc8369398a486f7ca54dea91cabdd6c Mon Sep 17 00:00:00 2001 From: Beren Minor Date: Wed, 8 Feb 2012 09:35:21 +0100 Subject: [PATCH] Even better color framework. --- themes/colors.theme.bash | 144 +++++++++++++++++++++++---------------- 1 file changed, 87 insertions(+), 57 deletions(-) diff --git a/themes/colors.theme.bash b/themes/colors.theme.bash index 06531e0..9d756ee 100644 --- a/themes/colors.theme.bash +++ b/themes/colors.theme.bash @@ -1,56 +1,76 @@ #!/bin/bash +function __ { + echo "$@" +} + function __make_ansi { - echo "\[\e[$1m\]" + next=$1 && shift + echo "\[\e[$(__$next $@)m\]" } function __make_echo { - echo "\033[$1m" + next=$1 && shift + echo "\033[$(__$next $@)m" } function __reset { - echo "0${1:+;$1}" + next=$1 && shift + out="$(__$next $@)" + echo "0${out:+;${out}}" } function __bold { - echo "${1:+$1;}1" + next=$1 && shift + out="$(__$next $@)" + echo "${out:+${out};}1" } function __faint { - echo "${1:+$1;}2" + next=$1 && shift + out="$(__$next $@)" + echo "${out:+${out};}2" } function __italic { - echo "${1:+$1;}3" + next=$1 && shift + out="$(__$next $@)" + echo "${out:+${out};}3" } function __underline { - echo "${1:+$1;}4" + next=$1 && shift + out="$(__$next $@)" + echo "${out:+${out};}4" } function __negative { - echo "${1:+$1;}7" + next=$1 && shift + out="$(__$next $@)" + echo "${out:+${out};}7" } function __crossed { - echo "${1:+$1;}8" + next=$1 && shift + out="$(__$next $@)" + echo "${out:+${out};}8" } -function __normal_fg { +function __color_normal_fg { echo "3$1" } -function __normal_bg { +function __color_normal_bg { echo "4$1" } -function __bright_fg { +function __color_bright_fg { echo "9$1" } -function __bright_bg { +function __color_bright_bg { echo "10$1" } @@ -88,70 +108,80 @@ function __color_white { } function __color_rgb { - r=$1 - g=$2 - b=$3 - + r=$1 && g=$2 && b=$3 [[ r == g && g == b ]] && echo $(( $r / 11 + 232 )) && return # gray range above 232 echo "8;5;$(( ($r * 36 + $b * 6 + $g) / 51 + 16 ))" } function __color { - color=$1 - side=${2:-fg} - mode=${3:-normal} - echo "$(__${mode}_${side} $(__color_${color} $@))" + color=$1 && shift + case "$1" in + fg|bg) side="$1" && shift ;; + *) side=fg;; + esac + case "$1" in + normal|bright) mode="$1" && shift;; + *) mode=normal;; + esac + [[ $color == "rgb" ]] && rgb="$1 $2 $3" && shift 3 + + next=$1 && shift + out="$(__$next $@)" + echo "$(__color_${mode}_${side} $(__color_${color} $rgb))${out:+;${out}}" } -function __color_parse { - while [ $# -gt 0 ] - do - case "$1" in - reset|bold|faint|italic|underline|negative|crossed) - output="$(__$1 $output)" - shift - ;; +function __black { + echo "$(__color black $@)" +} - black|red|green|yellow|blue|magenta|cyan|white|rgb) - color="$1" - shift +function __red { + echo "$(__color red $@)" +} - case "$1" in - fg|bg) - side="$1" - shift +function __green { + echo "$(__color green $@)" +} - case "$1" in - normal|bright) - mode="$1" - shift - ;; - esac +function __yellow { + echo "$(__color yellow $@)" +} - ;; - esac +function __blue { + echo "$(__color blue $@)" +} - [[ $color == "rgb" ]] && params="$1 $2 $3" && shift 3 - output=${output:+$output;}$(__color $color $side $mode $params) +function __magenta { + echo "$(__color magenta $@)" +} + +function __cyan { + echo "$(__color cyan $@)" +} + +function __white { + echo "$(__color white $@)" +} - ;; +function __rgb { + echo "$(__color rgb $@)" +} - *) shift;; - esac - done - echo ${output} +function __color_parse { + next=$1 && shift + echo "$(__$next $@)" } function color { - echo $(__make_ansi $(__color_parse $@)) + echo "$(__color_parse make_ansi $@)" } function echo_color { - echo $(__make_echo $(__color_parse $@)) + echo "$(__color_parse make_echo $@)" } + black="$(color black)" red="$(color red)" green="$(color green)" @@ -189,11 +219,11 @@ background_yellow="$(color yellow bg)" background_blue="$(color blue bg)" background_purple="$(color magenta bg)" background_cyan="$(color cyan bg)" -background_white="$(color white bold bg)" +background_white="$(color white bg bold)" background_orange="$(color red bg bright)" normal="$(color reset)" -reset_color="$(__make_ansi 39)" +reset_color="$(__make_ansi '' 39)" # These colors are meant to be used with `echo -e` echo_black="$(echo_color black)" @@ -233,8 +263,8 @@ echo_background_yellow="$(echo_color yellow bg)" echo_background_blue="$(echo_color blue bg)" echo_background_purple="$(echo_color magenta bg)" echo_background_cyan="$(echo_color cyan bg)" -echo_background_white="$(echo_color white bold bg)" +echo_background_white="$(echo_color white bg bold)" echo_background_orange="$(echo_color red bg bright)" echo_normal="$(echo_color reset)" -echo_reset_color="$(__make_ansi 39)" +echo_reset_color="$(__make_echo '' 39)" -- 2.17.1