mirror of
https://github.com/romkatv/powerlevel10k.git
synced 2024-12-12 19:18:28 +02:00
fd3d234354
Added flag to ignore checking the term colors & lang settings
378 lines
9.9 KiB
Bash
378 lines
9.9 KiB
Bash
# vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8
|
|
################################################################
|
|
# Color functions
|
|
# This file holds some color-functions for
|
|
# the powerlevel9k-ZSH-theme
|
|
# 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() {
|
|
# Check if given value is already numerical
|
|
if [[ "$1" = <-> ]]; then
|
|
# ANSI color codes distinguish between "foreground"
|
|
# and "background" colors. We don't need to do that,
|
|
# as ZSH uses a 256 color space anyway.
|
|
if [[ "$1" = <8-15> ]]; then
|
|
echo -n $(($1 - 8))
|
|
else
|
|
echo -n "$1"
|
|
fi
|
|
else
|
|
typeset -A codes
|
|
# 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
|
|
}
|
|
|
|
# Check if two colors are equal, even if one is specified as ANSI code.
|
|
function isSameColor() {
|
|
if [[ "$1" == "NONE" || "$2" == "NONE" ]]; then
|
|
return 1
|
|
fi
|
|
|
|
local color1=$(getColorCode "$1")
|
|
local color2=$(getColorCode "$2")
|
|
|
|
return $(( color1 != color2 ))
|
|
}
|