mirror of
https://github.com/romkatv/powerlevel10k.git
synced 2024-12-23 15:41:57 +00:00
inline colors.zsh, utilities.zsh and vcs.zsh
This commit is contained in:
parent
4a9f441c7b
commit
be1a97bf47
4 changed files with 387 additions and 593 deletions
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue