summaryrefslogtreecommitdiff
path: root/functions/colors.zsh
diff options
context:
space:
mode:
Diffstat (limited to 'functions/colors.zsh')
-rw-r--r--functions/colors.zsh363
1 files changed, 342 insertions, 21 deletions
diff --git a/functions/colors.zsh b/functions/colors.zsh
index c82af9ea..f421165c 100644
--- a/functions/colors.zsh
+++ b/functions/colors.zsh
@@ -6,6 +6,66 @@
# https://github.com/bhilburn/powerlevel9k
################################################################
+function termColors() {
+ if [[ $POWERLEVEL9K_IGNORE_TERM_COLORS == true ]]; then
+ return
+ fi
+
+ 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,30 +75,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=(
- 'black' '000'
- 'red' '001'
- 'green' '002'
- 'yellow' '003'
- 'blue' '004'
- 'magenta' '005'
- 'cyan' '006'
- 'white' '007'
- )
-
- # 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]
+ # https://jonasjacek.github.io/colors/
+ # use color names by default to allow dark/light themes to adjust colors based on names
+ 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
+
+ # 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
}
@@ -53,4 +375,3 @@ function isSameColor() {
return $(( color1 != color2 ))
}
-