1
0
Fork 0
mirror of https://github.com/romkatv/powerlevel10k.git synced 2024-11-25 13:30:07 +00:00

fix for colors since the terminals so not always render named colors when using parameter expansion.

This commit is contained in:
Charles Peterson 2017-12-15 15:42:35 -06:00
parent 786dc5b3f2
commit 4d18fdc6e9
3 changed files with 334 additions and 271 deletions

View file

@ -258,6 +258,17 @@ Some example settings:
|Normal Colors|(red3 darkorange3 darkgoldenrod gold3 yellow3 chartreuse2 mediumspringgreen green3 green3 green4 darkgreen)| |Normal Colors|(red3 darkorange3 darkgoldenrod gold3 yellow3 chartreuse2 mediumspringgreen green3 green3 green4 darkgreen)|
|Subdued Colors|(darkred orange4 yellow4 yellow4 chartreuse3 green3 green4 darkgreen)| |Subdued Colors|(darkred orange4 yellow4 yellow4 chartreuse3 green3 green4 darkgreen)|
###### test your terminal colors
Some terminals, like iTerm2, allow you to customize some of the colors via the interface. This is handy for themes and allowing the colors to change via the GUI.
Use this command to check how all the colors are rendering in your terminal. This is handy for choosing colors and wheter or not you want to use the static color code, or the dynamic named color.
```zsh
# execute these in your shell to get a look at all 256 colors
getColorCode background
getColorCode foreground
```
##### command_execution_time ##### command_execution_time
Display the time the previous command took to execute if the time is above Display the time the previous command took to execute if the time is above

View file

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

View file

@ -127,8 +127,8 @@ left_prompt_segment() {
[[ -n $FG_COLOR_MODIFIER ]] && 4="$FG_COLOR_MODIFIER" [[ -n $FG_COLOR_MODIFIER ]] && 4="$FG_COLOR_MODIFIER"
local bg fg local bg fg
[[ -n "$3" ]] && bg="%K{$3}" || bg="%k" [[ -n "$3" ]] && bg="$(backgroundColor $3)" || bg="$(backgroundColor)"
[[ -n "$4" ]] && fg="%F{$4}" || fg="%f" [[ -n "$4" ]] && fg="$(foregroundColor $4)" || fg="$(foregroundColor)"
if [[ $CURRENT_BG != 'NONE' ]] && ! isSameColor "$3" "$CURRENT_BG"; then if [[ $CURRENT_BG != 'NONE' ]] && ! isSameColor "$3" "$CURRENT_BG"; then
echo -n "$bg%F{$CURRENT_BG}" echo -n "$bg%F{$CURRENT_BG}"
@ -218,8 +218,8 @@ right_prompt_segment() {
[[ -n $FG_COLOR_MODIFIER ]] && 4="$FG_COLOR_MODIFIER" [[ -n $FG_COLOR_MODIFIER ]] && 4="$FG_COLOR_MODIFIER"
local bg fg local bg fg
[[ -n "$3" ]] && bg="%K{$3}" || bg="%k" [[ -n "$3" ]] && bg="$(backgroundColor $3)" || bg="$(backgroundColor)"
[[ -n "$4" ]] && fg="%F{$4}" || fg="%f" [[ -n "$4" ]] && fg="$(foregroundColor $4)" || fg="$(foregroundColor)"
# If CURRENT_RIGHT_BG is "NONE", we are the first right segment. # If CURRENT_RIGHT_BG is "NONE", we are the first right segment.
if [[ $joined == false ]] || [[ "$CURRENT_RIGHT_BG" == "NONE" ]]; then if [[ $joined == false ]] || [[ "$CURRENT_RIGHT_BG" == "NONE" ]]; then