aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xfunctions/colors.zsh291
-rwxr-xr-xfunctions/utilities.zsh137
-rwxr-xr-xfunctions/vcs.zsh163
-rwxr-xr-xinternal/p10k.zsh389
4 files changed, 387 insertions, 593 deletions
diff --git a/functions/colors.zsh b/functions/colors.zsh
deleted file mode 100755
index e5477aef..00000000
--- a/functions/colors.zsh
+++ /dev/null
@@ -1,291 +0,0 @@
-# For compatibility with Powerlevel9k. It's not recommended to use mnemonic color
-# names in the configuration except for colors 0-7 as these are standard.
-typeset -grA __p9k_colors=(
- black 000
- red 001
- green 002
- yellow 003
- blue 004
- magenta 005
- cyan 006
- white 007
- grey 008
- maroon 009
- lime 010
- olive 011
- navy 012
- fuchsia 013
- purple 013
- aqua 014
- teal 014
- silver 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
-)
-
-# For compatibility with Powerlevel9k.
-#
-# Type `getColorCode background` or `getColorCode foreground` to see the list of predefined colors.
-function getColorCode() {
- emulate -L zsh
- if (( ARGC == 1 )); then
- case $1 in
- foreground)
- local k
- for k in "${(k@)__p9k_colors}"; do
- local v=${__p9k_colors[$k]}
- print -P "%F{$v}$v - $k%f"
- done
- return
- ;;
- background)
- local k
- for k in "${(k@)__p9k_colors}"; do
- local v=${__p9k_colors[$k]}
- print -P "%K{$v}$v - $k%k"
- done
- return
- ;;
- esac
- fi
- echo "Usage: getColorCode background|foreground" >&2
- return 1
-}
diff --git a/functions/utilities.zsh b/functions/utilities.zsh
deleted file mode 100755
index dea4d3bd..00000000
--- a/functions/utilities.zsh
+++ /dev/null
@@ -1,137 +0,0 @@
-# _p9k_declare <type> <uppercase-name> [default]...
-function _p9k_declare() {
- local -i set=$+parameters[$2]
- (( ARGC > 2 || set )) || return 0
- case $1 in
- -b)
- if (( set )); then
- [[ ${(P)2} == true ]] && typeset -gi _$2=1 || typeset -gi _$2=0
- else
- typeset -gi _$2=$3
- fi
- ;;
- -a)
- local -a v=(${(P)2})
- if (( set )); then
- eval "typeset -ga _${(q)2}=(${(@qq)v})";
- else
- if [[ $3 != '--' ]]; then
- echo "internal error in _p9k_declare " "${(qqq)@}" >&2
- fi
- eval "typeset -ga _${(q)2}=(${(@qq)*[4,-1]})"
- fi
- ;;
- -i)
- (( set )) && typeset -gi _$2=$2 || typeset -gi _$2=$3
- ;;
- -F)
- (( set )) && typeset -gF _$2=$2 || typeset -gF _$2=$3
- ;;
- -s)
- (( set )) && typeset -g _$2=${(P)2} || typeset -g _$2=$3
- ;;
- -e)
- if (( set )); then
- local v=${(P)2}
- typeset -g _$2=${(g::)v}
- else
- typeset -g _$2=${(g::)3}
- fi
- ;;
- *)
- echo "internal error in _p9k_declare " "${(qqq)@}" >&2
- esac
-}
-
-# If we execute `print -P $1`, how many characters will be printed on the last line?
-# Assumes that `%{%}` and `%G` don't lie.
-#
-# _p9k_prompt_length '' => 0
-# _p9k_prompt_length 'abc' => 3
-# _p9k_prompt_length $'abc\nxy' => 2
-# _p9k_prompt_length $'\t' => 8
-# _p9k_prompt_length '%F{red}abc' => 3
-# _p9k_prompt_length $'%{a\b%Gb%}' => 1
-function _p9k_prompt_length() {
- emulate -L zsh
- local COLUMNS=1024
- local -i x y=$#1 m
- if (( y )); then
- while (( ${${(%):-$1%$y(l.1.0)}[-1]} )); do
- x=y
- (( y *= 2 ));
- done
- local xy
- while (( y > x + 1 )); do
- m=$(( x + (y - x) / 2 ))
- typeset ${${(%):-$1%$m(l.x.y)}[-1]}=$m
- done
- fi
- _p9k_ret=$x
-}
-
-typeset -gr __p9k_byte_suffix=('B' 'K' 'M' 'G' 'T' 'P' 'E' 'Z' 'Y')
-
-# 42 => 42B
-# 1536 => 1.5K
-function _p9k_human_readable_bytes() {
- typeset -F 2 n=$1
- local suf
- for suf in $__p9k_byte_suffix; do
- (( n < 100 )) && break
- (( n /= 1024 ))
- done
- _p9k_ret=$n$suf
-}
-
-# Determine if the passed segment is used in the prompt
-#
-# Pass the name of the segment to this function to test for its presence in
-# either the LEFT or RIGHT prompt arrays.
-# * $1: The segment to be tested.
-segment_in_use() {
- (( $_POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[(I)$1(|_joined)] ||
- $_POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[(I)$1(|_joined)] ))
-}
-
-function _p9k_parse_ip() {
- local desiredInterface=${1:-'^[^ ]+'}
-
- if [[ $_p9k_os == OSX ]]; then
- [[ -x /sbin/ifconfig ]] || return
- local rawInterfaces && rawInterfaces="$(/sbin/ifconfig -l 2>/dev/null)" || return
- local -a interfaces=(${(A)=rawInterfaces})
- local pattern="${desiredInterface}[^ ]?"
- local -a relevantInterfaces
- for rawInterface in $interfaces; do
- [[ "$rawInterface" =~ $pattern ]] && relevantInterfaces+=$MATCH
- done
- local newline=$'\n'
- local interfaceName interface
- for interfaceName in $relevantInterfaces; do
- interface="$(/sbin/ifconfig $interfaceName 2>/dev/null)" || continue
- [[ "${interface}" =~ "lo[0-9]*" ]] && continue
- if [[ "${interface//${newline}/}" =~ "<([^>]*)>(.*)inet[ ]+([^ ]*)" ]]; then
- local ipFound="${match[3]}"
- local -a interfaceStates=(${(s:,:)match[1]})
- if (( ${interfaceStates[(I)UP]} )); then
- _p9k_ret=$ipFound
- return
- fi
- fi
- done
- else
- [[ -x /sbin/ip ]] || return
- local -a interfaces=( "${(f)$(/sbin/ip -brief -4 a show 2>/dev/null)}" )
- local pattern="^${desiredInterface}[[:space:]]+UP[[:space:]]+([^/ ]+)"
- local interface
- for interface in "${(@)interfaces}"; do
- if [[ "$interface" =~ $pattern ]]; then
- _p9k_ret=$match[1]
- return
- fi
- done
- fi
-
- return 1
-}
diff --git a/functions/vcs.zsh b/functions/vcs.zsh
deleted file mode 100755
index 7c431067..00000000
--- a/functions/vcs.zsh
+++ /dev/null
@@ -1,163 +0,0 @@
-function +vi-git-untracked() {
- [[ -z "${vcs_comm[gitdir]}" || "${vcs_comm[gitdir]}" == "." ]] && return
-
- # get the root for the current repo or submodule
- local repoTopLevel="$(command git rev-parse --show-toplevel 2> /dev/null)"
- # dump out if we're outside a git repository (which includes being in the .git folder)
- [[ $? != 0 || -z $repoTopLevel ]] && return
-
- local untrackedFiles=$(command git ls-files --others --exclude-standard "${repoTopLevel}" 2> /dev/null)
-
- if [[ -z $untrackedFiles && $_POWERLEVEL9K_VCS_SHOW_SUBMODULE_DIRTY == 1 ]]; then
- untrackedFiles+=$(command git submodule foreach --quiet --recursive 'command git ls-files --others --exclude-standard' 2> /dev/null)
- fi
-
- [[ -z $untrackedFiles ]] && return
-
- hook_com[unstaged]+=" $(print_icon 'VCS_UNTRACKED_ICON')"
- VCS_WORKDIR_HALF_DIRTY=true
-}
-
-function +vi-git-aheadbehind() {
- local ahead behind
- local -a gitstatus
-
- # for git prior to 1.7
- # ahead=$(command git rev-list origin/${hook_com[branch]}..HEAD | wc -l)
- ahead=$(command git rev-list --count "${hook_com[branch]}"@{upstream}..HEAD 2>/dev/null)
- (( ahead )) && gitstatus+=( " $(print_icon 'VCS_OUTGOING_CHANGES_ICON')${ahead// /}" )
-
- # for git prior to 1.7
- # behind=$(command git rev-list HEAD..origin/${hook_com[branch]} | wc -l)
- behind=$(command git rev-list --count HEAD.."${hook_com[branch]}"@{upstream} 2>/dev/null)
- (( behind )) && gitstatus+=( " $(print_icon 'VCS_INCOMING_CHANGES_ICON')${behind// /}" )
-
- hook_com[misc]+=${(j::)gitstatus}
-}
-
-function +vi-git-remotebranch() {
- local remote
- local branch_name="${hook_com[branch]}"
-
- # Are we on a remote-tracking branch?
- remote=${$(command git rev-parse --verify HEAD@{upstream} --symbolic-full-name 2>/dev/null)/refs\/(remotes|heads)\/}
-
- if (( $+_POWERLEVEL9K_VCS_SHORTEN_LENGTH && $+_POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH )); then
- if (( ${#hook_com[branch]} > _POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH && ${#hook_com[branch]} > _POWERLEVEL9K_VCS_SHORTEN_LENGTH )); then
- case $_POWERLEVEL9K_VCS_SHORTEN_STRATEGY in
- truncate_middle)
- hook_com[branch]="${branch_name:0:$_POWERLEVEL9K_VCS_SHORTEN_LENGTH}${_POWERLEVEL9K_VCS_SHORTEN_DELIMITER}${branch_name: -$_POWERLEVEL9K_VCS_SHORTEN_LENGTH}"
- ;;
- truncate_from_right)
- hook_com[branch]="${branch_name:0:$_POWERLEVEL9K_VCS_SHORTEN_LENGTH}${_POWERLEVEL9K_VCS_SHORTEN_DELIMITER}"
- ;;
- esac
- fi
- fi
-
- if (( _POWERLEVEL9K_HIDE_BRANCH_ICON )); then
- hook_com[branch]="${hook_com[branch]}"
- else
- hook_com[branch]="$(print_icon 'VCS_BRANCH_ICON')${hook_com[branch]}"
- fi
- # Always show the remote
- #if [[ -n ${remote} ]] ; then
- # Only show the remote if it differs from the local
- if [[ -n ${remote} ]] && [[ "${remote#*/}" != "${branch_name}" ]] ; then
- hook_com[branch]+="$(print_icon 'VCS_REMOTE_BRANCH_ICON')${remote// /}"
- fi
-}
-
-function +vi-git-tagname() {
- if (( !_POWERLEVEL9K_VCS_HIDE_TAGS )); then
- # If we are on a tag, append the tagname to the current branch string.
- local tag
- tag=$(command git describe --tags --exact-match HEAD 2>/dev/null)
-
- if [[ -n "${tag}" ]] ; then
- # There is a tag that points to our current commit. Need to determine if we
- # are also on a branch, or are in a DETACHED_HEAD state.
- if [[ -z $(command git symbolic-ref HEAD 2>/dev/null) ]]; then
- # DETACHED_HEAD state. We want to append the tag name to the commit hash
- # and print it. Unfortunately, `vcs_info` blows away the hash when a tag
- # exists, so we have to manually retrieve it and clobber the branch
- # string.
- local revision
- revision=$(command git rev-list -n 1 --abbrev-commit --abbrev=${_POWERLEVEL9K_CHANGESET_HASH_LENGTH} HEAD)
- if (( _POWERLEVEL9K_HIDE_BRANCH_ICON )); then
- hook_com[branch]="${revision} $(print_icon 'VCS_TAG_ICON')${tag}"
- else
- hook_com[branch]="$(print_icon 'VCS_BRANCH_ICON')${revision} $(print_icon 'VCS_TAG_ICON')${tag}"
- fi
- else
- # We are on both a tag and a branch; print both by appending the tag name.
- hook_com[branch]+=" $(print_icon 'VCS_TAG_ICON')${tag}"
- fi
- fi
- fi
-}
-
-# Show count of stashed changes
-# Port from https://github.com/whiteinge/dotfiles/blob/5dfd08d30f7f2749cfc60bc55564c6ea239624d9/.zsh_shouse_prompt#L268
-function +vi-git-stash() {
- if [[ -s "${vcs_comm[gitdir]}/logs/refs/stash" ]] ; then
- local -a stashes=( "${(@f)"$(<${vcs_comm[gitdir]}/logs/refs/stash)"}" )
- hook_com[misc]+=" $(print_icon 'VCS_STASH_ICON')${#stashes}"
- fi
-}
-
-function +vi-hg-bookmarks() {
- if [[ -n "${hgbmarks[@]}" ]]; then
- hook_com[hg-bookmark-string]=" $(print_icon 'VCS_BOOKMARK_ICON')${hgbmarks[@]}"
-
- # To signal that we want to use the sting we just generated, set the special
- # variable `ret' to something other than the default zero:
- ret=1
- return 0
- fi
-}
-
-function +vi-vcs-detect-changes() {
- if [[ "${hook_com[vcs]}" == "git" ]]; then
-
- local remote=$(command git ls-remote --get-url 2> /dev/null)
- if [[ "$remote" =~ "github" ]] then
- vcs_visual_identifier='VCS_GIT_GITHUB_ICON'
- elif [[ "$remote" =~ "bitbucket" ]] then
- vcs_visual_identifier='VCS_GIT_BITBUCKET_ICON'
- elif [[ "$remote" =~ "stash" ]] then
- vcs_visual_identifier='VCS_GIT_BITBUCKET_ICON'
- elif [[ "$remote" =~ "gitlab" ]] then
- vcs_visual_identifier='VCS_GIT_GITLAB_ICON'
- else
- vcs_visual_identifier='VCS_GIT_ICON'
- fi
-
- elif [[ "${hook_com[vcs]}" == "hg" ]]; then
- vcs_visual_identifier='VCS_HG_ICON'
- elif [[ "${hook_com[vcs]}" == "svn" ]]; then
- vcs_visual_identifier='VCS_SVN_ICON'
- fi
-
- if [[ -n "${hook_com[staged]}" ]] || [[ -n "${hook_com[unstaged]}" ]]; then
- VCS_WORKDIR_DIRTY=true
- else
- VCS_WORKDIR_DIRTY=false
- fi
-}
-
-function +vi-svn-detect-changes() {
- local svn_status="$(svn status)"
- if [[ -n "$(echo "$svn_status" | \grep \^\?)" ]]; then
- hook_com[unstaged]+=" $(print_icon 'VCS_UNTRACKED_ICON')"
- VCS_WORKDIR_HALF_DIRTY=true
- fi
- if [[ -n "$(echo "$svn_status" | \grep \^\M)" ]]; then
- hook_com[unstaged]+=" $(print_icon 'VCS_UNSTAGED_ICON')"
- VCS_WORKDIR_DIRTY=true
- fi
- if [[ -n "$(echo "$svn_status" | \grep \^\A)" ]]; then
- hook_com[staged]+=" $(print_icon 'VCS_STAGED_ICON')"
- VCS_WORKDIR_DIRTY=true
- fi
-}
diff --git a/internal/p10k.zsh b/internal/p10k.zsh
index d72ee2bd..bd4c90d8 100755
--- a/internal/p10k.zsh
+++ b/internal/p10k.zsh
@@ -27,9 +27,229 @@ if ! autoload -Uz is-at-least || ! is-at-least 5.1; then
return 1
fi
-source "${__p9k_installation_dir}/functions/utilities.zsh"
+# For compatibility with Powerlevel9k. It's not recommended to use mnemonic color
+# names in the configuration except for colors 0-7 as these are standard.
+typeset -grA __p9k_colors=(
+ black 000 red 001 green 002 yellow 003
+ blue 004 magenta 005 cyan 006 white 007
+ grey 008 maroon 009 lime 010 olive 011
+ navy 012 fuchsia 013 aqua 014 teal 014
+ silver 015 grey0 016 navyblue 017 darkblue 018
+ blue3 020 blue1 021 darkgreen 022 deepskyblue4 025
+ dodgerblue3 026 dodgerblue2 027 green4 028 springgreen4 029
+ turquoise4 030 deepskyblue3 032 dodgerblue1 033 darkcyan 036
+ lightseagreen 037 deepskyblue2 038 deepskyblue1 039 green3 040
+ springgreen3 041 cyan3 043 darkturquoise 044 turquoise2 045
+ green1 046 springgreen2 047 springgreen1 048 mediumspringgreen 049
+ cyan2 050 cyan1 051 purple4 055 purple3 056
+ blueviolet 057 grey37 059 mediumpurple4 060 slateblue3 062
+ royalblue1 063 chartreuse4 064 paleturquoise4 066 steelblue 067
+ steelblue3 068 cornflowerblue 069 darkseagreen4 071 cadetblue 073
+ skyblue3 074 chartreuse3 076 seagreen3 078 aquamarine3 079
+ mediumturquoise 080 steelblue1 081 seagreen2 083 seagreen1 085
+ darkslategray2 087 darkred 088 darkmagenta 091 orange4 094
+ lightpink4 095 plum4 096 mediumpurple3 098 slateblue1 099
+ wheat4 101 grey53 102 lightslategrey 103 mediumpurple 104
+ lightslateblue 105 yellow4 106 darkseagreen 108 lightskyblue3 110
+ skyblue2 111 chartreuse2 112 palegreen3 114 darkslategray3 116
+ skyblue1 117 chartreuse1 118 lightgreen 120 aquamarine1 122
+ darkslategray1 123 deeppink4 125 mediumvioletred 126 darkviolet 128
+ purple 129 mediumorchid3 133 mediumorchid 134 darkgoldenrod 136
+ rosybrown 138 grey63 139 mediumpurple2 140 mediumpurple1 141
+ darkkhaki 143 navajowhite3 144 grey69 145 lightsteelblue3 146
+ lightsteelblue 147 darkolivegreen3 149 darkseagreen3 150 lightcyan3 152
+ lightskyblue1 153 greenyellow 154 darkolivegreen2 155 palegreen1 156
+ darkseagreen2 157 paleturquoise1 159 red3 160 deeppink3 162
+ magenta3 164 darkorange3 166 indianred 167 hotpink3 168
+ hotpink2 169 orchid 170 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
+ lightyellow3 187 grey84 188 lightsteelblue1 189 yellow2 190
+ darkolivegreen1 192 darkseagreen1 193 honeydew2 194 lightcyan1 195
+ red1 196 deeppink2 197 deeppink1 199 magenta2 200
+ magenta1 201 orangered1 202 indianred1 204 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 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)
+
+# For compatibility with Powerlevel9k.
+#
+# Type `getColorCode background` or `getColorCode foreground` to see the list of predefined colors.
+function getColorCode() {
+ emulate -L zsh
+ if (( ARGC == 1 )); then
+ case $1 in
+ foreground)
+ local k
+ for k in "${(k@)__p9k_colors}"; do
+ local v=${__p9k_colors[$k]}
+ print -P "%F{$v}$v - $k%f"
+ done
+ return
+ ;;
+ background)
+ local k
+ for k in "${(k@)__p9k_colors}"; do
+ local v=${__p9k_colors[$k]}
+ print -P "%K{$v}$v - $k%k"
+ done
+ return
+ ;;
+ esac
+ fi
+ echo "Usage: getColorCode background|foreground" >&2
+ return 1
+}
+
+# _p9k_declare <type> <uppercase-name> [default]...
+function _p9k_declare() {
+ local -i set=$+parameters[$2]
+ (( ARGC > 2 || set )) || return 0
+ case $1 in
+ -b)
+ if (( set )); then
+ [[ ${(P)2} == true ]] && typeset -gi _$2=1 || typeset -gi _$2=0
+ else
+ typeset -gi _$2=$3
+ fi
+ ;;
+ -a)
+ local -a v=(${(P)2})
+ if (( set )); then
+ eval "typeset -ga _${(q)2}=(${(@qq)v})";
+ else
+ if [[ $3 != '--' ]]; then
+ echo "internal error in _p9k_declare " "${(qqq)@}" >&2
+ fi
+ eval "typeset -ga _${(q)2}=(${(@qq)*[4,-1]})"
+ fi
+ ;;
+ -i)
+ (( set )) && typeset -gi _$2=$2 || typeset -gi _$2=$3
+ ;;
+ -F)
+ (( set )) && typeset -gF _$2=$2 || typeset -gF _$2=$3
+ ;;
+ -s)
+ (( set )) && typeset -g _$2=${(P)2} || typeset -g _$2=$3
+ ;;
+ -e)
+ if (( set )); then
+ local v=${(P)2}
+ typeset -g _$2=${(g::)v}
+ else
+ typeset -g _$2=${(g::)3}
+ fi
+ ;;
+ *)
+ echo "internal error in _p9k_declare " "${(qqq)@}" >&2
+ esac
+}
+
+# If we execute `print -P $1`, how many characters will be printed on the last line?
+# Assumes that `%{%}` and `%G` don't lie.
+#
+# _p9k_prompt_length '' => 0
+# _p9k_prompt_length 'abc' => 3
+# _p9k_prompt_length $'abc\nxy' => 2
+# _p9k_prompt_length $'\t' => 8
+# _p9k_prompt_length '%F{red}abc' => 3
+# _p9k_prompt_length $'%{a\b%Gb%}' => 1
+function _p9k_prompt_length() {
+ emulate -L zsh
+ local COLUMNS=1024
+ local -i x y=$#1 m
+ if (( y )); then
+ while (( ${${(%):-$1%$y(l.1.0)}[-1]} )); do
+ x=y
+ (( y *= 2 ));
+ done
+ local xy
+ while (( y > x + 1 )); do
+ m=$(( x + (y - x) / 2 ))
+ typeset ${${(%):-$1%$m(l.x.y)}[-1]}=$m
+ done
+ fi
+ _p9k_ret=$x
+}
+
+typeset -gr __p9k_byte_suffix=('B' 'K' 'M' 'G' 'T' 'P' 'E' 'Z' 'Y')
+
+# 42 => 42B
+# 1536 => 1.5K
+function _p9k_human_readable_bytes() {
+ typeset -F 2 n=$1
+ local suf
+ for suf in $__p9k_byte_suffix; do
+ (( n < 100 )) && break
+ (( n /= 1024 ))
+ done
+ _p9k_ret=$n$suf
+}
+
+# Determine if the passed segment is used in the prompt
+#
+# Pass the name of the segment to this function to test for its presence in
+# either the LEFT or RIGHT prompt arrays.
+# * $1: The segment to be tested.
+segment_in_use() {
+ (( $_POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[(I)$1(|_joined)] ||
+ $_POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[(I)$1(|_joined)] ))
+}
+
+function _p9k_parse_ip() {
+ local desiredInterface=${1:-'^[^ ]+'}
+
+ if [[ $_p9k_os == OSX ]]; then
+ [[ -x /sbin/ifconfig ]] || return
+ local rawInterfaces && rawInterfaces="$(/sbin/ifconfig -l 2>/dev/null)" || return
+ local -a interfaces=(${(A)=rawInterfaces})
+ local pattern="${desiredInterface}[^ ]?"
+ local -a relevantInterfaces
+ for rawInterface in $interfaces; do
+ [[ "$rawInterface" =~ $pattern ]] && relevantInterfaces+=$MATCH
+ done
+ local newline=$'\n'
+ local interfaceName interface
+ for interfaceName in $relevantInterfaces; do
+ interface="$(/sbin/ifconfig $interfaceName 2>/dev/null)" || continue
+ [[ "${interface}" =~ "lo[0-9]*" ]] && continue
+ if [[ "${interface//${newline}/}" =~ "<([^>]*)>(.*)inet[ ]+([^ ]*)" ]]; then
+ local ipFound="${match[3]}"
+ local -a interfaceStates=(${(s:,:)match[1]})
+ if (( ${interfaceStates[(I)UP]} )); then
+ _p9k_ret=$ipFound
+ return
+ fi
+ fi
+ done
+ else
+ [[ -x /sbin/ip ]] || return
+ local -a interfaces=( "${(f)$(/sbin/ip -brief -4 a show 2>/dev/null)}" )
+ local pattern="^${desiredInterface}[[:space:]]+UP[[:space:]]+([^/ ]+)"
+ local interface
+ for interface in "${(@)interfaces}"; do
+ if [[ "$interface" =~ $pattern ]]; then
+ _p9k_ret=$match[1]
+ return
+ fi
+ done
+ fi
+
+ return 1
+}
+
source "${__p9k_installation_dir}/functions/icons.zsh"
-source "${__p9k_installation_dir}/functions/colors.zsh"
source "${__p9k_installation_dir}/functions/vcs.zsh"
# Caching allows storing array-to-array associations. It should be used like this:
@@ -1970,6 +2190,171 @@ typeset -gA __p9k_vcs_states=(
'LOADING' '8'
)
+function +vi-git-untracked() {
+ [[ -z "${vcs_comm[gitdir]}" || "${vcs_comm[gitdir]}" == "." ]] && return
+
+ # get the root for the current repo or submodule
+ local repoTopLevel="$(command git rev-parse --show-toplevel 2> /dev/null)"
+ # dump out if we're outside a git repository (which includes being in the .git folder)
+ [[ $? != 0 || -z $repoTopLevel ]] && return
+
+ local untrackedFiles=$(command git ls-files --others --exclude-standard "${repoTopLevel}" 2> /dev/null)
+
+ if [[ -z $untrackedFiles && $_POWERLEVEL9K_VCS_SHOW_SUBMODULE_DIRTY == 1 ]]; then
+ untrackedFiles+=$(command git submodule foreach --quiet --recursive 'command git ls-files --others --exclude-standard' 2> /dev/null)
+ fi
+
+ [[ -z $untrackedFiles ]] && return
+
+ hook_com[unstaged]+=" $(print_icon 'VCS_UNTRACKED_ICON')"
+ VCS_WORKDIR_HALF_DIRTY=true
+}
+
+function +vi-git-aheadbehind() {
+ local ahead behind
+ local -a gitstatus
+
+ # for git prior to 1.7
+ # ahead=$(command git rev-list origin/${hook_com[branch]}..HEAD | wc -l)
+ ahead=$(command git rev-list --count "${hook_com[branch]}"@{upstream}..HEAD 2>/dev/null)
+ (( ahead )) && gitstatus+=( " $(print_icon 'VCS_OUTGOING_CHANGES_ICON')${ahead// /}" )
+
+ # for git prior to 1.7
+ # behind=$(command git rev-list HEAD..origin/${hook_com[branch]} | wc -l)
+ behind=$(command git rev-list --count HEAD.."${hook_com[branch]}"@{upstream} 2>/dev/null)
+ (( behind )) && gitstatus+=( " $(print_icon 'VCS_INCOMING_CHANGES_ICON')${behind// /}" )
+
+ hook_com[misc]+=${(j::)gitstatus}
+}
+
+function +vi-git-remotebranch() {
+ local remote
+ local branch_name="${hook_com[branch]}"
+
+ # Are we on a remote-tracking branch?
+ remote=${$(command git rev-parse --verify HEAD@{upstream} --symbolic-full-name 2>/dev/null)/refs\/(remotes|heads)\/}
+
+ if (( $+_POWERLEVEL9K_VCS_SHORTEN_LENGTH && $+_POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH )); then
+ if (( ${#hook_com[branch]} > _POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH && ${#hook_com[branch]} > _POWERLEVEL9K_VCS_SHORTEN_LENGTH )); then
+ case $_POWERLEVEL9K_VCS_SHORTEN_STRATEGY in
+ truncate_middle)
+ hook_com[branch]="${branch_name:0:$_POWERLEVEL9K_VCS_SHORTEN_LENGTH}${_POWERLEVEL9K_VCS_SHORTEN_DELIMITER}${branch_name: -$_POWERLEVEL9K_VCS_SHORTEN_LENGTH}"
+ ;;
+ truncate_from_right)
+ hook_com[branch]="${branch_name:0:$_POWERLEVEL9K_VCS_SHORTEN_LENGTH}${_POWERLEVEL9K_VCS_SHORTEN_DELIMITER}"
+ ;;
+ esac
+ fi
+ fi
+
+ if (( _POWERLEVEL9K_HIDE_BRANCH_ICON )); then
+ hook_com[branch]="${hook_com[branch]}"
+ else
+ hook_com[branch]="$(print_icon 'VCS_BRANCH_ICON')${hook_com[branch]}"
+ fi
+ # Always show the remote
+ #if [[ -n ${remote} ]] ; then
+ # Only show the remote if it differs from the local
+ if [[ -n ${remote} ]] && [[ "${remote#*/}" != "${branch_name}" ]] ; then
+ hook_com[branch]+="$(print_icon 'VCS_REMOTE_BRANCH_ICON')${remote// /}"
+ fi
+}
+
+function +vi-git-tagname() {
+ if (( !_POWERLEVEL9K_VCS_HIDE_TAGS )); then
+ # If we are on a tag, append the tagname to the current branch string.
+ local tag
+ tag=$(command git describe --tags --exact-match HEAD 2>/dev/null)
+
+ if [[ -n "${tag}" ]] ; then
+ # There is a tag that points to our current commit. Need to determine if we
+ # are also on a branch, or are in a DETACHED_HEAD state.
+ if [[ -z $(command git symbolic-ref HEAD 2>/dev/null) ]]; then
+ # DETACHED_HEAD state. We want to append the tag name to the commit hash
+ # and print it. Unfortunately, `vcs_info` blows away the hash when a tag
+ # exists, so we have to manually retrieve it and clobber the branch
+ # string.
+ local revision
+ revision=$(command git rev-list -n 1 --abbrev-commit --abbrev=${_POWERLEVEL9K_CHANGESET_HASH_LENGTH} HEAD)
+ if (( _POWERLEVEL9K_HIDE_BRANCH_ICON )); then
+ hook_com[branch]="${revision} $(print_icon 'VCS_TAG_ICON')${tag}"
+ else
+ hook_com[branch]="$(print_icon 'VCS_BRANCH_ICON')${revision} $(print_icon 'VCS_TAG_ICON')${tag}"
+ fi
+ else
+ # We are on both a tag and a branch; print both by appending the tag name.
+ hook_com[branch]+=" $(print_icon 'VCS_TAG_ICON')${tag}"
+ fi
+ fi
+ fi
+}
+
+# Show count of stashed changes
+# Port from https://github.com/whiteinge/dotfiles/blob/5dfd08d30f7f2749cfc60bc55564c6ea239624d9/.zsh_shouse_prompt#L268
+function +vi-git-stash() {
+ if [[ -s "${vcs_comm[gitdir]}/logs/refs/stash" ]] ; then
+ local -a stashes=( "${(@f)"$(<${vcs_comm[gitdir]}/logs/refs/stash)"}" )
+ hook_com[misc]+=" $(print_icon 'VCS_STASH_ICON')${#stashes}"
+ fi
+}
+
+function +vi-hg-bookmarks() {
+ if [[ -n "${hgbmarks[@]}" ]]; then
+ hook_com[hg-bookmark-string]=" $(print_icon 'VCS_BOOKMARK_ICON')${hgbmarks[@]}"
+
+ # To signal that we want to use the sting we just generated, set the special
+ # variable `ret' to something other than the default zero:
+ ret=1
+ return 0
+ fi
+}
+
+function +vi-vcs-detect-changes() {
+ if [[ "${hook_com[vcs]}" == "git" ]]; then
+
+ local remote=$(command git ls-remote --get-url 2> /dev/null)
+ if [[ "$remote" =~ "github" ]] then
+ vcs_visual_identifier='VCS_GIT_GITHUB_ICON'
+ elif [[ "$remote" =~ "bitbucket" ]] then
+ vcs_visual_identifier='VCS_GIT_BITBUCKET_ICON'
+ elif [[ "$remote" =~ "stash" ]] then
+ vcs_visual_identifier='VCS_GIT_BITBUCKET_ICON'
+ elif [[ "$remote" =~ "gitlab" ]] then
+ vcs_visual_identifier='VCS_GIT_GITLAB_ICON'
+ else
+ vcs_visual_identifier='VCS_GIT_ICON'
+ fi
+
+ elif [[ "${hook_com[vcs]}" == "hg" ]]; then
+ vcs_visual_identifier='VCS_HG_ICON'
+ elif [[ "${hook_com[vcs]}" == "svn" ]]; then
+ vcs_visual_identifier='VCS_SVN_ICON'
+ fi
+
+ if [[ -n "${hook_com[staged]}" ]] || [[ -n "${hook_com[unstaged]}" ]]; then
+ VCS_WORKDIR_DIRTY=true
+ else
+ VCS_WORKDIR_DIRTY=false
+ fi
+}
+
+function +vi-svn-detect-changes() {
+ local svn_status="$(svn status)"
+ if [[ -n "$(echo "$svn_status" | \grep \^\?)" ]]; then
+ hook_com[unstaged]+=" $(print_icon 'VCS_UNTRACKED_ICON')"
+ VCS_WORKDIR_HALF_DIRTY=true
+ fi
+ if [[ -n "$(echo "$svn_status" | \grep \^\M)" ]]; then
+ hook_com[unstaged]+=" $(print_icon 'VCS_UNSTAGED_ICON')"
+ VCS_WORKDIR_DIRTY=true
+ fi
+ if [[ -n "$(echo "$svn_status" | \grep \^\A)" ]]; then
+ hook_com[staged]+=" $(print_icon 'VCS_STAGED_ICON')"
+ VCS_WORKDIR_DIRTY=true
+ fi
+}
+
+
powerlevel9k_vcs_init() {
autoload -Uz vcs_info