aboutsummaryrefslogtreecommitdiff
path: root/functions
diff options
context:
space:
mode:
authorCharles Peterson <cpeterson@brokerbin.com>2017-12-16 00:42:35 +0300
committerCharles Peterson <cpeterson@brokerbin.com>2017-12-16 00:42:35 +0300
commit4d18fdc6e9252a5d93ab9e046b3d98421d1be715 (patch)
tree15bdddc1212b38e256da645dc96eda282c187f03 /functions
parent786dc5b3f211b786d5d77243548f0fec4e1618e4 (diff)
fix for colors since the terminals so not always render named colors when using parameter expansion.
Diffstat (limited to 'functions')
-rw-r--r--functions/colors.zsh586
1 files changed, 319 insertions, 267 deletions
diff --git a/functions/colors.zsh b/functions/colors.zsh
index 8d75e670..3a7da27f 100644
--- a/functions/colors.zsh
+++ b/functions/colors.zsh
@@ -6,6 +6,46 @@
# https://github.com/bhilburn/powerlevel9k
################################################################
+# 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
+ echo -n "$1"
+ fi
+}
+
+# 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 +55,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
}