diff options
Diffstat (limited to 'functions')
-rw-r--r-- | functions/colors.zsh | 602 |
1 files changed, 335 insertions, 267 deletions
diff --git a/functions/colors.zsh b/functions/colors.zsh index 8d75e670..7a748ab3 100644 --- a/functions/colors.zsh +++ b/functions/colors.zsh @@ -6,6 +6,62 @@ # https://github.com/bhilburn/powerlevel9k ################################################################ +function termColors() { + local term_colors + + if which tput &>/dev/null; then + term_colors=$(tput colors) + else + term_colors=$(echotc Co) + fi + if (( ! $? && ${term_colors:-0} < 256 )); then + print -P "%F{red}WARNING!%f Your terminal appears to support fewer than 256 colors!" + print -P "If your terminal supports 256 colors, please export the appropriate environment variable" + print -P "_before_ loading this theme in your \~\/.zshrc. In most terminal emulators, putting" + print -P "%F{blue}export TERM=\"xterm-256color\"%f at the top of your \~\/.zshrc is sufficient." + fi +} + +# get the proper color code if it does not exist as a name. +function getColor() { + # no need to check numerical values + if [[ "$1" = <-> ]]; then + if [[ "$1" = <8-15> ]]; then + 1=$(($1 - 8)) + fi + else + # named color added to parameter expansion print -P to test if the name exists in terminal + named="%K{$1}" + # https://misc.flogisoft.com/bash/tip_colors_and_formatting + default="$'\033'\[49m" + # http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html + quoted=$(printf "%q" $(print -P "$named")) + if [[ $quoted = "$'\033'\[49m" && $1 != "black" ]]; then + # color not found, so try to get the code + 1=$(getColorCode $1) + fi + fi + echo -n "$1" +} + +# empty paramenter resets (stops) background color +function backgroundColor() { + if [[ -z $1 ]]; then + echo -n "%k" + else + echo -n "%K{$(getColor $1)}" + fi +} + +# empty paramenter resets (stops) foreground color +function foregroundColor() { + if [[ -z $1 ]]; then + echo -n "%f" + else + echo -n "%F{$(getColor $1)}" + fi +} + # Get numerical color codes. That way we translate ANSI codes # into ZSH-Style color codes. function getColorCode() { @@ -15,280 +71,292 @@ function getColorCode() { # and "background" colors. We don't need to do that, # as ZSH uses a 256 color space anyway. if [[ "$1" = <8-15> ]]; then - echo $(($1 - 8)) + echo -n $(($1 - 8)) else - echo "$1" + echo -n "$1" fi else typeset -A codes - codes=( # https://jonasjacek.github.io/colors/ # use color names by default to allow dark/light themes to adjust colors based on names - 'black' '000' - 'maroon' '001' - 'green' '002' - 'olive' '003' - 'navy' '004' - 'purple' '005' - 'teal' '006' - 'silver' '007' - 'grey' '008' - 'red' '009' - 'lime' '010' - 'yellow' '011' - 'blue' '012' - 'fuchsia' '013' - 'aqua' '014' - 'white' '015' - 'grey0' '016' - 'navyblue' '017' - 'darkblue' '018' - 'blue3' '019' - 'blue3' '020' - 'blue1' '021' - 'darkgreen' '022' - 'deepskyblue4' '023' - 'deepskyblue4' '024' - 'deepskyblue4' '025' - 'dodgerblue3' '026' - 'dodgerblue2' '027' - 'green4' '028' - 'springgreen4' '029' - 'turquoise4' '030' - 'deepskyblue3' '031' - 'deepskyblue3' '032' - 'dodgerblue1' '033' - 'green3' '034' - 'springgreen3' '035' - 'darkcyan' '036' - 'lightseagreen' '037' - 'deepskyblue2' '038' - 'deepskyblue1' '039' - 'green3' '040' - 'springgreen3' '041' - 'springgreen2' '042' - 'cyan3' '043' - 'darkturquoise' '044' - 'turquoise2' '045' - 'green1' '046' - 'springgreen2' '047' - 'springgreen1' '048' - 'mediumspringgreen' '049' - 'cyan2' '050' - 'cyan1' '051' - 'darkred' '052' - 'deeppink4' '053' - 'purple4' '054' - 'purple4' '055' - 'purple3' '056' - 'blueviolet' '057' - 'orange4' '058' - 'grey37' '059' - 'mediumpurple4' '060' - 'slateblue3' '061' - 'slateblue3' '062' - 'royalblue1' '063' - 'chartreuse4' '064' - 'darkseagreen4' '065' - 'paleturquoise4' '066' - 'steelblue' '067' - 'steelblue3' '068' - 'cornflowerblue' '069' - 'chartreuse3' '070' - 'darkseagreen4' '071' - 'cadetblue' '072' - 'cadetblue' '073' - 'skyblue3' '074' - 'steelblue1' '075' - 'chartreuse3' '076' - 'palegreen3' '077' - 'seagreen3' '078' - 'aquamarine3' '079' - 'mediumturquoise' '080' - 'steelblue1' '081' - 'chartreuse2' '082' - 'seagreen2' '083' - 'seagreen1' '084' - 'seagreen1' '085' - 'aquamarine1' '086' - 'darkslategray2' '087' - 'darkred' '088' - 'deeppink4' '089' - 'darkmagenta' '090' - 'darkmagenta' '091' - 'darkviolet' '092' - 'purple' '093' - 'orange4' '094' - 'lightpink4' '095' - 'plum4' '096' - 'mediumpurple3' '097' - 'mediumpurple3' '098' - 'slateblue1' '099' - 'yellow4' '100' - 'wheat4' '101' - 'grey53' '102' - 'lightslategrey' '103' - 'mediumpurple' '104' - 'lightslateblue' '105' - 'yellow4' '106' - 'darkolivegreen3' '107' - 'darkseagreen' '108' - 'lightskyblue3' '109' - 'lightskyblue3' '110' - 'skyblue2' '111' - 'chartreuse2' '112' - 'darkolivegreen3' '113' - 'palegreen3' '114' - 'darkseagreen3' '115' - 'darkslategray3' '116' - 'skyblue1' '117' - 'chartreuse1' '118' - 'lightgreen' '119' - 'lightgreen' '120' - 'palegreen1' '121' - 'aquamarine1' '122' - 'darkslategray1' '123' - 'red3' '124' - 'deeppink4' '125' - 'mediumvioletred' '126' - 'magenta3' '127' - 'darkviolet' '128' - 'purple' '129' - 'darkorange3' '130' - 'indianred' '131' - 'hotpink3' '132' - 'mediumorchid3' '133' - 'mediumorchid' '134' - 'mediumpurple2' '135' - 'darkgoldenrod' '136' - 'lightsalmon3' '137' - 'rosybrown' '138' - 'grey63' '139' - 'mediumpurple2' '140' - 'mediumpurple1' '141' - 'gold3' '142' - 'darkkhaki' '143' - 'navajowhite3' '144' - 'grey69' '145' - 'lightsteelblue3' '146' - 'lightsteelblue' '147' - 'yellow3' '148' - 'darkolivegreen3' '149' - 'darkseagreen3' '150' - 'darkseagreen2' '151' - 'lightcyan3' '152' - 'lightskyblue1' '153' - 'greenyellow' '154' - 'darkolivegreen2' '155' - 'palegreen1' '156' - 'darkseagreen2' '157' - 'darkseagreen1' '158' - 'paleturquoise1' '159' - 'red3' '160' - 'deeppink3' '161' - 'deeppink3' '162' - 'magenta3' '163' - 'magenta3' '164' - 'magenta2' '165' - 'darkorange3' '166' - 'indianred' '167' - 'hotpink3' '168' - 'hotpink2' '169' - 'orchid' '170' - 'mediumorchid1' '171' - 'orange3' '172' - 'lightsalmon3' '173' - 'lightpink3' '174' - 'pink3' '175' - 'plum3' '176' - 'violet' '177' - 'gold3' '178' - 'lightgoldenrod3' '179' - 'tan' '180' - 'mistyrose3' '181' - 'thistle3' '182' - 'plum2' '183' - 'yellow3' '184' - 'khaki3' '185' - 'lightgoldenrod2' '186' - 'lightyellow3' '187' - 'grey84' '188' - 'lightsteelblue1' '189' - 'yellow2' '190' - 'darkolivegreen1' '191' - 'darkolivegreen1' '192' - 'darkseagreen1' '193' - 'honeydew2' '194' - 'lightcyan1' '195' - 'red1' '196' - 'deeppink2' '197' - 'deeppink1' '198' - 'deeppink1' '199' - 'magenta2' '200' - 'magenta1' '201' - 'orangered1' '202' - 'indianred1' '203' - 'indianred1' '204' - 'hotpink' '205' - 'hotpink' '206' - 'mediumorchid1' '207' - 'darkorange' '208' - 'salmon1' '209' - 'lightcoral' '210' - 'palevioletred1' '211' - 'orchid2' '212' - 'orchid1' '213' - 'orange1' '214' - 'sandybrown' '215' - 'lightsalmon1' '216' - 'lightpink1' '217' - 'pink1' '218' - 'plum1' '219' - 'gold1' '220' - 'lightgoldenrod2' '221' - 'lightgoldenrod2' '222' - 'navajowhite1' '223' - 'mistyrose1' '224' - 'thistle1' '225' - 'yellow1' '226' - 'lightgoldenrod1' '227' - 'khaki1' '228' - 'wheat1' '229' - 'cornsilk1' '230' - 'grey100' '231' - 'grey3' '232' - 'grey7' '233' - 'grey11' '234' - 'grey15' '235' - 'grey19' '236' - 'grey23' '237' - 'grey27' '238' - 'grey30' '239' - 'grey35' '240' - 'grey39' '241' - 'grey42' '242' - 'grey46' '243' - 'grey50' '244' - 'grey54' '245' - 'grey58' '246' - 'grey62' '247' - 'grey66' '248' - 'grey70' '249' - 'grey74' '250' - 'grey78' '251' - 'grey82' '252' - 'grey85' '253' - 'grey89' '254' - 'grey93' '255' - ) + codes[black]=000 + codes[maroon]=001 + codes[green]=002 + codes[olive]=003 + codes[navy]=004 + codes[purple]=005 + codes[teal]=006 + codes[silver]=007 + codes[grey]=008 + codes[red]=009 + codes[lime]=010 + codes[yellow]=011 + codes[blue]=012 + codes[fuchsia]=013 + codes[aqua]=014 + codes[white]=015 + codes[grey0]=016 + codes[navyblue]=017 + codes[darkblue]=018 + codes[blue3]=019 + codes[blue3]=020 + codes[blue1]=021 + codes[darkgreen]=022 + codes[deepskyblue4]=023 + codes[deepskyblue4]=024 + codes[deepskyblue4]=025 + codes[dodgerblue3]=026 + codes[dodgerblue2]=027 + codes[green4]=028 + codes[springgreen4]=029 + codes[turquoise4]=030 + codes[deepskyblue3]=031 + codes[deepskyblue3]=032 + codes[dodgerblue1]=033 + codes[green3]=034 + codes[springgreen3]=035 + codes[darkcyan]=036 + codes[lightseagreen]=037 + codes[deepskyblue2]=038 + codes[deepskyblue1]=039 + codes[green3]=040 + codes[springgreen3]=041 + codes[springgreen2]=042 + codes[cyan3]=043 + codes[darkturquoise]=044 + codes[turquoise2]=045 + codes[green1]=046 + codes[springgreen2]=047 + codes[springgreen1]=048 + codes[mediumspringgreen]=049 + codes[cyan2]=050 + codes[cyan1]=051 + codes[darkred]=052 + codes[deeppink4]=053 + codes[purple4]=054 + codes[purple4]=055 + codes[purple3]=056 + codes[blueviolet]=057 + codes[orange4]=058 + codes[grey37]=059 + codes[mediumpurple4]=060 + codes[slateblue3]=061 + codes[slateblue3]=062 + codes[royalblue1]=063 + codes[chartreuse4]=064 + codes[darkseagreen4]=065 + codes[paleturquoise4]=066 + codes[steelblue]=067 + codes[steelblue3]=068 + codes[cornflowerblue]=069 + codes[chartreuse3]=070 + codes[darkseagreen4]=071 + codes[cadetblue]=072 + codes[cadetblue]=073 + codes[skyblue3]=074 + codes[steelblue1]=075 + codes[chartreuse3]=076 + codes[palegreen3]=077 + codes[seagreen3]=078 + codes[aquamarine3]=079 + codes[mediumturquoise]=080 + codes[steelblue1]=081 + codes[chartreuse2]=082 + codes[seagreen2]=083 + codes[seagreen1]=084 + codes[seagreen1]=085 + codes[aquamarine1]=086 + codes[darkslategray2]=087 + codes[darkred]=088 + codes[deeppink4]=089 + codes[darkmagenta]=090 + codes[darkmagenta]=091 + codes[darkviolet]=092 + codes[purple]=093 + codes[orange4]=094 + codes[lightpink4]=095 + codes[plum4]=096 + codes[mediumpurple3]=097 + codes[mediumpurple3]=098 + codes[slateblue1]=099 + codes[yellow4]=100 + codes[wheat4]=101 + codes[grey53]=102 + codes[lightslategrey]=103 + codes[mediumpurple]=104 + codes[lightslateblue]=105 + codes[yellow4]=106 + codes[darkolivegreen3]=107 + codes[darkseagreen]=108 + codes[lightskyblue3]=109 + codes[lightskyblue3]=110 + codes[skyblue2]=111 + codes[chartreuse2]=112 + codes[darkolivegreen3]=113 + codes[palegreen3]=114 + codes[darkseagreen3]=115 + codes[darkslategray3]=116 + codes[skyblue1]=117 + codes[chartreuse1]=118 + codes[lightgreen]=119 + codes[lightgreen]=120 + codes[palegreen1]=121 + codes[aquamarine1]=122 + codes[darkslategray1]=123 + codes[red3]=124 + codes[deeppink4]=125 + codes[mediumvioletred]=126 + codes[magenta3]=127 + codes[darkviolet]=128 + codes[purple]=129 + codes[darkorange3]=130 + codes[indianred]=131 + codes[hotpink3]=132 + codes[mediumorchid3]=133 + codes[mediumorchid]=134 + codes[mediumpurple2]=135 + codes[darkgoldenrod]=136 + codes[lightsalmon3]=137 + codes[rosybrown]=138 + codes[grey63]=139 + codes[mediumpurple2]=140 + codes[mediumpurple1]=141 + codes[gold3]=142 + codes[darkkhaki]=143 + codes[navajowhite3]=144 + codes[grey69]=145 + codes[lightsteelblue3]=146 + codes[lightsteelblue]=147 + codes[yellow3]=148 + codes[darkolivegreen3]=149 + codes[darkseagreen3]=150 + codes[darkseagreen2]=151 + codes[lightcyan3]=152 + codes[lightskyblue1]=153 + codes[greenyellow]=154 + codes[darkolivegreen2]=155 + codes[palegreen1]=156 + codes[darkseagreen2]=157 + codes[darkseagreen1]=158 + codes[paleturquoise1]=159 + codes[red3]=160 + codes[deeppink3]=161 + codes[deeppink3]=162 + codes[magenta3]=163 + codes[magenta3]=164 + codes[magenta2]=165 + codes[darkorange3]=166 + codes[indianred]=167 + codes[hotpink3]=168 + codes[hotpink2]=169 + codes[orchid]=170 + codes[mediumorchid1]=171 + codes[orange3]=172 + codes[lightsalmon3]=173 + codes[lightpink3]=174 + codes[pink3]=175 + codes[plum3]=176 + codes[violet]=177 + codes[gold3]=178 + codes[lightgoldenrod3]=179 + codes[tan]=180 + codes[mistyrose3]=181 + codes[thistle3]=182 + codes[plum2]=183 + codes[yellow3]=184 + codes[khaki3]=185 + codes[lightgoldenrod2]=186 + codes[lightyellow3]=187 + codes[grey84]=188 + codes[lightsteelblue1]=189 + codes[yellow2]=190 + codes[darkolivegreen1]=191 + codes[darkolivegreen1]=192 + codes[darkseagreen1]=193 + codes[honeydew2]=194 + codes[lightcyan1]=195 + codes[red1]=196 + codes[deeppink2]=197 + codes[deeppink1]=198 + codes[deeppink1]=199 + codes[magenta2]=200 + codes[magenta1]=201 + codes[orangered1]=202 + codes[indianred1]=203 + codes[indianred1]=204 + codes[hotpink]=205 + codes[hotpink]=206 + codes[mediumorchid1]=207 + codes[darkorange]=208 + codes[salmon1]=209 + codes[lightcoral]=210 + codes[palevioletred1]=211 + codes[orchid2]=212 + codes[orchid1]=213 + codes[orange1]=214 + codes[sandybrown]=215 + codes[lightsalmon1]=216 + codes[lightpink1]=217 + codes[pink1]=218 + codes[plum1]=219 + codes[gold1]=220 + codes[lightgoldenrod2]=221 + codes[lightgoldenrod2]=222 + codes[navajowhite1]=223 + codes[mistyrose1]=224 + codes[thistle1]=225 + codes[yellow1]=226 + codes[lightgoldenrod1]=227 + codes[khaki1]=228 + codes[wheat1]=229 + codes[cornsilk1]=230 + codes[grey100]=231 + codes[grey3]=232 + codes[grey7]=233 + codes[grey11]=234 + codes[grey15]=235 + codes[grey19]=236 + codes[grey23]=237 + codes[grey27]=238 + codes[grey30]=239 + codes[grey35]=240 + codes[grey39]=241 + codes[grey42]=242 + codes[grey46]=243 + codes[grey50]=244 + codes[grey54]=245 + codes[grey58]=246 + codes[grey62]=247 + codes[grey66]=248 + codes[grey70]=249 + codes[grey74]=250 + codes[grey78]=251 + codes[grey82]=252 + codes[grey85]=253 + codes[grey89]=254 + codes[grey93]=255 - # Strip eventual "bg-" prefixes - 1=${1#bg-} - # Strip eventual "fg-" prefixes - 1=${1#fg-} - # Strip eventual "br" prefixes ("bright" colors) - 1=${1#br} - echo $codes[$1] + # for testing purposes in terminal + if [[ "$1" == "foreground" ]]; then + # call via `getColorCode foreground` + for i in "${(k@)codes}"; do + print -P "$(foregroundColor $i)$(getColor $i) - $i$(foregroundColor)" + done + elif [[ "$1" == "background" ]]; then + # call via `getColorCode background` + for i in "${(k@)codes}"; do + print -P "$(backgroundColor $i)$(getColor $i) - $i$(backgroundColor)" + done + else + #[[ -n "$1" ]] bg="%K{$1}" || bg="%k" + # Strip eventual "bg-" prefixes + 1=${1#bg-} + # Strip eventual "fg-" prefixes + 1=${1#fg-} + # Strip eventual "br" prefixes ("bright" colors) + 1=${1#br} + echo -n $codes[$1] + fi fi } |