Merge branch 'Artistan-master' into next

This commit is contained in:
Ben Hilburn 2018-01-06 15:02:14 -05:00
commit 58fc02f152
4 changed files with 358 additions and 285 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,62 @@
# https://github.com/bhilburn/powerlevel9k # 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
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 +71,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}"
@ -142,8 +142,8 @@ left_prompt_segment() {
# subsegment (or the default color). This should have # subsegment (or the default color). This should have
# enough contrast. # enough contrast.
local complement local complement
[[ -n "$4" ]] && complement="$4" || complement=$DEFAULT_COLOR [[ -n "$4" ]] && complement="$fg" || complement="$(foregroundColor $DEFAULT_COLOR)"
echo -n "$bg%F{$complement}" echo -n "${bg}${complement}"
if [[ $joined == false ]]; then if [[ $joined == false ]]; then
echo -n "$(print_icon 'LEFT_SUBSEGMENT_SEPARATOR')$POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS" echo -n "$(print_icon 'LEFT_SUBSEGMENT_SEPARATOR')$POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS"
fi fi
@ -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
@ -229,10 +229,11 @@ right_prompt_segment() {
# subsegment (or the default color). This should have # subsegment (or the default color). This should have
# enough contrast. # enough contrast.
local complement local complement
[[ -n "$4" ]] && complement="$4" || complement=$DEFAULT_COLOR [[ -n "$4" ]] && complement="$fg" || complement="$(foregroundColor $DEFAULT_COLOR)"
echo -n "%F{$complement}$(print_icon 'RIGHT_SUBSEGMENT_SEPARATOR')%f" echo -n "$complement$(print_icon 'RIGHT_SUBSEGMENT_SEPARATOR')%f"
else else
echo -n "%F{$3}$(print_icon 'RIGHT_SEGMENT_SEPARATOR')%f" # Use the new BG color for the foreground with separator
echo -n "$(foregroundColor $3)$(print_icon 'RIGHT_SEGMENT_SEPARATOR')%f"
fi fi
fi fi
@ -1572,14 +1573,7 @@ prompt_powerlevel9k_setup() {
setopt noprompt{bang,cr,percent,sp,subst} "prompt${^prompt_opts[@]}" setopt noprompt{bang,cr,percent,sp,subst} "prompt${^prompt_opts[@]}"
# Display a warning if the terminal does not support 256 colors # Display a warning if the terminal does not support 256 colors
local term_colors termColors
term_colors=$(echotc Co 2>/dev/null)
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
# If the terminal `LANG` is set to `C`, this theme will not work at all. # If the terminal `LANG` is set to `C`, this theme will not work at all.
local term_lang local term_lang

View file

@ -19,7 +19,7 @@ function testRust() {
alias rustc=mockRust alias rustc=mockRust
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(rust_version) POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(rust_version)
assertEquals "%K{darkorange} %F{black}Rust 0.4.1a-alpha %k%F{darkorange}%f " "$(build_left_prompt)" assertEquals "%K{208} %F{black}Rust 0.4.1a-alpha %k%F{darkorange}%f " "$(build_left_prompt)"
unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
unalias rustc unalias rustc