aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xfunctions/colors.zsh297
-rwxr-xr-xfunctions/utilities.zsh142
-rwxr-xr-xfunctions/vcs.zsh165
-rwxr-xr-xinternal/icons.zsh (renamed from functions/icons.zsh)55
-rwxr-xr-xinternal/p10k.zsh3070
-rwxr-xr-xpowerlevel9k.zsh-theme17
6 files changed, 1759 insertions, 1987 deletions
diff --git a/functions/colors.zsh b/functions/colors.zsh
deleted file mode 100755
index d8b7cbe8..00000000
--- a/functions/colors.zsh
+++ /dev/null
@@ -1,297 +0,0 @@
-# vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8
-################################################################
-# Color functions
-# This file holds some color-functions for
-# the powerlevel9k-ZSH-theme
-# https://github.com/bhilburn/powerlevel9k
-################################################################
-
-# https://jonasjacek.github.io/colors/
-# use color names by default to allow dark/light themes to adjust colors based on names
-typeset -gAh __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 user convenience: type `getColorCode background` or `getColorCode foreground` to see
-# the list of predefined colors.
-function getColorCode() {
- 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 5d32370c..00000000
--- a/functions/utilities.zsh
+++ /dev/null
@@ -1,142 +0,0 @@
-# vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8
-################################################################
-# Utility functions
-# This file holds some utility-functions for
-# the powerlevel9k-ZSH-theme
-# https://github.com/bhilburn/powerlevel9k
-################################################################
-
-# Usage: set_default [OPTION]... NAME [VALUE]...
-#
-# Options are the same as in `typeset`.
-function set_default() {
- emulate -L zsh
- local -a flags=(-g)
- while true; do
- case $1 in
- --) shift; break;;
- -*) flags+=$1; shift;;
- *) break;
- esac
- done
-
- local varname=$1
- shift
- if [[ -n ${(tP)varname} ]]; then
- typeset $flags $varname
- elif [[ "$flags" == *[aA]* ]]; then
- eval "typeset ${(@q)flags} ${(q)varname}=(${(qq)@})"
- else
- typeset $flags $varname="$*"
- fi
-}
-
-function _p9k_g_expand() {
- (( $+parameters[$1] )) || return
- local -a ts=("${=$(typeset -p $1)}")
- shift ts
- local x
- for x in "${ts[@]}"; do
- [[ $x == -* ]] || break
- # Don't change readonly variables. Ideally, we shouldn't modify any variables at all,
- # but for now this will do.
- [[ $x == -*r* ]] && return
- done
- typeset -g $1=${(g::)${(P)1}}
-}
-
-# 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_RETVAL=$x
-}
-
-typeset -g _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_RETVAL=$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() {
- local key=$1
- [[ -n "${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[(r)${key}]}" ||
- -n "${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[(r)${key}_joined]}" ||
- -n "${POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[(r)${key}]}" ||
- -n "${POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[(r)${key}_joined]}" ]]
-}
-
-function _p9k_parse_ip() {
- local desiredInterface=${1:-'^[^ ]+'}
-
- if [[ $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_RETVAL=$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_RETVAL=$match[1]
- return
- fi
- done
- fi
-
- return 1
-}
diff --git a/functions/vcs.zsh b/functions/vcs.zsh
deleted file mode 100755
index d89525fd..00000000
--- a/functions/vcs.zsh
+++ /dev/null
@@ -1,165 +0,0 @@
-# vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8
-################################################################
-# vcs
-# This file holds supplemental VCS functions
-# for the powerlevel9k-ZSH-theme
-# https://github.com/bhilburn/powerlevel9k
-################################################################
-
-set_default POWERLEVEL9K_VCS_SHOW_SUBMODULE_DIRTY false
-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" == "true" ]]; 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 [[ -n "$POWERLEVEL9K_VCS_SHORTEN_LENGTH" ]] && [[ -n "$POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH" ]]; then
- if [ ${#hook_com[branch]} -gt ${POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH} ] && [ ${#hook_com[branch]} -gt ${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
-
- hook_com[branch]="$(print_icon 'VCS_BRANCH_ICON')${hook_com[branch]}"
- # 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
-}
-
-set_default POWERLEVEL9K_VCS_HIDE_TAGS false
-function +vi-git-tagname() {
- if [[ "$POWERLEVEL9K_VCS_HIDE_TAGS" == "false" ]]; 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_VCS_INTERNAL_HASH_LENGTH} HEAD)
- hook_com[branch]="$(print_icon 'VCS_BRANCH_ICON')${revision} $(print_icon 'VCS_TAG_ICON')${tag}"
- 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/functions/icons.zsh b/internal/icons.zsh
index 64f6a04e..658c7703 100755
--- a/functions/icons.zsh
+++ b/internal/icons.zsh
@@ -1,34 +1,15 @@
-# vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8
-################################################################
-# icons
-# This file holds the icon definitions and
-# icon-functions for the powerlevel9k-ZSH-theme
-# https://github.com/bhilburn/powerlevel9k
-################################################################
-
-# These characters require the Powerline fonts to work properly. If you see
-# boxes or bizarre characters below, your fonts are not correctly installed. If
-# you do not want to install a special font, you can set `POWERLEVEL9K_MODE` to
-# `compatible`. This shows all icons in regular symbols.
-
-# Initialize the icon list according to the user's `POWERLEVEL9K_MODE`.
-typeset -gAH icons
-
-set_default POWERLEVEL9K_HIDE_BRANCH_ICON false
-set_default POWERLEVEL9K_MODE ""
-
-typeset -gi _P9K_ICONS_INITIALIZED=0
+typeset -gA icons
function _p9k_init_icons() {
- (( _P9K_ICONS_INITIALIZED )) && return
- _P9K_ICONS_INITIALIZED=1
+ [[ $+_p9k_icon_mode == 1 && $_p9k_icon_mode == $POWERLEVEL9K_MODE ]] && return
+ typeset -g _p9k_icon_mode=$POWERLEVEL9K_MODE
+
+ local LC_ALL=C.UTF-8
case $POWERLEVEL9K_MODE in
'flat'|'awesome-patched')
# Awesome-Patched Font required! See:
# https://github.com/gabrielelana/awesome-terminal-fonts/tree/patching-strategy/patched
- # Set the right locale to protect special characters
- local LC_ALL="" LC_CTYPE="en_US.UTF-8"
icons=(
RULER_CHAR $'\u2500' # ─
LEFT_SEGMENT_SEPARATOR $'\uE0B0' # 
@@ -131,8 +112,6 @@ function _p9k_init_icons() {
'awesome-fontconfig')
# fontconfig with awesome-font required! See
# https://github.com/gabrielelana/awesome-terminal-fonts
- # Set the right locale to protect special characters
- local LC_ALL="" LC_CTYPE="en_US.UTF-8"
icons=(
RULER_CHAR $'\u2500' # ─
LEFT_SEGMENT_SEPARATOR $'\uE0B0' # 
@@ -232,16 +211,12 @@ function _p9k_init_icons() {
# mapped fontconfig with awesome-font required! See
# https://github.com/gabrielelana/awesome-terminal-fonts
# don't forget to source the font maps in your startup script
- # Set the right locale to protect special characters
- local LC_ALL="" LC_CTYPE="en_US.UTF-8"
-
if [ -z "$AWESOME_GLYPHS_LOADED" ]; then
echo "Powerlevel9k warning: Awesome-Font mappings have not been loaded.
Source a font mapping in your shell config, per the Awesome-Font docs
(https://github.com/gabrielelana/awesome-terminal-fonts),
Or use a different Powerlevel9k font configuration.";
fi
-
icons=(
RULER_CHAR $'\u2500' # ─
LEFT_SEGMENT_SEPARATOR $'\uE0B0' # 
@@ -337,8 +312,6 @@ function _p9k_init_icons() {
# nerd-font patched (complete) font required! See
# https://github.com/ryanoasis/nerd-fonts
# http://nerdfonts.com/#cheat-sheet
- # Set the right locale to protect special characters
- local LC_ALL="" LC_CTYPE="en_US.UTF-8"
icons=(
RULER_CHAR $'\u2500' # ─
LEFT_SEGMENT_SEPARATOR $'\uE0B0' # 
@@ -437,8 +410,6 @@ function _p9k_init_icons() {
*)
# Powerline-Patched Font required!
# See https://github.com/Lokaltog/powerline-fonts
- # Set the right locale to protect special characters
- local LC_ALL="" LC_CTYPE="en_US.UTF-8"
icons=(
RULER_CHAR $'\u2500' # ─
LEFT_SEGMENT_SEPARATOR $'\uE0B0' # 
@@ -539,30 +510,22 @@ function _p9k_init_icons() {
# Override the above icon settings with any user-defined variables.
case $POWERLEVEL9K_MODE in
'flat')
- # Set the right locale to protect special characters
- local LC_ALL="" LC_CTYPE="en_US.UTF-8"
icons[LEFT_SEGMENT_SEPARATOR]=''
icons[RIGHT_SEGMENT_SEPARATOR]=''
icons[LEFT_SUBSEGMENT_SEPARATOR]='|'
icons[RIGHT_SUBSEGMENT_SEPARATOR]='|'
;;
'compatible')
- # Set the right locale to protect special characters
- local LC_ALL="" LC_CTYPE="en_US.UTF-8"
icons[LEFT_SEGMENT_SEPARATOR]=$'\u2B80' # ⮀
icons[RIGHT_SEGMENT_SEPARATOR]=$'\u2B82' # ⮂
icons[VCS_BRANCH_ICON]='@'
;;
esac
-
- if [[ "$POWERLEVEL9K_HIDE_BRANCH_ICON" == true ]]; then
- icons[VCS_BRANCH_ICON]=''
- fi
}
-# Safety function for printing icons
-# Prints the named icon, or if that icon is undefined, the string name.
+# Sadly, this is a part of public API. Its use is emphatically discouraged.
function print_icon() {
+ emulate -L zsh
_p9k_init_icons
local icon_name=$1
local var_name=POWERLEVEL9K_${icon_name}
@@ -573,11 +536,13 @@ function print_icon() {
fi
}
-# Get a list of configured icons
+# Prints a list of configured icons.
+#
# * $1 string - If "original", then the original icons are printed,
# otherwise "print_icon" is used, which takes the users
# overrides into account.
function get_icon_names() {
+ emulate -L zsh
_p9k_init_icons
# Iterate over a ordered list of keys of the icons array
for key in ${(@kon)icons}; do
diff --git a/internal/p10k.zsh b/internal/p10k.zsh
index d6806bfc..8e6c4f0a 100755
--- a/internal/p10k.zsh
+++ b/internal/p10k.zsh
@@ -1,4 +1,4 @@
-if ! autoload -U is-at-least || ! is-at-least 5.1; then
+if ! autoload -Uz is-at-least || ! is-at-least 5.1; then
() {
>&2 echo -E "You are using ZSH version $ZSH_VERSION. The minimum required version for Powerlevel10k is 5.1."
>&2 echo -E "Type 'echo \$ZSH_VERSION' to see your current zsh version."
@@ -9,7 +9,7 @@ if ! autoload -U is-at-least || ! is-at-least 5.1; then
>&2 echo -E "The shell you are currently running is likely $cur."
fi
local other=${${:-zsh}:c}
- if [[ -n $other ]] && $other -c 'autoload -U is-at-least && is-at-least 5.1' &>/dev/null; then
+ if [[ -n $other ]] && $other -c 'autoload -Uz is-at-least && is-at-least 5.1' &>/dev/null; then
local other_v=$($other -c 'echo -E $ZSH_VERSION' 2>/dev/null)
if [[ -n $other_v && $other_v != $ZSH_VERSION ]]; then
>&2 echo -E "You have $other with version $other_v but this is not what you are using."
@@ -27,25 +27,229 @@ if ! autoload -U is-at-least || ! is-at-least 5.1; then
return 1
fi
-source "${_p9k_installation_dir}/functions/utilities.zsh"
-source "${_p9k_installation_dir}/functions/icons.zsh"
-source "${_p9k_installation_dir}/functions/colors.zsh"
-source "${_p9k_installation_dir}/functions/vcs.zsh"
-
-typeset -g _P9K_RETVAL
-typeset -g _P9K_CACHE_KEY
-typeset -ga _P9K_CACHE_VAL
-typeset -gA _P9K_CACHE
-typeset -ga _P9K_T
-typeset -g _P9K_N
-typeset -gi _P9K_I
-typeset -g _P9K_BG
-typeset -g _P9K_F
-
-# Specifies the maximum number of elements in the cache. When the cache grows over this limit,
-# it gets cleared. This is meant to avoid memory leaks when a rogue prompt is filling the cache
-# with data.
-set_default -i POWERLEVEL9K_MAX_CACHE_SIZE 10000
+source "${__p9k_installation_dir}/internal/icons.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 && setopt no_hist_expand extended_glob
+ 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 && setopt no_hist_expand extended_glob
+ 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
+}
# Caching allows storing array-to-array associations. It should be used like this:
#
@@ -53,7 +257,7 @@ set_default -i POWERLEVEL9K_MAX_CACHE_SIZE 10000
# # Compute val1 and val2 and then store them in the cache.
# _p9k_cache_set "$val1" "$val2"
# fi
-# # Here ${_P9K_CACHE_VAL[1]} and ${_P9K_CACHE_VAL[2]} are $val1 and $val2 respectively.
+# # Here ${_p9k_cache_val[1]} and ${_p9k_cache_val[2]} are $val1 and $val2 respectively.
#
# Limitations:
#
@@ -63,147 +267,143 @@ set_default -i POWERLEVEL9K_MAX_CACHE_SIZE 10000
# and _p9k_cache_set.
_p9k_cache_set() {
# Uncomment to see cache misses.
- # echo "caching: ${(@0q)_P9K_CACHE_KEY} => (${(q)@})" >&2
- _P9K_CACHE[$_P9K_CACHE_KEY]="${(pj:\0:)*}0"
- _P9K_CACHE_VAL=("$@")
- (( $#_P9K_CACHE < POWERLEVEL9K_MAX_CACHE_SIZE )) || typeset -gAH _P9K_CACHE=()
+ # echo "caching: ${(@0q)_p9k_cache_key} => (${(q)@})" >&2
+ _p9k_cache[$_p9k_cache_key]="${(pj:\0:)*}0"
+ _p9k_cache_val=("$@")
}
_p9k_cache_get() {
- _P9K_CACHE_KEY="${(pj:\0:)*}"
- local v=$_P9K_CACHE[$_P9K_CACHE_KEY]
- [[ -n $v ]] && _P9K_CACHE_VAL=("${(@0)${v[1,-2]}}")
+ _p9k_cache_key="${(pj:\0:)*}"
+ local v=$_p9k_cache[$_p9k_cache_key]
+ [[ -n $v ]] && _p9k_cache_val=("${(@0)${v[1,-2]}}")
}
-typeset -ga _P9K_LEFT_JOIN=(1)
-typeset -ga _P9K_RIGHT_JOIN=(1)
-
# _p9k_param prompt_foo_BAR BACKGROUND red
_p9k_param() {
local key="_p9k_param ${(pj:\0:)*}"
- _P9K_RETVAL=$_P9K_CACHE[key]
- if [[ -n $_P9K_RETVAL ]]; then
- _P9K_RETVAL[-1,-1]=''
+ _p9k_ret=$_p9k_cache[$key]
+ if [[ -n $_p9k_ret ]]; then
+ _p9k_ret[-1,-1]=''
else
if [[ $1 == (#b)prompt_([a-z0-9_]#)(*) ]]; then
local var=POWERLEVEL9K_${(U)match[1]}$match[2]_$2
if (( $+parameters[$var] )); then
- _P9K_RETVAL=${(P)var}
+ _p9k_ret=${(P)var}
else
var=POWERLEVEL9K_${(U)match[1]%_}_$2
if (( $+parameters[$var] )); then
- _P9K_RETVAL=${(P)var}
+ _p9k_ret=${(P)var}
else
var=POWERLEVEL9K_$2
if (( $+parameters[$var] )); then
- _P9K_RETVAL=${(P)var}
+ _p9k_ret=${(P)var}
else
- _P9K_RETVAL=$3
+ _p9k_ret=$3
fi
fi
fi
else
local var=POWERLEVEL9K_$2
if (( $+parameters[$var] )); then
- _P9K_RETVAL=${(P)var}
+ _p9k_ret=${(P)var}
else
- _P9K_RETVAL=$3
+ _p9k_ret=$3
fi
fi
- _P9K_CACHE[$key]=${_P9K_RETVAL}.
+ _p9k_cache[$key]=${_p9k_ret}.
fi
}
# _p9k_get_icon prompt_foo_BAR BAZ_ICON quix
_p9k_get_icon() {
local key="_p9k_param ${(pj:\0:)*}"
- _P9K_RETVAL=$_P9K_CACHE[key]
- if [[ -n $_P9K_RETVAL ]]; then
- _P9K_RETVAL[-1,-1]=''
+ _p9k_ret=$_p9k_cache[$key]
+ if [[ -n $_p9k_ret ]]; then
+ _p9k_ret[-1,-1]=''
else
if [[ $2 == $'\1'* ]]; then
- _P9K_RETVAL=${2[2,-1]}
+ _p9k_ret=${2[2,-1]}
else
_p9k_param "$@" ${icons[$2]-$'\1'$3}
- if [[ $_P9K_RETVAL == $'\1'* ]]; then
- _P9K_RETVAL=${_P9K_RETVAL[2,-1]}
+ if [[ $_p9k_ret == $'\1'* ]]; then
+ _p9k_ret=${_p9k_ret[2,-1]}
else
- _P9K_RETVAL=${(g::)_P9K_RETVAL}
- [[ $_P9K_RETVAL != $'\b'? ]] || _P9K_RETVAL="%{$_P9K_RETVAL%}" # penance for past sins
+ _p9k_ret=${(g::)_p9k_ret}
+ [[ $_p9k_ret != $'\b'? ]] || _p9k_ret="%{$_p9k_ret%}" # penance for past sins
fi
fi
- _P9K_CACHE[$key]=${_P9K_RETVAL}.
+ _p9k_cache[$key]=${_p9k_ret}.
fi
}
_p9k_translate_color() {
if [[ $1 == <-> ]]; then # decimal color code: 255
- _P9K_RETVAL=$1
+ _p9k_ret=$1
elif [[ $1 == '#'[[:xdigit:]]## ]]; then # hexademical color code: #ffffff
- _P9K_RETVAL=$1
+ _p9k_ret=$1
else # named color: red
# Strip prifixes if there are any.
- _P9K_RETVAL=$__P9K_COLORS[${${${1#bg-}#fg-}#br}]
+ _p9k_ret=$__p9k_colors[${${${1#bg-}#fg-}#br}]
fi
}
# _p9k_param prompt_foo_BAR BACKGROUND red
_p9k_color() {
local key="_p9k_color ${(pj:\0:)*}"
- _P9K_RETVAL=$_P9K_CACHE[key]
- if [[ -n $_P9K_RETVAL ]]; then
- _P9K_RETVAL[-1,-1]=''
+ _p9k_ret=$_p9k_cache[$key]
+ if [[ -n $_p9k_ret ]]; then
+ _p9k_ret[-1,-1]=''
else
_p9k_param "$@"
- _p9k_translate_color $_P9K_RETVAL
- _P9K_CACHE[$key]=${_P9K_RETVAL}.
+ _p9k_translate_color $_p9k_ret
+ _p9k_cache[$key]=${_p9k_ret}.
fi
}
# _p9k_vcs_color CLEAN REMOTE_BRANCH
_p9k_vcs_style() {
local key="_p9k_vcs_color ${(pj:\0:)*}"
- _P9K_RETVAL=$_P9K_CACHE[key]
- if [[ -n $_P9K_RETVAL ]]; then
- _P9K_RETVAL[-1,-1]=''
+ _p9k_ret=$_p9k_cache[$key]
+ if [[ -n $_p9k_ret ]]; then
+ _p9k_ret[-1,-1]=''
else
local style=%b # TODO: support bold
- _p9k_color prompt_vcs_$1 BACKGROUND "${vcs_states[$1]}"
- _p9k_background $_P9K_RETVAL
- style+=$_P9K_RETVAL
+ _p9k_color prompt_vcs_$1 BACKGROUND "${__p9k_vcs_states[$1]}"
+ _p9k_background $_p9k_ret
+ style+=$_p9k_ret
local var=POWERLEVEL9K_VCS_${1}_${2}FORMAT_FOREGROUND
if (( $+parameters[$var] )); then
- _P9K_RETVAL=${(P)var}
+ _p9k_ret=${(P)var}
else
var=POWERLEVEL9K_VCS_${2}FORMAT_FOREGROUND
if (( $+parameters[$var] )); then
- _P9K_RETVAL=${(P)var}
+ _p9k_ret=${(P)var}
else
- _p9k_color prompt_vcs_$1 FOREGROUND "$DEFAULT_COLOR"
+ _p9k_color prompt_vcs_$1 FOREGROUND "$_p9k_color1"
fi
fi
- _p9k_foreground $_P9K_RETVAL
- _P9K_RETVAL=$style$_P9K_RETVAL
- _P9K_CACHE[$key]=${_P9K_RETVAL}.
+ _p9k_foreground $_p9k_ret
+ _p9k_ret=$style$_p9k_ret
+ _p9k_cache[$key]=${_p9k_ret}.
fi
}
_p9k_background() {
- [[ -n $1 ]] && _P9K_RETVAL="%K{$1}" || _P9K_RETVAL="%k"
+ [[ -n $1 ]] && _p9k_ret="%K{$1}" || _p9k_ret="%k"
}
_p9k_foreground() {
- [[ -n $1 ]] && _P9K_RETVAL="%F{$1}" || _P9K_RETVAL="%f"
+ [[ -n $1 ]] && _p9k_ret="%F{$1}" || _p9k_ret="%f"
}
_p9k_escape_rcurly() {
- _P9K_RETVAL=${${1//\\/\\\\}//\}/\\\}}
+ _p9k_ret=${${1//\\/\\\\}//\}/\\\}}
}
_p9k_escape() {
- [[ $1 == *["~!#\$^&*()\\\"'<>?{}[]"]* ]] && _P9K_RETVAL="\${(Q)\${:-${(qqq)${(q)1}}}}" || _P9K_RETVAL=$1
+ [[ $1 == *["~!#\$^&*()\\\"'<>?{}[]"]* ]] && _p9k_ret="\${(Q)\${:-${(qqq)${(q)1}}}}" || _p9k_ret=$1
}
# * $1: Name of the function that was originally invoked.
@@ -216,104 +416,103 @@ _p9k_escape() {
# * $7: If not empty but becomes empty after parameter expansion and process substitution,
# the segment isn't rendered.
# * $8: Content.
-set_default POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS " "
left_prompt_segment() {
if ! _p9k_cache_get "$0" "$1" "$2" "$3" "$4" "$5"; then
_p9k_color $1 BACKGROUND $3
- local bg_color=$_P9K_RETVAL
+ local bg_color=$_p9k_ret
_p9k_background $bg_color
- local bg=$_P9K_RETVAL
+ local bg=$_p9k_ret
_p9k_color $1 FOREGROUND $4
- local fg_color=$_P9K_RETVAL
+ local fg_color=$_p9k_ret
_p9k_foreground $fg_color
- local fg=$_P9K_RETVAL
+ local fg=$_p9k_ret
_p9k_get_icon $1 LEFT_SEGMENT_SEPARATOR
- local sep=$_P9K_RETVAL
- _p9k_escape $_P9K_RETVAL
- local sep_=$_P9K_RETVAL
+ local sep=$_p9k_ret
+ _p9k_escape $_p9k_ret
+ local sep_=$_p9k_ret
_p9k_get_icon $1 LEFT_SUBSEGMENT_SEPARATOR
- _p9k_escape $_P9K_RETVAL
- local subsep_=$_P9K_RETVAL
+ _p9k_escape $_p9k_ret
+ local subsep_=$_p9k_ret
local icon_
if [[ -n $5 ]]; then
_p9k_get_icon $1 $5
- _p9k_escape $_P9K_RETVAL
- icon_=$_P9K_RETVAL
+ _p9k_escape $_p9k_ret
+ icon_=$_p9k_ret
fi
_p9k_get_icon $1 LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL
- local start_sep=$_P9K_RETVAL
+ local start_sep=$_p9k_ret
[[ -n $start_sep ]] && start_sep="%b%k%F{$bg_color}$start_sep"
_p9k_get_icon $1 LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL $sep
- _p9k_escape $_P9K_RETVAL
- local end_sep_=$_P9K_RETVAL
+ _p9k_escape $_p9k_ret
+ local end_sep_=$_p9k_ret
local style=%b$bg$fg
_p9k_escape_rcurly $style
- local style_=$_P9K_RETVAL
+ local style_=$_p9k_ret
- _p9k_get_icon $1 WHITESPACE_BETWEEN_LEFT_SEGMENTS
- local space=$_P9K_RETVAL
+ _p9k_get_icon $1 WHITESPACE_BETWEEN_LEFT_SEGMENTS ' '
+ local space=$_p9k_ret
_p9k_get_icon $1 LEFT_LEFT_WHITESPACE $space
- local left_space=$_P9K_RETVAL
+ local left_space=$_p9k_ret
[[ $left_space == *%* ]] && left_space+=$style
_p9k_get_icon $1 LEFT_RIGHT_WHITESPACE $space
- _p9k_escape $_P9K_RETVAL
- local right_space_=$_P9K_RETVAL
+ _p9k_escape $_p9k_ret
+ local right_space_=$_p9k_ret
[[ $right_space_ == *%* ]] && right_space_+=$style_
- local s='<_P9K_S>' ss='<_P9K_SS>'
+ local s='<_p9k_s>' ss='<_p9k_ss>'
# Segment separator logic:
#
- # if [[ $_P9K_BG == NONE ]]; then
+ # if [[ $_p9k_bg == NONE ]]; then
# 1
# elif (( joined )); then
# 2
- # elif [[ $bg_color == (${_P9K_BG}|${_P9K_BG:-0}) ]]; then
+ # elif [[ $bg_color == (${_p9k_bg}|${_p9k_bg:-0}) ]]; then
# 3
# else
# 4
# fi
- local t=$#_P9K_T
- _P9K_T+=$start_sep$style$left_space # 1
- _P9K_T+=$style # 2
+ local t=$#_p9k_t
+ _p9k_t+=$start_sep$style$left_space # 1
+ _p9k_t+=$style # 2
if [[ -n $fg_color && $fg_color == $bg_color ]]; then
- if [[ $fg_color == $DEFAULT_COLOR ]]; then
- _p9k_foreground $DEFAULT_COLOR_INVERTED
+ if [[ $fg_color == $_p9k_color1 ]]; then
+ _p9k_foreground $_p9k_color2
else
- _p9k_foreground $DEFAULT_COLOR
+ _p9k_foreground $_p9k_color1
fi
- _P9K_T+=%b$bg$_P9K_RETVAL$ss$style$left_space # 3
+ _p9k_t+=%b$bg$_p9k_ret$ss$style$left_space # 3
else
- _P9K_T+=%b$bg$fg$ss$style$left_space # 3
+ _p9k_t+=%b$bg$fg$ss$style$left_space # 3
fi
- _P9K_T+=%b$bg$s$style$left_space # 4
+ _p9k_t+=%b$bg$s$style$left_space # 4
- local join="_P9K_I>=$_P9K_LEFT_JOIN[$2]"
+ local join="_p9k_i>=$_p9k_left_join[$2]"
_p9k_param $1 SELF_JOINED false
- [[ $_P9K_RETVAL == false ]] && join+="&&_P9K_I<$2"
+ [[ $_p9k_ret == false ]] && join+="&&_p9k_i<$2"
local p=
- p+="\${_P9K_N::=}"
- p+="\${\${\${_P9K_BG:-0}:#NONE}:-\${_P9K_N::=$((t+1))}}" # 1
- p+="\${_P9K_N:=\${\${\$(($join)):#0}:+$((t+2))}}" # 2
- p+="\${_P9K_N:=\${\${(M)\${:-x$bg_color}:#x(\$_P9K_BG|\${_P9K_BG:-0})}:+$((t+3))}}" # 3
- p+="\${_P9K_N:=$((t+4))}" # 4
+ p+="\${_p9k_n::=}"
+ p+="\${\${\${_p9k_bg:-0}:#NONE}:-\${_p9k_n::=$((t+1))}}" # 1
+ p+="\${_p9k_n:=\${\${\$(($join)):#0}:+$((t+2))}}" # 2
+ p+="\${_p9k_n:=\${\${(M)\${:-x$bg_color}:#x(\$_p9k_bg|\${_p9k_bg:-0})}:+$((t+3))}}" # 3
+ p+="\${_p9k_n:=$((t+4))}" # 4
_p9k_param $1 VISUAL_IDENTIFIER_EXPANSION '${P9K_VISUAL_IDENTIFIER}'
- local icon_exp_=${_P9K_RETVAL:+\"$_P9K_RETVAL\"}
+ local icon_exp_=${_p9k_ret:+\"$_p9k_ret\"}
_p9k_param $1 CONTENT_EXPANSION '${P9K_CONTENT}'
- local content_exp_=${_P9K_RETVAL:+\"$_P9K_RETVAL\"}
+ local content_exp_=${_p9k_ret:+\"$_p9k_ret\"}
if [[ ( $icon_exp_ != '"${P9K_VISUAL_IDENTIFIER}"' && $icon_exp_ == *'$'* ) ||
( $content_exp_ != '"${P9K_CONTENT}"' && $content_exp_ == *'$'* ) ]]; then
@@ -323,12 +522,12 @@ left_prompt_segment() {
local -i has_icon=-1 # maybe
if [[ $icon_exp_ != '"${P9K_VISUAL_IDENTIFIER}"' && $icon_exp_ == *'$'* ]]; then
- p+='${_P9K_V::='$icon_exp_$style_'}'
+ p+='${_p9k_v::='$icon_exp_$style_'}'
else
- [[ $icon_exp_ == '"${P9K_VISUAL_IDENTIFIER}"' ]] && _P9K_RETVAL=$icon_ || _P9K_RETVAL=$icon_exp_
- if [[ -n $_P9K_RETVAL ]]; then
- p+="\${_P9K_V::=$_P9K_RETVAL"
- [[ $_P9K_RETVAL == *%* ]] && p+=$style_
+ [[ $icon_exp_ == '"${P9K_VISUAL_IDENTIFIER}"' ]] && _p9k_ret=$icon_ || _p9k_ret=$icon_exp_
+ if [[ -n $_p9k_ret ]]; then
+ p+="\${_p9k_v::=$_p9k_ret"
+ [[ $_p9k_ret == *%* ]] && p+=$style_
p+="}"
has_icon=1 # definitely yes
else
@@ -336,79 +535,79 @@ left_prompt_segment() {
fi
fi
- p+="\${_P9K_C::=$content_exp_}"
+ p+="\${_p9k_c::=$content_exp_}"
if (( has_icon == -1 )); then
- p+='${_P9K_E::=${${(%):-$_P9K_C%1(l.1.0)}[-1]}${${(%):-$_P9K_V%1(l.1.0)}[-1]}}'
+ p+='${_p9k_e::=${${(%):-$_p9k_c%1(l.1.0)}[-1]}${${(%):-$_p9k_v%1(l.1.0)}[-1]}}'
else
- p+='${_P9K_E::=${${(%):-$_P9K_C%1(l.1.0)}[-1]}'$has_icon'}'
+ p+='${_p9k_e::=${${(%):-$_p9k_c%1(l.1.0)}[-1]}'$has_icon'}'
fi
p+='}+}'
- p+='${${_P9K_E:#00}:+${${_P9K_T[$_P9K_N]/'$ss'/$_P9K_SS}/'$s'/$_P9K_S}'
+ p+='${${_p9k_e:#00}:+${${_p9k_t[$_p9k_n]/'$ss'/$_p9k_ss}/'$s'/$_p9k_s}'
_p9k_param $1 ICON_BEFORE_CONTENT ''
- if [[ $_P9K_RETVAL != false ]]; then
+ if [[ $_p9k_ret != false ]]; then
_p9k_param $1 PREFIX ''
- _P9K_RETVAL=${(g::)_P9K_RETVAL}
- _p9k_escape $_P9K_RETVAL
- p+=$_P9K_RETVAL
- [[ $_P9K_RETVAL == *%* ]] && local -i need_style=1 || local -i need_style=0
+ _p9k_ret=${(g::)_p9k_ret}
+ _p9k_escape $_p9k_ret
+ p+=$_p9k_ret
+ [[ $_p9k_ret == *%* ]] && local -i need_style=1 || local -i need_style=0
if (( has_icon != 0 )); then
_p9k_color $1 VISUAL_IDENTIFIER_COLOR $fg_color
- _p9k_foreground $_P9K_RETVAL
- _p9k_escape_rcurly %b$bg$_P9K_RETVAL
- [[ $_P9K_RETVAL != $style_ || $need_style == 1 ]] && p+=$_P9K_RETVAL
- p+='${_P9K_V}'
+ _p9k_foreground $_p9k_ret
+ _p9k_escape_rcurly %b$bg$_p9k_ret
+ [[ $_p9k_ret != $style_ || $need_style == 1 ]] && p+=$_p9k_ret
+ p+='${_p9k_v}'
_p9k_get_icon $1 LEFT_MIDDLE_WHITESPACE ' '
- if [[ -n $_P9K_RETVAL ]]; then
- _p9k_escape $_P9K_RETVAL
- [[ _P9K_RETVAL == *%* ]] && _P9K_RETVAL+=$style_
- p+='${${(M)_P9K_E:#11}:+'$_P9K_RETVAL'}'
+ if [[ -n $_p9k_ret ]]; then
+ _p9k_escape $_p9k_ret
+ [[ _p9k_ret == *%* ]] && _p9k_ret+=$style_
+ p+='${${(M)_p9k_e:#11}:+'$_p9k_ret'}'
fi
elif (( need_style )); then
p+=$style_
fi
- p+='${_P9K_C}'$style_
+ p+='${_p9k_c}'$style_
else
_p9k_param $1 PREFIX ''
- _P9K_RETVAL=${(g::)_P9K_RETVAL}
- _p9k_escape $_P9K_RETVAL
- p+=$_P9K_RETVAL
- [[ $_P9K_RETVAL == *%* ]] && p+=$style_
+ _p9k_ret=${(g::)_p9k_ret}
+ _p9k_escape $_p9k_ret
+ p+=$_p9k_ret
+ [[ $_p9k_ret == *%* ]] && p+=$style_
- p+='${_P9K_C}'$style_
+ p+='${_p9k_c}'$style_
if (( has_icon != 0 )); then
local -i need_style=0
_p9k_get_icon $1 LEFT_MIDDLE_WHITESPACE ' '
- if [[ -n $_P9K_RETVAL ]]; then
- _p9k_escape $_P9K_RETVAL
- [[ $_P9K_RETVAL == *%* ]] && need_style=1
- p+='${${(M)_P9K_E:#11}:+'$_P9K_RETVAL'}'
+ if [[ -n $_p9k_ret ]]; then
+ _p9k_escape $_p9k_ret
+ [[ $_p9k_ret == *%* ]] && need_style=1
+ p+='${${(M)_p9k_e:#11}:+'$_p9k_ret'}'
fi
_p9k_color $1 VISUAL_IDENTIFIER_COLOR $fg_color
- _p9k_foreground $_P9K_RETVAL
- _p9k_escape_rcurly %b$bg$_P9K_RETVAL
- [[ $_P9K_RETVAL != $style_ || $need_style == 1 ]] && p+=$_P9K_RETVAL
- p+='$_P9K_V'
+ _p9k_foreground $_p9k_ret
+ _p9k_escape_rcurly %b$bg$_p9k_ret
+ [[ $_p9k_ret != $style_ || $need_style == 1 ]] && p+=$_p9k_ret
+ p+='$_p9k_v'
fi
fi
_p9k_param $1 SUFFIX ''
- _P9K_RETVAL=${(g::)_P9K_RETVAL}
- _p9k_escape $_P9K_RETVAL
- p+=$_P9K_RETVAL
- [[ $_P9K_RETVAL == *%* && -n $right_space_ ]] && p+=$style_
+ _p9k_ret=${(g::)_p9k_ret}
+ _p9k_escape $_p9k_ret
+ p+=$_p9k_ret
+ [[ $_p9k_ret == *%* && -n $right_space_ ]] && p+=$style_
p+=$right_space_
p+='${${:-'
- p+="\${_P9K_S::=%F{$bg_color\}$sep_}\${_P9K_SS::=$subsep_}\${_P9K_SSS::=%F{$bg_color\}$end_sep_}"
- p+="\${_P9K_I::=$2}\${_P9K_BG::=$bg_color}"
+ p+="\${_p9k_s::=%F{$bg_color\}$sep_}\${_p9k_ss::=$subsep_}\${_p9k_sss::=%F{$bg_color\}$end_sep_}"
+ p+="\${_p9k_i::=$2}\${_p9k_bg::=$bg_color}"
p+='}+}'
p+='}'
@@ -416,105 +615,104 @@ left_prompt_segment() {
_p9k_cache_set "$p"
fi
- (( $6 )) && _P9K_RETVAL=$8 || _p9k_escape $8
+ (( $6 )) && _p9k_ret=$8 || _p9k_escape $8
if [[ -z $7 ]]; then
- _P9K_PROMPT+="\${\${:-\${P9K_CONTENT::=$_P9K_RETVAL}$_P9K_CACHE_VAL[1]"
+ _p9k_prompt+="\${\${:-\${P9K_CONTENT::=$_p9k_ret}$_p9k_cache_val[1]"
else
- _P9K_PROMPT+="\${\${:-$7}:+\${\${:-\${P9K_CONTENT::=$_P9K_RETVAL}$_P9K_CACHE_VAL[1]}"
+ _p9k_prompt+="\${\${:-$7}:+\${\${:-\${P9K_CONTENT::=$_p9k_ret}$_p9k_cache_val[1]}"
fi
}
# The same as left_prompt_segment above but for the right prompt.
-set_default POWERLEVEL9K_WHITESPACE_BETWEEN_RIGHT_SEGMENTS " "
right_prompt_segment() {
if ! _p9k_cache_get "$0" "$1" "$2" "$3" "$4" "$5"; then
_p9k_color $1 BACKGROUND $3
- local bg_color=$_P9K_RETVAL
+ local bg_color=$_p9k_ret
_p9k_background $bg_color
- local bg=$_P9K_RETVAL
- _p9k_escape_rcurly $_P9K_RETVAL
- local bg_=$_P9K_RETVAL
+ local bg=$_p9k_ret
+ _p9k_escape_rcurly $_p9k_ret
+ local bg_=$_p9k_ret
_p9k_color $1 FOREGROUND $4
- local fg_color=$_P9K_RETVAL
+ local fg_color=$_p9k_ret
_p9k_foreground $fg_color
- local fg=$_P9K_RETVAL
+ local fg=$_p9k_ret
_p9k_get_icon $1 RIGHT_SEGMENT_SEPARATOR
- local sep=$_P9K_RETVAL
- _p9k_escape $_P9K_RETVAL
- local sep_=$_P9K_RETVAL
+ local sep=$_p9k_ret
+ _p9k_escape $_p9k_ret
+ local sep_=$_p9k_ret
_p9k_get_icon $1 RIGHT_SUBSEGMENT_SEPARATOR
- local subsep=$_P9K_RETVAL
+ local subsep=$_p9k_ret
local icon_
if [[ -n $5 ]]; then
_p9k_get_icon $1 $5
- _p9k_escape $_P9K_RETVAL
- icon_=$_P9K_RETVAL
+ _p9k_escape $_p9k_ret
+ icon_=$_p9k_ret
fi
_p9k_get_icon $1 RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL $sep
- local start_sep=$_P9K_RETVAL
+ local start_sep=$_p9k_ret
[[ -n $start_sep ]] && start_sep="%b%k%F{$bg_color}$start_sep"
_p9k_get_icon $1 RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL
- _p9k_escape $_P9K_RETVAL
- local end_sep_=$_P9K_RETVAL
+ _p9k_escape $_p9k_ret
+ local end_sep_=$_p9k_ret
local style=%b$bg$fg
_p9k_escape_rcurly $style
- local style_=$_P9K_RETVAL
+ local style_=$_p9k_ret
- _p9k_get_icon $1 WHITESPACE_BETWEEN_RIGHT_SEGMENTS
- local space=$_P9K_RETVAL
+ _p9k_get_icon $1 WHITESPACE_BETWEEN_RIGHT_SEGMENTS ' '
+ local space=$_p9k_ret
_p9k_get_icon $1 RIGHT_LEFT_WHITESPACE $space
- local left_space=$_P9K_RETVAL
+ local left_space=$_p9k_ret
[[ $left_space == *%* ]] && left_space+=$style
_p9k_get_icon $1 RIGHT_RIGHT_WHITESPACE $space
- _p9k_escape $_P9K_RETVAL
- local right_space_=$_P9K_RETVAL
+ _p9k_escape $_p9k_ret
+ local right_space_=$_p9k_ret
[[ $right_space_ == *%* ]] && right_space_+=$style_
- local w='<_P9K_W>' s='<_P9K_S>'
+ local w='<_p9k_w>' s='<_p9k_s>'
# Segment separator logic:
#
- # if [[ $_P9K_BG == NONE ]]; then
+ # if [[ $_p9k_bg == NONE ]]; then
# 1
# elif (( joined )); then
# 2
- # elif [[ $_P9K_BG == (${bg_color}|${bg_color:-0}) ]]; then
+ # elif [[ $_p9k_bg == (${bg_color}|${bg_color:-0}) ]]; then
# 3
# else
# 4
# fi
- local t=$#_P9K_T
- _P9K_T+=$start_sep$style$left_space # 1
- _P9K_T+=$w$style # 2
- _P9K_T+=$w$subsep$style$left_space # 3
- _P9K_T+=$w%F{$bg_color}$sep$style$left_space # 4
+ local t=$#_p9k_t
+ _p9k_t+=$start_sep$style$left_space # 1
+ _p9k_t+=$w$style # 2
+ _p9k_t+=$w$subsep$style$left_space # 3
+ _p9k_t+=$w%F{$bg_color}$sep$style$left_space # 4
- local join="_P9K_I>=$_P9K_RIGHT_JOIN[$2]"
+ local join="_p9k_i>=$_p9k_right_join[$2]"
_p9k_param $1 SELF_JOINED false
- [[ $_P9K_RETVAL == false ]] && join+="&&_P9K_I<$2"
+ [[ $_p9k_ret == false ]] && join+="&&_p9k_i<$2"
local p=
- p+="\${_P9K_N::=}"
- p+="\${\${\${_P9K_BG:-0}:#NONE}:-\${_P9K_N::=$((t+1))}}" # 1
- p+="\${_P9K_N:=\${\${\$(($join)):#0}:+$((t+2))}}" # 2
- p+="\${_P9K_N:=\${\${(M)\${:-x\$_P9K_BG}:#x(${(b)bg_color}|${(b)bg_color:-0})}:+$((t+3))}}" # 3
- p+="\${_P9K_N:=$((t+4))}" # 4
+ p+="\${_p9k_n::=}"
+ p+="\${\${\${_p9k_bg:-0}:#NONE}:-\${_p9k_n::=$((t+1))}}" # 1
+ p+="\${_p9k_n:=\${\${\$(($join)):#0}:+$((t+2))}}" # 2
+ p+="\${_p9k_n:=\${\${(M)\${:-x\$_p9k_bg}:#x(${(b)bg_color}|${(b)bg_color:-0})}:+$((t+3))}}" # 3
+ p+="\${_p9k_n:=$((t+4))}" # 4
_p9k_param $1 VISUAL_IDENTIFIER_EXPANSION '${P9K_VISUAL_IDENTIFIER}'
- local icon_exp_=${_P9K_RETVAL:+\"$_P9K_RETVAL\"}
+ local icon_exp_=${_p9k_ret:+\"$_p9k_ret\"}
_p9k_param $1 CONTENT_EXPANSION '${P9K_CONTENT}'
- local content_exp_=${_P9K_RETVAL:+\"$_P9K_RETVAL\"}
+ local content_exp_=${_p9k_ret:+\"$_p9k_ret\"}
if [[ ( $icon_exp_ != '"${P9K_VISUAL_IDENTIFIER}"' && $icon_exp_ == *'$'* ) ||
( $content_exp_ != '"${P9K_CONTENT}"' && $content_exp_ == *'$'* ) ]]; then
@@ -524,12 +722,12 @@ right_prompt_segment() {
local -i has_icon=-1 # maybe
if [[ $icon_exp_ != '"${P9K_VISUAL_IDENTIFIER}"' && $icon_exp_ == *'$'* ]]; then
- p+="\${_P9K_V::=$icon_exp_$style_}"
+ p+="\${_p9k_v::=$icon_exp_$style_}"
else
- [[ $icon_exp_ == '"${P9K_VISUAL_IDENTIFIER}"' ]] && _P9K_RETVAL=$icon_ || _P9K_RETVAL=$icon_exp_
- if [[ -n $_P9K_RETVAL ]]; then
- p+="\${_P9K_V::=$_P9K_RETVAL"
- [[ $_P9K_RETVAL == *%* ]] && p+=$style_
+ [[ $icon_exp_ == '"${P9K_VISUAL_IDENTIFIER}"' ]] && _p9k_ret=$icon_ || _p9k_ret=$icon_exp_
+ if [[ -n $_p9k_ret ]]; then
+ p+="\${_p9k_v::=$_p9k_ret"
+ [[ $_p9k_ret == *%* ]] && p+=$style_
p+="}"
has_icon=1 # definitely yes
else
@@ -537,96 +735,96 @@ right_prompt_segment() {
fi
fi
- p+="\${_P9K_C::=$content_exp_}"
+ p+="\${_p9k_c::=$content_exp_}"
if (( has_icon == -1 )); then
- p+='${_P9K_E::=${${(%):-$_P9K_C%1(l.1.0)}[-1]}${${(%):-$_P9K_V%1(l.1.0)}[-1]}}'
+ p+='${_p9k_e::=${${(%):-$_p9k_c%1(l.1.0)}[-1]}${${(%):-$_p9k_v%1(l.1.0)}[-1]}}'
else
- p+='${_P9K_E::=${${(%):-$_P9K_C%1(l.1.0)}[-1]}'$has_icon'}'
+ p+='${_p9k_e::=${${(%):-$_p9k_c%1(l.1.0)}[-1]}'$has_icon'}'
fi
p+='}+}'
- p+='${${_P9K_E:#00}:+${_P9K_T[$_P9K_N]/'$w'/$_P9K_W}'
+ p+='${${_p9k_e:#00}:+${_p9k_t[$_p9k_n]/'$w'/$_p9k_w}'
_p9k_param $1 ICON_BEFORE_CONTENT ''
- if [[ $_P9K_RETVAL != true ]]; then
+ if [[ $_p9k_ret != true ]]; then
_p9k_param $1 PREFIX ''
- _P9K_RETVAL=${(g::)_P9K_RETVAL}
- _p9k_escape $_P9K_RETVAL
- p+=$_P9K_RETVAL
- [[ $_P9K_RETVAL == *%* ]] && p+=$style_
+ _p9k_ret=${(g::)_p9k_ret}
+ _p9k_escape $_p9k_ret
+ p+=$_p9k_ret
+ [[ $_p9k_ret == *%* ]] && p+=$style_
- p+='${_P9K_C}'$style_
+ p+='${_p9k_c}'$style_
if (( has_icon != 0 )); then
local -i need_style=0
_p9k_get_icon $1 RIGHT_MIDDLE_WHITESPACE ' '
- if [[ -n $_P9K_RETVAL ]]; then
- _p9k_escape $_P9K_RETVAL
- [[ $_P9K_RETVAL == *%* ]] && need_style=1
- p+='${${(M)_P9K_E:#11}:+'$_P9K_RETVAL'}'
+ if [[ -n $_p9k_ret ]]; then
+ _p9k_escape $_p9k_ret
+ [[ $_p9k_ret == *%* ]] && need_style=1
+ p+='${${(M)_p9k_e:#11}:+'$_p9k_ret'}'
fi
_p9k_color $1 VISUAL_IDENTIFIER_COLOR $fg_color
- _p9k_foreground $_P9K_RETVAL
- _p9k_escape_rcurly %b$bg$_P9K_RETVAL
- [[ $_P9K_RETVAL != $style_ || $need_style == 1 ]] && p+=$_P9K_RETVAL
- p+='$_P9K_V'
+ _p9k_foreground $_p9k_ret
+ _p9k_escape_rcurly %b$bg$_p9k_ret
+ [[ $_p9k_ret != $style_ || $need_style == 1 ]] && p+=$_p9k_ret
+ p+='$_p9k_v'
fi
else
_p9k_param $1 PREFIX ''
- _P9K_RETVAL=${(g::)_P9K_RETVAL}
- _p9k_escape $_P9K_RETVAL
- p+=$_P9K_RETVAL
- [[ $_P9K_RETVAL == *%* ]] && local -i need_style=1 || local -i need_style=0
+ _p9k_ret=${(g::)_p9k_ret}
+ _p9k_escape $_p9k_ret
+ p+=$_p9k_ret
+ [[ $_p9k_ret == *%* ]] && local -i need_style=1 || local -i need_style=0
if (( has_icon != 0 )); then
_p9k_color $1 VISUAL_IDENTIFIER_COLOR $fg_color
- _p9k_foreground $_P9K_RETVAL
- _p9k_escape_rcurly %b$bg$_P9K_RETVAL
- [[ $_P9K_RETVAL != $style_ || $need_style == 1 ]] && p+=$_P9K_RETVAL
- p+='${_P9K_V}'
+ _p9k_foreground $_p9k_ret
+ _p9k_escape_rcurly %b$bg$_p9k_ret
+ [[ $_p9k_ret != $style_ || $need_style == 1 ]] && p+=$_p9k_ret
+ p+='${_p9k_v}'
_p9k_get_icon $1 RIGHT_MIDDLE_WHITESPACE ' '
- if [[ -n $_P9K_RETVAL ]]; then
- _p9k_escape $_P9K_RETVAL
- [[ _P9K_RETVAL == *%* ]] && _P9K_RETVAL+=$style_
- p+='${${(M)_P9K_E:#11}:+'$_P9K_RETVAL'}'
+ if [[ -n $_p9k_ret ]]; then
+ _p9k_escape $_p9k_ret
+ [[ _p9k_ret == *%* ]] && _p9k_ret+=$style_
+ p+='${${(M)_p9k_e:#11}:+'$_p9k_ret'}'
fi
elif (( need_style )); then
p+=$style_
fi
- p+='${_P9K_C}'$style_
+ p+='${_p9k_c}'$style_
fi
_p9k_param $1 SUFFIX ''
- _P9K_RETVAL=${(g::)_P9K_RETVAL}
- _p9k_escape $_P9K_RETVAL
- p+=$_P9K_RETVAL
+ _p9k_ret=${(g::)_p9k_ret}
+ _p9k_escape $_p9k_ret
+ p+=$_p9k_ret
p+='${${:-'
if [[ -n $fg_color && $fg_color == $bg_color ]]; then
- if [[ $fg_color == $DEFAULT_COLOR ]]; then
- _p9k_foreground $DEFAULT_COLOR_INVERTED
+ if [[ $fg_color == $_p9k_color1 ]]; then
+ _p9k_foreground $_p9k_color2
else
- _p9k_foreground $DEFAULT_COLOR
+ _p9k_foreground $_p9k_color1
fi
else
- _P9K_RETVAL=$fg
+ _p9k_ret=$fg
fi
- _p9k_escape_rcurly $_P9K_RETVAL
- p+="\${_P9K_W::=${right_space_:+$style_}$right_space_%b$bg_$_P9K_RETVAL}"
+ _p9k_escape_rcurly $_p9k_ret
+ p+="\${_p9k_w::=${right_space_:+$style_}$right_space_%b$bg_$_p9k_ret}"
- p+='${_P9K_SSS::='
+ p+='${_p9k_sss::='
p+=$style_$right_space_
[[ $right_space_ == *%* ]] && p+=$style_
p+=$end_sep_
[[ $end_sep_ == *%* ]] && p+=$style_
p+='}'
- p+="\${_P9K_I::=$2}\${_P9K_BG::=$bg_color}"
+ p+="\${_p9k_i::=$2}\${_p9k_bg::=$bg_color}"
p+='}+}'
p+='}'
@@ -634,11 +832,11 @@ right_prompt_segment() {
_p9k_cache_set "$p"
fi
- (( $6 )) && _P9K_RETVAL=$8 || _p9k_escape $8
+ (( $6 )) && _p9k_ret=$8 || _p9k_escape $8
if [[ -z $7 ]]; then
- _P9K_PROMPT+="\${\${:-\${P9K_CONTENT::=$_P9K_RETVAL}$_P9K_CACHE_VAL[1]"
+ _p9k_prompt+="\${\${:-\${P9K_CONTENT::=$_p9k_ret}$_p9k_cache_val[1]"
else
- _P9K_PROMPT+="\${\${:-$7}:+\${\${:-\${P9K_CONTENT::=$_P9K_RETVAL}$_P9K_CACHE_VAL[1]}"
+ _p9k_prompt+="\${\${:-$7}:+\${\${:-\${P9K_CONTENT::=$_p9k_ret}$_p9k_cache_val[1]}"
fi
}
@@ -666,14 +864,14 @@ function p9k_prompt_segment() {
return 1
}
(( sym )) || icon=$'\1'$icon
- "${_P9K_PROMPT_SIDE}_prompt_segment" "prompt_${_P9K_SEGMENT_NAME}${state:+_${(U)state}}" \
- "${_P9K_SEGMENT_INDEX}" "$bg" "${fg:-$DEFAULT_COLOR}" "$icon" "$expand" "$cond" "$text"
+ "${_p9k_prompt_side}_prompt_segment" "prompt_${_p9k_segment_name}${state:+_${(U)state}}" \
+ "${_p9k_segment_index}" "$bg" "${fg:-$_p9k_color1}" "$icon" "$expand" "$cond" "$text"
return 0
}
function _p9k_python_version() {
_p9k_cached_cmd_stdout_stderr python --version || return
- [[ $_P9K_RETVAL == (#b)Python\ ([[:digit:].]##)* ]] && _P9K_RETVAL=$match[1]
+ [[ $_p9k_ret == (#b)Python\ ([[:digit:].]##)* ]] && _p9k_ret=$match[1]
}
################################################################
@@ -682,18 +880,15 @@ function _p9k_python_version() {
################################################################
# Anaconda Environment
-set_default POWERLEVEL9K_ANACONDA_LEFT_DELIMITER "("
-set_default POWERLEVEL9K_ANACONDA_RIGHT_DELIMITER ")"
-set_default POWERLEVEL9K_ANACONDA_SHOW_PYTHON_VERSION true
prompt_anaconda() {
local p=${CONDA_PREFIX:-$CONDA_ENV_PATH}
[[ -n $p ]] || return
local msg=''
- if [[ $POWERLEVEL9K_ANACONDA_SHOW_PYTHON_VERSION == true ]] && _p9k_python_version; then
- msg="$_P9K_RETVAL "
+ if (( _POWERLEVEL9K_ANACONDA_SHOW_PYTHON_VERSION )) && _p9k_python_version; then
+ msg="$_p9k_ret "
fi
- msg+="$POWERLEVEL9K_ANACONDA_LEFT_DELIMITER${${p:t}//\%/%%}$POWERLEVEL9K_ANACONDA_RIGHT_DELIMITER"
- "$1_prompt_segment" "$0" "$2" "blue" "$DEFAULT_COLOR" 'PYTHON_ICON' 0 '' "$msg"
+ msg+="$_POWERLEVEL9K_ANACONDA_LEFT_DELIMITER${${p:t}//\%/%%}$_POWERLEVEL9K_ANACONDA_RIGHT_DELIMITER"
+ "$1_prompt_segment" "$0" "$2" "blue" "$_p9k_color1" 'PYTHON_ICON' 0 '' "$msg"
}
################################################################
@@ -709,74 +904,63 @@ prompt_aws() {
# Current Elastic Beanstalk environment
prompt_aws_eb_env() {
[[ -r .elasticbeanstalk/config.yml ]] || return
- local v=${=$(command grep environment .elasticbeanstalk/config.yml 2>/dev/null)[2]}
+ local v=${=$(grep environment .elasticbeanstalk/config.yml 2>/dev/null)[2]}
[[ -n $v ]] && "$1_prompt_segment" "$0" "$2" black green 'AWS_EB_ICON' 0 '' "${v//\%/%%}"
}
################################################################
# Segment to indicate background jobs with an icon.
-set_default POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE true
-set_default POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE_ALWAYS false
prompt_background_jobs() {
local msg
- if [[ $POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE == true ]]; then
- if [[ $POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE_ALWAYS == true ]]; then
+ if (( _POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE )); then
+ if (( _POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE_ALWAYS )); then
msg='${(%):-%j}'
else
msg='${${(%):-%j}:#1}'
fi
fi
- $1_prompt_segment $0 $2 "$DEFAULT_COLOR" cyan BACKGROUND_JOBS_ICON 1 '${${(%):-%j}:#0}' "$msg"
+ $1_prompt_segment $0 $2 "$_p9k_color1" cyan BACKGROUND_JOBS_ICON 1 '${${(%):-%j}:#0}' "$msg"
}
################################################################
# Segment that indicates usage level of current partition.
-set_default POWERLEVEL9K_DISK_USAGE_ONLY_WARNING false
-set_default -i POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL 90
-set_default -i POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL 95
prompt_disk_usage() {
(( $+commands[df] )) || return
- local disk_usage=${${=${(f)"$(command df -P . 2>/dev/null)"}[2]}[5]%%%}
+ local disk_usage=${${=${(f)"$(df -P . 2>/dev/null)"}[2]}[5]%%%}
local state bg fg
- if (( disk_usage >= POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL )); then
+ if (( disk_usage >= _POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL )); then
state=critical
bg=red
fg=white
- elif (( disk_usage >= POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL )); then
+ elif (( disk_usage >= _POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL )); then
state=warning
bg=yellow
- fg=$DEFAULT_COLOR
+ fg=$_p9k_color1
else
- [[ "$POWERLEVEL9K_DISK_USAGE_ONLY_WARNING" == true ]] && return
+ (( _POWERLEVEL9K_DISK_USAGE_ONLY_WARNING )) && return
state=normal
- bg=$DEFAULT_COLOR
+ bg=$_p9k_color1
fg=yellow
fi
$1_prompt_segment $0_$state $2 $bg $fg DISK_ICON 0 '' "$disk_usage%%"
}
-################################################################
-# Segment that displays the battery status in levels and colors
-set_default -i POWERLEVEL9K_BATTERY_LOW_THRESHOLD 10
-set_default -i POWERLEVEL9K_BATTERY_HIDE_ABOVE_THRESHOLD 999
-set_default -a POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND
-set_default POWERLEVEL9K_BATTERY_VERBOSE true
-typeset -g POWERLEVEL9K_BATTERY_STAGES
-
function _p9k_read_file() {
- _P9K_RETVAL=''
- [[ -n $1 ]] && read -r _P9K_RETVAL <$1
- [[ -n $_P9K_RETVAL ]]
+ _p9k_ret=''
+ [[ -n $1 ]] && read -r _p9k_ret <$1
+ [[ -n $_p9k_ret ]]
}
+################################################################
+# Segment that displays the battery status in levels and colors
prompt_battery() {
local state remain
local -i bat_percent
- case $OS in
+ case $_p9k_os in
OSX)
(( $+commands[pmset] )) || return
- local raw_data=${${(f)"$(command pmset -g batt 2>/dev/null)"}[2]}
+ local raw_data=${${(f)"$(pmset -g batt 2>/dev/null)"}[2]}
[[ $raw_data == *InternalBattery* ]] || return
remain=${${(s: :)${${(s:; :)raw_data}[3]}}[1]}
[[ $remain == *no* ]] && remain="..."
@@ -787,7 +971,7 @@ prompt_battery() {
state=CHARGING
;;
'discharging')
- (( bat_percent < POWERLEVEL9K_BATTERY_LOW_THRESHOLD )) && state=LOW || state=DISCONNECTED
+ (( bat_percent < _POWERLEVEL9K_BATTERY_LOW_THRESHOLD )) && state=LOW || state=DISCONNECTED
;;
*)
state=CHARGED
@@ -806,17 +990,17 @@ prompt_battery() {
for dir in $bats; do
local -i pow=0 full=0
if _p9k_read_file $dir/(energy_full|charge_full|charge_counter)(N); then
- (( energy_full += ${full::=_P9K_RETVAL} ))
+ (( energy_full += ${full::=_p9k_ret} ))
fi
- if _p9k_read_file $dir/(power|current)_now(N) && (( $#_P9K_RETVAL < 9 )); then
- (( power_now += ${pow::=$_P9K_RETVAL} ))
+ if _p9k_read_file $dir/(power|current)_now(N) && (( $#_p9k_ret < 9 )); then
+ (( power_now += ${pow::=$_p9k_ret} ))
fi
if _p9k_read_file $dir/(energy|charge)_now(N); then
- (( energy_now += _P9K_RETVAL ))
+ (( energy_now += _p9k_ret ))
elif _p9k_read_file $dir/capacity(N); then
- (( energy_now += _P9K_RETVAL * full / 100. + 0.5 ))
+ (( energy_now += _p9k_ret * full / 100. + 0.5 ))
fi
- _p9k_read_file $dir/status(N) && local bat_status=$_P9K_RETVAL || continue
+ _p9k_read_file $dir/status(N) && local bat_status=$_p9k_ret || continue
[[ $bat_status != Full ]] && is_full=0
[[ $bat_status == Charging ]] && is_charching=1
[[ $bat_status == (Charging|Discharging) && $pow == 0 ]] && is_calculating=1
@@ -832,7 +1016,7 @@ prompt_battery() {
else
if (( is_charching )); then
state=CHARGING
- elif (( bat_percent < POWERLEVEL9K_BATTERY_LOW_THRESHOLD )); then
+ elif (( bat_percent < _POWERLEVEL9K_BATTERY_LOW_THRESHOLD )); then
state=LOW
else
state=DISCONNECTED
@@ -853,65 +1037,53 @@ prompt_battery() {
;;
esac
- (( bat_percent >= POWERLEVEL9K_BATTERY_HIDE_ABOVE_THRESHOLD )) && return
+ (( bat_percent >= _POWERLEVEL9K_BATTERY_HIDE_ABOVE_THRESHOLD )) && return
local msg="$bat_percent%%"
- [[ $POWERLEVEL9K_BATTERY_VERBOSE == true && -n $remain ]] && msg+=" ($remain)"
+ [[ $_POWERLEVEL9K_BATTERY_VERBOSE == 1 && -n $remain ]] && msg+=" ($remain)"
local icon=BATTERY_ICON
- if (( $#POWERLEVEL9K_BATTERY_STAGES )); then
- local -i idx=$#POWERLEVEL9K_BATTERY_STAGES
- (( bat_percent < 100 )) && idx=$((bat_percent * $#POWERLEVEL9K_BATTERY_STAGES / 100 + 1))
- icon=$'\1'${(g::)POWERLEVEL9K_BATTERY_STAGES[idx]}
+ if (( $#_POWERLEVEL9K_BATTERY_STAGES )); then
+ local -i idx=$#_POWERLEVEL9K_BATTERY_STAGES
+ (( bat_percent < 100 )) && idx=$((bat_percent * $#_POWERLEVEL9K_BATTERY_STAGES / 100 + 1))
+ icon=$'\1'$_POWERLEVEL9K_BATTERY_STAGES[idx]
fi
- local bg=$DEFAULT_COLOR
- if (( $#POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND )); then
- local -i idx=$#POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND
- (( bat_percent < 100 )) && idx=$((bat_percent * $#POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND / 100 + 1))
- bg=$POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND[idx]
+ local bg=$_p9k_color1
+ if (( $#_POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND )); then
+ local -i idx=$#_POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND
+ (( bat_percent < 100 )) && idx=$((bat_percent * $#_POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND / 100 + 1))
+ bg=$_POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND[idx]
fi
- $1_prompt_segment $0_$state $2 "$bg" "$_P9K_BATTERY_STATES[$state]" $icon 0 '' $msg
+ $1_prompt_segment $0_$state $2 "$bg" "$_p9k_battery_states[$state]" $icon 0 '' $msg
}
-typeset -g _P9K_PUBLIC_IP
-
################################################################
# Public IP segment
-set_default -F POWERLEVEL9K_PUBLIC_IP_TIMEOUT 300
-set_default -a POWERLEVEL9K_PUBLIC_IP_METHODS dig curl wget
-set_default POWERLEVEL9K_PUBLIC_IP_NONE ""
-set_default POWERLEVEL9K_PUBLIC_IP_HOST "http://ident.me"
-set_default POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE ""
-
prompt_public_ip() {
local icon='PUBLIC_IP_ICON'
- if [[ -n $POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE ]]; then
- _p9k_parse_ip $POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE && icon='VPN_ICON'
+ if [[ -n $_POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE ]]; then
+ _p9k_parse_ip $_POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE && icon='VPN_ICON'
fi
- local ip='${_P9K_PUBLIC_IP:-$POWERLEVEL9K_PUBLIC_IP_NONE}'
- $1_prompt_segment "$0" "$2" "$DEFAULT_COLOR" "$DEFAULT_COLOR_INVERTED" "$icon" 1 $ip $ip
+ local ip='${_p9k_public_ip:-$_POWERLEVEL9K_PUBLIC_IP_NONE}'
+ $1_prompt_segment "$0" "$2" "$_p9k_color1" "$_p9k_color2" "$icon" 1 $ip $ip
}
################################################################
# Context: user@hostname (who am I and where am I)
-# Note that if $DEFAULT_USER is not set, this prompt segment will always print
-set_default POWERLEVEL9K_ALWAYS_SHOW_CONTEXT false
-set_default POWERLEVEL9K_ALWAYS_SHOW_USER false
-set_default POWERLEVEL9K_CONTEXT_TEMPLATE "%n@%m"
prompt_context() {
if ! _p9k_cache_get $0; then
local -i enabled=1
local content='' state=''
- if [[ $POWERLEVEL9K_ALWAYS_SHOW_CONTEXT == true || -z $DEFAULT_USER || $_P9K_SSH == 1 ]]; then
- content=$POWERLEVEL9K_CONTEXT_TEMPLATE
+ if [[ $_POWERLEVEL9K_ALWAYS_SHOW_CONTEXT == 1 || -z $DEFAULT_USER || $_P9K_SSH == 1 ]]; then
+ content=$_POWERLEVEL9K_CONTEXT_TEMPLATE
else
local user=$(whoami)
if [[ $user != $DEFAULT_USER ]]; then
- content="${POWERLEVEL9K_CONTEXT_TEMPLATE}"
- elif [[ $POWERLEVEL9K_ALWAYS_SHOW_USER == true ]]; then
+ content=$_POWERLEVEL9K_CONTEXT_TEMPLATE
+ elif (( _POWERLEVEL9K_ALWAYS_SHOW_USER )); then
content="${user//\%/%%}"
else
enabled=0
@@ -936,38 +1108,35 @@ prompt_context() {
_p9k_cache_set "$enabled" "$state" "$content"
fi
- (( _P9K_CACHE_VAL[1] )) || return
- "$1_prompt_segment" "$0_$_P9K_CACHE_VAL[2]" "$2" "$DEFAULT_COLOR" yellow '' 0 '' "$_P9K_CACHE_VAL[3]"
+ (( _p9k_cache_val[1] )) || return
+ "$1_prompt_segment" "$0_$_p9k_cache_val[2]" "$2" "$_p9k_color1" yellow '' 0 '' "$_p9k_cache_val[3]"
}
################################################################
# User: user (who am I)
-# Note that if $DEFAULT_USER is not set, this prompt segment will always print
-set_default POWERLEVEL9K_USER_TEMPLATE "%n"
prompt_user() {
if ! _p9k_cache_get $0 $1 $2; then
local user=$(whoami)
- if [[ $POWERLEVEL9K_ALWAYS_SHOW_USER != true && $user == $DEFAULT_USER ]]; then
+ if [[ $_POWERLEVEL9K_ALWAYS_SHOW_USER == 0 && $user == $DEFAULT_USER ]]; then
_p9k_cache_set true
elif [[ "${(%):-%#}" == '#' ]]; then
- _p9k_cache_set "$1_prompt_segment" "${0}_ROOT" "$2" "${DEFAULT_COLOR}" yellow ROOT_ICON 0 '' "${POWERLEVEL9K_USER_TEMPLATE}"
+ _p9k_cache_set "$1_prompt_segment" "${0}_ROOT" "$2" "${_p9k_color1}" yellow ROOT_ICON 0 '' "$_POWERLEVEL9K_USER_TEMPLATE"
elif [[ -n "$SUDO_COMMAND" ]]; then
- _p9k_cache_set "$1_prompt_segment" "${0}_SUDO" "$2" "${DEFAULT_COLOR}" yellow SUDO_ICON 0 '' "${POWERLEVEL9K_USER_TEMPLATE}"
+ _p9k_cache_set "$1_prompt_segment" "${0}_SUDO" "$2" "${_p9k_color1}" yellow SUDO_ICON 0 '' "$_POWERLEVEL9K_USER_TEMPLATE"
else
- _p9k_cache_set "$1_prompt_segment" "${0}_DEFAULT" "$2" "${DEFAULT_COLOR}" yellow USER_ICON 0 '' "${user//\%/%%}"
+ _p9k_cache_set "$1_prompt_segment" "${0}_DEFAULT" "$2" "${_p9k_color1}" yellow USER_ICON 0 '' "${user//\%/%%}"
fi
fi
- "$_P9K_CACHE_VAL[@]"
+ "$_p9k_cache_val[@]"
}
################################################################
# Host: machine (where am I)
-set_default POWERLEVEL9K_HOST_TEMPLATE "%m"
prompt_host() {
if (( _P9K_SSH )); then
- "$1_prompt_segment" "$0_REMOTE" "$2" "${DEFAULT_COLOR}" yellow SSH_ICON 0 '' "${POWERLEVEL9K_HOST_TEMPLATE}"
+ "$1_prompt_segment" "$0_REMOTE" "$2" "${_p9k_color1}" yellow SSH_ICON 0 '' "$_POWERLEVEL9K_HOST_TEMPLATE"
else
- "$1_prompt_segment" "$0_LOCAL" "$2" "${DEFAULT_COLOR}" yellow HOST_ICON 0 '' "${POWERLEVEL9K_HOST_TEMPLATE}"
+ "$1_prompt_segment" "$0_LOCAL" "$2" "${_p9k_color1}" yellow HOST_ICON 0 '' "$_POWERLEVEL9K_HOST_TEMPLATE"
fi
}
@@ -981,28 +1150,26 @@ prompt_custom() {
whence $cmd[1] &>/dev/null || return
local content=$("$cmd[@]")
[[ -n $content ]] || return
- "$1_prompt_segment" "${0}_${3:u}" "$2" $DEFAULT_COLOR_INVERTED $DEFAULT_COLOR "CUSTOM_${segment_name}_ICON" 0 '' "$content"
+ "$1_prompt_segment" "${0}_${3:u}" "$2" $_p9k_color2 $_p9k_color1 "CUSTOM_${segment_name}_ICON" 0 '' "$content"
}
################################################################
# Display the duration the command needed to run.
-set_default -i POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD 3
-set_default -i POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION 2
-# Other options: "d h m s".
-set_default POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT "H:M:S"
prompt_command_execution_time() {
- (( $+P9K_COMMAND_DURATION_SECONDS && P9K_COMMAND_DURATION_SECONDS >= POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD )) || return
+ (( __p9k_timer_start )) || return
+ P9K_COMMAND_DURATION_SECONDS=$((__p9k_timer_end - __p9k_timer_start))
+ (( P9K_COMMAND_DURATION_SECONDS >= _POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD )) || return
if (( P9K_COMMAND_DURATION_SECONDS < 60 )); then
- if [[ $POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION == 0 ]]; then
+ if (( !_POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION )); then
local -i sec=$((P9K_COMMAND_DURATION_SECONDS + 0.5))
else
- local -F $POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION sec=P9K_COMMAND_DURATION_SECONDS
+ local -F $_POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION sec=P9K_COMMAND_DURATION_SECONDS
fi
local text=${sec}s
else
local -i d=$((P9K_COMMAND_DURATION_SECONDS + 0.5))
- if [[ $POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT == "H:M:S" ]]; then
+ if [[ $_POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT == "H:M:S" ]]; then
local text=${(l.2..0.)$((d % 60))}
if (( d >= 60 )); then
text=${(l.2..0.)$((d / 60 % 60))}:$text
@@ -1029,78 +1196,16 @@ prompt_command_execution_time() {
"$1_prompt_segment" "$0" "$2" "red" "yellow1" 'EXECUTION_TIME_ICON' 0 '' $text
}
-set_default POWERLEVEL9K_DIR_PATH_SEPARATOR "/"
-set_default POWERLEVEL9K_HOME_FOLDER_ABBREVIATION "~"
-set_default POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD false
-set_default POWERLEVEL9K_DIR_ANCHORS_BOLD false
-set_default POWERLEVEL9K_DIR_PATH_ABSOLUTE false
-set_default POWERLEVEL9K_DIR_SHOW_WRITABLE false
-set_default POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER false
-set_default POWERLEVEL9K_DIR_HYPERLINK false
-set_default POWERLEVEL9K_SHORTEN_STRATEGY ""
-set_default POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND ""
-set_default POWERLEVEL9K_SHORTEN_FOLDER_MARKER "(.shorten_folder_marker|.bzr|CVS|.git|.hg|.svn|.terraform|.citc)"
-
-# Shorten directory if it's longer than this even if there is space for it.
-# The value can be either absolute (e.g., '80') or a percentage of terminal
-# width (e.g, '50%'). If empty, directory will be shortened only when prompt
-# doesn't fit. Applies only when POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique.
-set_default POWERLEVEL9K_DIR_MAX_LENGTH 0
-
-# Individual elements are patterns. They are expanded with the options set
-# by `emulate zsh && setopt extended_glob`.
-set_default -a POWERLEVEL9K_DIR_PACKAGE_FILES package.json composer.json
-
-# When dir is on the last prompt line, try to shorten it enough to leave at least this many
-# columns for typing commands. Applies only when POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique.
-set_default -i POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS 40
-
-# When dir is on the last prompt line, try to shorten it enough to leave at least
-# COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. Applies
-# only when POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique.
-set_default -F POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT 50
-
-# You can define POWERLEVEL9K_DIR_CLASSES to specify custom styling and icons for different
-# directories.
-#
-# POWERLEVEL9K_DIR_CLASSES must be an array with 3 * N elements. Each triplet consists of:
-#
-# 1. A pattern against which the current directory is matched. Matching is done with
-# extended_glob option enabled.
-# 2. Directory class for the purpose of styling.
-# 3. Icon.
-#
-# Triplets are tried in order. The first triplet whose pattern matches $PWD wins. If there are no
-# matches, there will be no icon and the styling is done according to POWERLEVEL9K_DIR_BACKGROUND,
-# POWERLEVEL9K_DIR_FOREGROUND, etc.
-#
-# Example:
-#
-# POWERLEVEL9K_DIR_CLASSES=(
-# '~/work(/*)#' WORK '(╯°□°)╯︵ ┻━┻'
-# '~(/*)#' HOME '⌂'
-# '*' DEFAULT '')
-#
-# POWERLEVEL9K_DIR_WORK_BACKGROUND=red
-# POWERLEVEL9K_DIR_HOME_BACKGROUND=blue
-# POWERLEVEL9K_DIR_DEFAULT_BACKGROUND=yellow
-#
-# With these settings, the current directory in the prompt may look like this:
-#
-# (╯°□°)╯︵ ┻━┻ ~/work/projects/important/urgent
-#
-# ⌂ ~/best/powerlevel10k
-
function _p9k_shorten_delim_len() {
local def=$1
- _P9K_RETVAL=${POWERLEVEL9K_SHORTEN_DELIMITER_LENGTH:--1}
- (( _P9K_RETVAL >= 0 )) || _p9k_prompt_length $1
+ _p9k_ret=${_POWERLEVEL9K_SHORTEN_DELIMITER_LENGTH:--1}
+ (( _p9k_ret >= 0 )) || _p9k_prompt_length $1
}
################################################################
# Dir: current working directory
prompt_dir() {
- [[ $POWERLEVEL9K_DIR_PATH_ABSOLUTE == true ]] && local p=$PWD || local p=${(%):-%~}
+ (( _POWERLEVEL9K_DIR_PATH_ABSOLUTE )) && local p=$PWD || local p=${(%):-%~}
if [[ $p == '~['* ]]; then
# If "${(%):-%~}" expands to "~[a]/]/b", is the first component "~[a]" or "~[a]/]"?
@@ -1127,14 +1232,14 @@ prompt_dir() {
fi
local -i fake_first=0 expand=0
- local delim=${POWERLEVEL9K_SHORTEN_DELIMITER-$'\u2026'}
- local -i shortenlen=${POWERLEVEL9K_SHORTEN_DIR_LENGTH:--1}
+ local delim=${_POWERLEVEL9K_SHORTEN_DELIMITER-$'\u2026'}
+ local -i shortenlen=${_POWERLEVEL9K_SHORTEN_DIR_LENGTH:--1}
- case $POWERLEVEL9K_SHORTEN_STRATEGY in
+ case $_POWERLEVEL9K_SHORTEN_STRATEGY in
truncate_absolute|truncate_absolute_chars)
if (( shortenlen > 0 && $#p > shortenlen )); then
_p9k_shorten_delim_len $delim
- if (( $#p > shortenlen + $_P9K_RETVAL )); then
+ if (( $#p > shortenlen + $_p9k_ret )); then
local -i n=shortenlen
local -i i=$#parts
while true; do
@@ -1154,9 +1259,9 @@ prompt_dir() {
;;
truncate_with_package_name|truncate_middle|truncate_from_right)
() {
- [[ $POWERLEVEL9K_SHORTEN_STRATEGY == truncate_with_package_name &&
- $+commands[jq] == 1 && $#POWERLEVEL9K_DIR_PACKAGE_FILES > 0 ]] || return
- local pat="(${(j:|:)POWERLEVEL9K_DIR_PACKAGE_FILES})"
+ [[ $_POWERLEVEL9K_SHORTEN_STRATEGY == truncate_with_package_name &&
+ $+commands[jq] == 1 && $#_POWERLEVEL9K_DIR_PACKAGE_FILES > 0 ]] || return
+ local pat="(${(j:|:)_POWERLEVEL9K_DIR_PACKAGE_FILES})"
local -i i=$#parts
local dir=$PWD
for (( ; i > 0; --i )); do
@@ -1166,11 +1271,11 @@ prompt_dir() {
zstat -H stat -- $pkg_file 2>/dev/null || return
if ! _p9k_cache_get $0_pkg $stat[inode] $stat[mtime] $stat[size]; then
local pkg_name=''
- pkg_name=$(command jq -j '.name' <$pkg_file 2>/dev/null) || pkg_name=''
+ pkg_name=$(jq -j '.name' <$pkg_file 2>/dev/null) || pkg_name=''
_p9k_cache_set "$pkg_name"
fi
- [[ -n $_P9K_CACHE_VAL[1] ]] || return
- parts[1,i]=($_P9K_CACHE_VAL[1])
+ [[ -n $_p9k_cache_val[1] ]] || return
+ parts[1,i]=($_p9k_cache_val[1])
fake_first=1
return
done
@@ -1179,8 +1284,8 @@ prompt_dir() {
}
if (( shortenlen > 0 )); then
_p9k_shorten_delim_len $delim
- local -i d=_P9K_RETVAL pref=shortenlen suf=0 i=2
- [[ $POWERLEVEL9K_SHORTEN_STRATEGY == truncate_middle ]] && suf=pref
+ local -i d=_p9k_ret pref=shortenlen suf=0 i=2
+ [[ $_POWERLEVEL9K_SHORTEN_STRATEGY == truncate_middle ]] && suf=pref
for (( ; i < $#parts; ++i )); do
local dir=$parts[i]
if (( $#dir > pref + suf + d )); then
@@ -1205,7 +1310,7 @@ prompt_dir() {
;;
truncate_to_unique)
expand=1
- delim=${POWERLEVEL9K_SHORTEN_DELIMITER-'*'}
+ delim=${_POWERLEVEL9K_SHORTEN_DELIMITER-'*'}
local -i i=2
[[ $p[1] == / ]] && (( ++i ))
local parent="${PWD%/${(pj./.)parts[i,-1]}}"
@@ -1216,19 +1321,19 @@ prompt_dir() {
else
local mtime='good'
fi
- if ! _p9k_cache_get $0 "${parts[@]}" || [[ -z $mtime || $mtime != $_P9K_CACHE_VAL[1] ]] ; then
+ if ! _p9k_cache_get $0 "${parts[@]}" || [[ -z $mtime || $mtime != $_p9k_cache_val[1] ]] ; then
_p9k_prompt_length $delim
- local -i real_delim_len=_P9K_RETVAL n=1 q=0
+ local -i real_delim_len=_p9k_ret n=1 q=0
[[ -n $parts[i-1] ]] && parts[i-1]="\${(Q)\${:-${(qqq)${(q)parts[i-1]}}}}"$'\2'
[[ $p[i,-1] == *["~!#\$^&*()\\\"'<>?{}[]"]* ]] && q=1
- local -i d=${POWERLEVEL9K_SHORTEN_DELIMITER_LENGTH:--1}
+ local -i d=${_POWERLEVEL9K_SHORTEN_DELIMITER_LENGTH:--1}
(( d >= 0 )) || d=real_delim_len
- shortenlen=${POWERLEVEL9K_SHORTEN_DIR_LENGTH:-1}
+ shortenlen=${_POWERLEVEL9K_SHORTEN_DIR_LENGTH:-1}
(( shortenlen >= 0 )) && n=shortenlen
for (( ; i <= $#parts - n; ++i )); do
local dir=$parts[i]
- if [[ -n $POWERLEVEL9K_SHORTEN_FOLDER_MARKER &&
- -n $parent/$dir/${~POWERLEVEL9K_SHORTEN_FOLDER_MARKER}(#qN) ]]; then
+ if [[ -n $_POWERLEVEL9K_SHORTEN_FOLDER_MARKER &&
+ -n $parent/$dir/${~_POWERLEVEL9K_SHORTEN_FOLDER_MARKER}(#qN) ]]; then
parent+=/$dir
(( q )) && parts[i]="\${(Q)\${:-${(qqq)${(q)dir}}}}"
parts[i]+=$'\2'
@@ -1242,10 +1347,10 @@ prompt_dir() {
local -i saved=$(($#dir - j - d))
if (( saved > 0 )); then
if (( q )); then
- parts[i]='${${${_P9K_D:#-*}:+${(Q)${:-'${(qqq)${(q)dir}}'}}}:-${(Q)${:-'
- parts[i]+=$'\3'${(qqq)${(q)dir[1,j]}}$'}}\1\3''${$((_P9K_D+='$saved'))+}}'
+ parts[i]='${${${_p9k_d:#-*}:+${(Q)${:-'${(qqq)${(q)dir}}'}}}:-${(Q)${:-'
+ parts[i]+=$'\3'${(qqq)${(q)dir[1,j]}}$'}}\1\3''${$((_p9k_d+='$saved'))+}}'
else
- parts[i]='${${${_P9K_D:#-*}:+'$dir$'}:-\3'$dir[1,j]$'\1\3''${$((_P9K_D+='$saved'))+}}'
+ parts[i]='${${${_p9k_d:#-*}:+'$dir$'}:-\3'$dir[1,j]$'\1\3''${$((_p9k_d+='$saved'))+}}'
fi
else
(( q )) && parts[i]="\${(Q)\${:-${(qqq)${(q)dir}}}}"
@@ -1258,16 +1363,16 @@ prompt_dir() {
done
_p9k_cache_set "$mtime" "${parts[@]}"
fi
- parts=("${(@)_P9K_CACHE_VAL[2,-1]}")
+ parts=("${(@)_p9k_cache_val[2,-1]}")
;;
truncate_with_folder_marker)
- if [[ -n $POWERLEVEL9K_SHORTEN_FOLDER_MARKER ]]; then
+ if [[ -n $_POWERLEVEL9K_SHORTEN_FOLDER_MARKER ]]; then
local dir=$PWD
local -a m=()
local -i i=$(($#parts - 1))
for (( ; i > 1; --i )); do
dir=${dir:h}
- [[ -n $dir/${~POWERLEVEL9K_SHORTEN_FOLDER_MARKER}(#qN) ]] && m+=$i
+ [[ -n $dir/${~_POWERLEVEL9K_SHORTEN_FOLDER_MARKER}(#qN) ]] && m+=$i
done
m+=1
for (( i=1; i < $#m; ++i )); do
@@ -1286,7 +1391,7 @@ prompt_dir() {
;;
esac
- [[ $POWERLEVEL9K_DIR_SHOW_WRITABLE == true && ! -w $PWD ]]
+ [[ $_POWERLEVEL9K_DIR_SHOW_WRITABLE == 1 && ! -w $PWD ]]
local w=$?
if ! _p9k_cache_get $0 $2 $PWD $w $fake_first "${parts[@]}"; then
local state=$0
@@ -1296,7 +1401,7 @@ prompt_dir() {
icon=LOCK_ICON
else
local a='' b='' c=''
- for a b c in "${POWERLEVEL9K_DIR_CLASSES[@]}"; do
+ for a b c in "${_POWERLEVEL9K_DIR_CLASSES[@]}"; do
if [[ $PWD == ${~a} ]]; then
[[ -n $b ]] && state+=_${(U)b}
icon=$'\1'$c
@@ -1307,116 +1412,116 @@ prompt_dir() {
local style=%b
_p9k_color $state BACKGROUND blue
- _p9k_background $_P9K_RETVAL
- style+=$_P9K_RETVAL
- _p9k_color $state FOREGROUND "$DEFAULT_COLOR"
- _p9k_foreground $_P9K_RETVAL
- style+=$_P9K_RETVAL
+ _p9k_background $_p9k_ret
+ style+=$_p9k_ret
+ _p9k_color $state FOREGROUND "$_p9k_color1"
+ _p9k_foreground $_p9k_ret
+ style+=$_p9k_ret
if (( expand )); then
_p9k_escape_rcurly $style
- style=$_P9K_RETVAL
+ style=$_p9k_ret
fi
parts=("${(@)parts//\%/%%}")
- if [[ $POWERLEVEL9K_HOME_FOLDER_ABBREVIATION != '~' && $fake_first == 0 && $p == ('~'|'~/'*) ]]; then
- (( expand )) && _p9k_escape $POWERLEVEL9K_HOME_FOLDER_ABBREVIATION || _P9K_RETVAL=$POWERLEVEL9K_HOME_FOLDER_ABBREVIATION
- parts[1]=$_P9K_RETVAL
- [[ $_P9K_RETVAL == *%* ]] && parts[1]+=$style
+ if [[ $_POWERLEVEL9K_HOME_FOLDER_ABBREVIATION != '~' && $fake_first == 0 && $p == ('~'|'~/'*) ]]; then
+ (( expand )) && _p9k_escape $_POWERLEVEL9K_HOME_FOLDER_ABBREVIATION || _p9k_ret=$_POWERLEVEL9K_HOME_FOLDER_ABBREVIATION
+ parts[1]=$_p9k_ret
+ [[ $_p9k_ret == *%* ]] && parts[1]+=$style
fi
- [[ $POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER == true && $#parts > 1 && -n $parts[2] ]] && parts[1]=()
+ [[ $_POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER == 1 && $#parts > 1 && -n $parts[2] ]] && parts[1]=()
local last_style=
- [[ $POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD == true ]] && last_style+=%B
- if (( $+POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND )); then
- _p9k_translate_color $POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND
- _p9k_foreground $_P9K_RETVAL
- last_style+=$_P9K_RETVAL
+ (( _POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD )) && last_style+=%B
+ if (( $+_POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND )); then
+ _p9k_translate_color $_POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND
+ _p9k_foreground $_p9k_ret
+ last_style+=$_p9k_ret
fi
if [[ -n $last_style ]]; then
- (( expand )) && _p9k_escape_rcurly $last_style || _P9K_RETVAL=$last_style
- parts[-1]=$_P9K_RETVAL${parts[-1]//$'\1'/$'\1'$_P9K_RETVAL}$style
+ (( expand )) && _p9k_escape_rcurly $last_style || _p9k_ret=$last_style
+ parts[-1]=$_p9k_ret${parts[-1]//$'\1'/$'\1'$_p9k_ret}$style
fi
local anchor_style=
- [[ $POWERLEVEL9K_DIR_ANCHOR_BOLD == true ]] && anchor_style+=%B
- if (( $+POWERLEVEL9K_DIR_ANCHOR_FOREGROUND )); then
- _p9k_translate_color $POWERLEVEL9K_DIR_ANCHOR_FOREGROUND
- _p9k_foreground $_P9K_RETVAL
- anchor_style+=$_P9K_RETVAL
+ (( _POWERLEVEL9K_DIR_ANCHOR_BOLD )) && anchor_style+=%B
+ if (( $+_POWERLEVEL9K_DIR_ANCHOR_FOREGROUND )); then
+ _p9k_translate_color $_POWERLEVEL9K_DIR_ANCHOR_FOREGROUND
+ _p9k_foreground $_p9k_ret
+ anchor_style+=$_p9k_ret
fi
if [[ -n $anchor_style ]]; then
- (( expand )) && _p9k_escape_rcurly $anchor_style || _P9K_RETVAL=$anchor_style
+ (( expand )) && _p9k_escape_rcurly $anchor_style || _p9k_ret=$anchor_style
if [[ -z $last_style ]]; then
- parts=("${(@)parts/%(#b)(*)$'\2'/$_P9K_RETVAL$match[1]$style}")
+ parts=("${(@)parts/%(#b)(*)$'\2'/$_p9k_ret$match[1]$style}")
else
- (( $#parts > 1 )) && parts[1,-2]=("${(@)parts[1,-2]/%(#b)(*)$'\2'/$_P9K_RETVAL$match[1]$style}")
+ (( $#parts > 1 )) && parts[1,-2]=("${(@)parts[1,-2]/%(#b)(*)$'\2'/$_p9k_ret$match[1]$style}")
parts[-1]=${parts[-1]/$'\2'}
fi
else
parts=("${(@)parts/$'\2'}")
fi
- if (( $+POWERLEVEL9K_DIR_SHORTENED_FOREGROUND )); then
- _p9k_translate_color $POWERLEVEL9K_DIR_SHORTENED_FOREGROUND
- _p9k_foreground $_P9K_RETVAL
- (( expand )) && _p9k_escape_rcurly $_P9K_RETVAL
- local shortened_fg=$_P9K_RETVAL
- (( expand )) && _p9k_escape $delim || _P9K_RETVAL=$delim
- [[ $_P9K_RETVAL == *%* ]] && _P9K_RETVAL+=$style$shortened_fg
- parts=("${(@)parts/(#b)$'\3'(*)$'\1'(*)$'\3'/$shortened_fg$match[1]$_P9K_RETVAL$match[2]$style}")
- parts=("${(@)parts/(#b)(*)$'\1'(*)/$shortened_fg$match[1]$_P9K_RETVAL$match[2]$style}")
+ if (( $+_POWERLEVEL9K_DIR_SHORTENED_FOREGROUND )); then
+ _p9k_translate_color $_POWERLEVEL9K_DIR_SHORTENED_FOREGROUND
+ _p9k_foreground $_p9k_ret
+ (( expand )) && _p9k_escape_rcurly $_p9k_ret
+ local shortened_fg=$_p9k_ret
+ (( expand )) && _p9k_escape $delim || _p9k_ret=$delim
+ [[ $_p9k_ret == *%* ]] && _p9k_ret+=$style$shortened_fg
+ parts=("${(@)parts/(#b)$'\3'(*)$'\1'(*)$'\3'/$shortened_fg$match[1]$_p9k_ret$match[2]$style}")
+ parts=("${(@)parts/(#b)(*)$'\1'(*)/$shortened_fg$match[1]$_p9k_ret$match[2]$style}")
else
- (( expand )) && _p9k_escape $delim || _P9K_RETVAL=$delim
- [[ $_P9K_RETVAL == *%* ]] && _P9K_RETVAL+=$style
- parts=("${(@)parts/$'\1'/$_P9K_RETVAL}")
+ (( expand )) && _p9k_escape $delim || _p9k_ret=$delim
+ [[ $_p9k_ret == *%* ]] && _p9k_ret+=$style
+ parts=("${(@)parts/$'\1'/$_p9k_ret}")
parts=("${(@)parts//$'\3'}")
fi
local sep=''
- if [[ -n $POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND ]]; then
- _p9k_translate_color $POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND
- _p9k_foreground $_P9K_RETVAL
- (( expand )) && _p9k_escape_rcurly $_P9K_RETVAL
- sep=$_P9K_RETVAL
- fi
- (( expand )) && _p9k_escape $POWERLEVEL9K_DIR_PATH_SEPARATOR || _P9K_RETVAL=$POWERLEVEL9K_DIR_PATH_SEPARATOR
- sep+=$_P9K_RETVAL
+ if (( $+_POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND )); then
+ _p9k_translate_color $_POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND
+ _p9k_foreground $_p9k_ret
+ (( expand )) && _p9k_escape_rcurly $_p9k_ret
+ sep=$_p9k_ret
+ fi
+ (( expand )) && _p9k_escape $_POWERLEVEL9K_DIR_PATH_SEPARATOR || _p9k_ret=$_POWERLEVEL9K_DIR_PATH_SEPARATOR
+ sep+=$_p9k_ret
[[ $sep == *%* ]] && sep+=$style
local content="${(pj.$sep.)parts}"
- if [[ $POWERLEVEL9K_DIR_HYPERLINK == true ]]; then
+ if (( _POWERLEVEL9K_DIR_HYPERLINK )); then
local pref=$'%{\e]8;;file://'${${PWD//\%/%%25}//'#'/%%23}$'\a%}'
local suf=$'%{\e]8;;\a%}'
if (( expand )); then
_p9k_escape $pref
- pref=$_P9K_RETVAL
+ pref=$_p9k_ret
_p9k_escape $suf
- suf=$_P9K_RETVAL
+ suf=$_p9k_ret
fi
content=$pref$content$suf
fi
- (( expand )) && eval "_p9k_prompt_length \"\${\${_P9K_D::=0}+}$content\"" || _P9K_RETVAL=
- _p9k_cache_set "$state" "$icon" "$expand" "$content" $_P9K_RETVAL
+ (( expand )) && eval "_p9k_prompt_length \"\${\${_p9k_d::=0}+}$content\"" || _p9k_ret=
+ _p9k_cache_set "$state" "$icon" "$expand" "$content" $_p9k_ret
fi
- if (( _P9K_CACHE_VAL[3] )); then
- if (( $+_P9K_DIR )); then
- _P9K_CACHE_VAL[4]='${${_P9K_D::=-1024}+}'$_P9K_CACHE_VAL[4]
+ if (( _p9k_cache_val[3] )); then
+ if (( $+_p9k_dir )); then
+ _p9k_cache_val[4]='${${_p9k_d::=-1024}+}'$_p9k_cache_val[4]
else
- _P9K_DIR=$_P9K_CACHE_VAL[4]
- _P9K_DIR_LEN=$_P9K_CACHE_VAL[5]
- _P9K_CACHE_VAL[4]='%{d%\}'$_P9K_CACHE_VAL[4]'%{d%\}'
+ _p9k_dir=$_p9k_cache_val[4]
+ _p9k_dir_len=$_p9k_cache_val[5]
+ _p9k_cache_val[4]='%{d%\}'$_p9k_cache_val[4]'%{d%\}'
fi
fi
- $1_prompt_segment "$_P9K_CACHE_VAL[1]" "$2" "blue" "$DEFAULT_COLOR" "$_P9K_CACHE_VAL[2]" "$_P9K_CACHE_VAL[3]" "" "$_P9K_CACHE_VAL[4]"
+ $1_prompt_segment "$_p9k_cache_val[1]" "$2" "blue" "$_p9k_color1" "$_p9k_cache_val[2]" "$_p9k_cache_val[3]" "" "$_p9k_cache_val[4]"
}
################################################################
# Docker machine
prompt_docker_machine() {
if [[ -n "$DOCKER_MACHINE_NAME" ]]; then
- "$1_prompt_segment" "$0" "$2" "magenta" "$DEFAULT_COLOR" 'SERVER_ICON' 0 '' "${DOCKER_MACHINE_NAME//\%/%%}"
+ "$1_prompt_segment" "$0" "$2" "magenta" "$_p9k_color1" 'SERVER_ICON' 0 '' "${DOCKER_MACHINE_NAME//\%/%%}"
fi
}
@@ -1425,14 +1530,14 @@ prompt_docker_machine() {
prompt_go_version() {
_p9k_cached_cmd_stdout go version || return
local -a match
- [[ $_P9K_RETVAL == (#b)*go([[:digit:].]##)* ]] || return
+ [[ $_p9k_ret == (#b)*go([[:digit:].]##)* ]] || return
local v=$match[1]
local p=$GOPATH
if [[ -z $p ]]; then
if [[ -d $HOME/go ]]; then
p=$HOME/go
else
- p=$(command go env GOPATH 2>/dev/null) && [[ -n $p ]] || return
+ p=$(go env GOPATH 2>/dev/null) && [[ -n $p ]] || return
fi
fi
if [[ $PWD/ != $p/* ]]; then
@@ -1448,19 +1553,19 @@ prompt_go_version() {
################################################################
# Command number (in local history)
prompt_history() {
- "$1_prompt_segment" "$0" "$2" "grey50" "$DEFAULT_COLOR" '' 0 '' '%h'
+ "$1_prompt_segment" "$0" "$2" "grey50" "$_p9k_color1" '' 0 '' '%h'
}
################################################################
# Detection for virtualization (systemd based systems only)
prompt_detect_virt() {
(( $+commands[systemd-detect-virt] )) || return
- local virt=$(command systemd-detect-virt 2>/dev/null)
+ local virt=$(systemd-detect-virt 2>/dev/null)
if [[ "$virt" == "none" ]]; then
- [[ "$(command ls -di /)" != "2 /" ]] && virt="chroot"
+ [[ "$(ls -di /)" != "2 /" ]] && virt="chroot"
fi
if [[ -n "${virt}" ]]; then
- "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR" "yellow" '' 0 '' "${virt//\%/%%}"
+ "$1_prompt_segment" "$0" "$2" "$_p9k_color1" "yellow" '' 0 '' "${virt//\%/%%}"
fi
}
@@ -1478,19 +1583,16 @@ prompt_icons_test() {
################################################################
# Segment to display the current IP address
-set_default POWERLEVEL9K_IP_INTERFACE "^[^ ]+"
prompt_ip() {
- _p9k_parse_ip $POWERLEVEL9K_IP_INTERFACE || return
- "$1_prompt_segment" "$0" "$2" "cyan" "$DEFAULT_COLOR" 'NETWORK_ICON' 0 '' "${_P9K_RETVAL//\%/%%}"
+ _p9k_parse_ip $_POWERLEVEL9K_IP_INTERFACE || return
+ "$1_prompt_segment" "$0" "$2" "cyan" "$_p9k_color1" 'NETWORK_ICON' 0 '' "${_p9k_ret//\%/%%}"
}
################################################################
# Segment to display if VPN is active
-set_default POWERLEVEL9K_VPN_IP_INTERFACE "tun"
-# prompt if vpn active
prompt_vpn_ip() {
- _p9k_parse_ip $POWERLEVEL9K_VPN_IP_INTERFACE || return
- "$1_prompt_segment" "$0" "$2" "cyan" "$DEFAULT_COLOR" 'VPN_ICON' 0 '' "${_P9K_RETVAL//\%/%%}"
+ _p9k_parse_ip $_POWERLEVEL9K_VPN_IP_INTERFACE || return
+ "$1_prompt_segment" "$0" "$2" "cyan" "$_p9k_color1" 'VPN_ICON' 0 '' "${_p9k_ret//\%/%%}"
}
################################################################
@@ -1506,46 +1608,39 @@ prompt_laravel_version() {
################################################################
# Segment to display load
-set_default -i POWERLEVEL9K_LOAD_WHICH 5
prompt_load() {
local bucket=2
- case $POWERLEVEL9K_LOAD_WHICH in
+ case $_POWERLEVEL9K_LOAD_WHICH in
1) bucket=1;;
5) bucket=2;;
15) bucket=3;;
esac
local load
- case $OS in
+ case $_p9k_os in
OSX|BSD)
(( $+commands[sysctl] )) || return
- load=$(command sysctl -n vm.loadavg 2>/dev/null) || return
+ load=$(sysctl -n vm.loadavg 2>/dev/null) || return
load=${${(A)=load}[bucket+1]//,/.}
;;
*)
[[ -r /proc/loadavg ]] || return
_p9k_read_file /proc/loadavg || return
- load=${${(A)=_P9K_RETVAL}[bucket]//,/.}
+ load=${${(A)=_p9k_ret}[bucket]//,/.}
;;
esac
- if (( ! $+_P9K_NUM_CPUS )); then
- case $OS in
- OSX) (( $+commands[sysctl] )) && _P9K_NUM_CPUS=$(command sysctl -n hw.logicalcpu 2>/dev/null) || return;;
- BSD) (( $+commands[sysctl] )) && _P9K_NUM_CPUS=$(command sysctl -n hw.ncpu 2>/dev/null) || return;;
- *) (( $+commands[nproc] )) && _P9K_NUM_CPUS=$(command nproc 2>/dev/null) || return;;
- esac
- fi
+ (( _p9k_num_cpus )) || return
- if (( load > 0.7 * _P9K_NUM_CPUS )); then
+ if (( load > 0.7 * _p9k_num_cpus )); then
local state=critical bg=red
- elif (( load > 0.5 * _P9K_NUM_CPUS )); then
+ elif (( load > 0.5 * _p9k_num_cpus )); then
local state=warning bg=yellow
else
local state=normal bg=green
fi
- $1_prompt_segment $0_$state $2 $bg "$DEFAULT_COLOR" LOAD_ICON 0 '' $load
+ $1_prompt_segment $0_$state $2 $bg "$_p9k_color1" LOAD_ICON 0 '' $load
}
function _p9k_cached_cmd_stdout() {
@@ -1559,8 +1654,8 @@ function _p9k_cached_cmd_stdout() {
out=$($cmd "$@" 2>/dev/null)
_p9k_cache_set $(( ! $? )) "$out"
fi
- (( $_P9K_CACHE_VAL[1] )) || return
- _P9K_RETVAL=$_P9K_CACHE_VAL[2]
+ (( $_p9k_cache_val[1] )) || return
+ _p9k_ret=$_p9k_cache_val[2]
}
function _p9k_cached_cmd_stdout_stderr() {
@@ -1574,17 +1669,16 @@ function _p9k_cached_cmd_stdout_stderr() {
out=$($cmd "$@" 2>&1) # this line is the only diff with _p9k_cached_cmd_stdout
_p9k_cache_set $(( ! $? )) "$out"
fi
- (( $_P9K_CACHE_VAL[1] )) || return
- _P9K_RETVAL=$_P9K_CACHE_VAL[2]
+ (( $_p9k_cache_val[1] )) || return
+ _p9k_ret=$_p9k_cache_val[2]
}
################################################################
# Segment to diplay Node version
-set_default P9K_NODE_VERSION_PROJECT_ONLY false
prompt_node_version() {
(( $+commands[node] )) || return
- if [[ $P9K_NODE_VERSION_PROJECT_ONLY == true ]] ; then
+ if (( _POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY )); then
local dir=$PWD
while true; do
[[ $dir == / ]] && return
@@ -1593,8 +1687,8 @@ prompt_node_version() {
done
fi
- _p9k_cached_cmd_stdout node --version && [[ $_P9K_RETVAL == v?* ]] || return
- "$1_prompt_segment" "$0" "$2" "green" "white" 'NODE_ICON' 0 '' "${_P9K_RETVAL#v}"
+ _p9k_cached_cmd_stdout node --version && [[ $_p9k_ret == v?* ]] || return
+ "$1_prompt_segment" "$0" "$2" "green" "white" 'NODE_ICON' 0 '' "${_p9k_ret#v}"
}
# Almost the same as `nvm_version default` but faster. The differences shouldn't affect
@@ -1614,7 +1708,7 @@ function _p9k_nvm_ls_default() {
return 1
;;
system|v)
- _P9K_RETVAL=system
+ _p9k_ret=system
return
;;
iojs-[0-9]*)
@@ -1627,10 +1721,10 @@ function _p9k_nvm_ls_default() {
if [[ $v == v*.*.* ]]; then
if [[ -x $NVM_DIR/versions/node/$v/bin/node || -x $NVM_DIR/$v/bin/node ]]; then
- _P9K_RETVAL=$v
+ _p9k_ret=$v
return
elif [[ -x $NVM_DIR/versions/io.js/$v/bin/node ]]; then
- _P9K_RETVAL=iojs-$v
+ _p9k_ret=iojs-$v
return
else
return 1
@@ -1667,8 +1761,8 @@ function _p9k_nvm_ls_default() {
v=${(j::)${(@l:6::0:)match}}
[[ $v > $max ]] || continue
max=$v
- _P9K_RETVAL=${path:t}
- [[ ${path:h:t} != io.js ]] || _P9K_RETVAL=iojs-$_P9K_RETVAL
+ _p9k_ret=${path:t}
+ [[ ${path:h:t} != io.js ]] || _p9k_ret=iojs-$_p9k_ret
done
[[ -n $max ]]
@@ -1682,12 +1776,12 @@ _p9k_nvm_ls_current() {
local nvm_dir=${NVM_DIR:A}
if [[ -n $nvm_dir && $node_path == $nvm_dir/versions/io.js/* ]]; then
_p9k_cached_cmd_stdout iojs --version || return
- _P9K_RETVAL=iojs-v${_P9K_RETVAL#v}
+ _p9k_ret=iojs-v${_p9k_ret#v}
elif [[ -n $nvm_dir && $node_path == $nvm_dir/* ]]; then
_p9k_cached_cmd_stdout node --version || return
- _P9K_RETVAL=v${_P9K_RETVAL#v}
+ _p9k_ret=v${_p9k_ret#v}
else
- _P9K_RETVAL=system
+ _p9k_ret=system
fi
}
@@ -1696,8 +1790,8 @@ _p9k_nvm_ls_current() {
# Only prints the segment if different than the default value
prompt_nvm() {
[[ -n $NVM_DIR ]] && _p9k_nvm_ls_current || return
- local current=$_P9K_RETVAL
- ! _p9k_nvm_ls_default || [[ $_P9K_RETVAL != $current ]] || return
+ local current=$_p9k_ret
+ ! _p9k_nvm_ls_default || [[ $_p9k_ret != $current ]] || return
$1_prompt_segment "$0" "$2" "magenta" "black" 'NODE_ICON' 0 '' "${${current#v}//\%/%%}"
}
@@ -1706,7 +1800,7 @@ prompt_nvm() {
prompt_nodeenv() {
if [[ -n "$NODE_VIRTUAL_ENV" ]]; then
_p9k_cached_cmd_stdout node --version || return
- local info="${_P9K_RETVAL}[${NODE_VIRTUAL_ENV:t}]"
+ local info="${_p9k_ret}[${NODE_VIRTUAL_ENV:t}]"
"$1_prompt_segment" "$0" "$2" "black" "green" 'NODE_ICON' 0 '' "${info//\%/%%}"
fi
}
@@ -1714,50 +1808,49 @@ prompt_nodeenv() {
function _p9k_read_nodenv_version_file() {
[[ -r $1 ]] || return
local rest
- read _P9K_RETVAL rest <$1 2>/dev/null
- [[ -n $_P9K_RETVAL ]]
+ read _p9k_ret rest <$1 2>/dev/null
+ [[ -n $_p9k_ret ]]
}
function _p9k_nodeenv_version_transform() {
local dir=${NODENV_ROOT:-$HOME/.nodenv}/versions
- [[ -z $1 || $1 == system ]] && _P9K_RETVAL=$1 && return
- [[ -d $dir/$1 ]] && _P9K_RETVAL=$1 && return
- [[ -d $dir/${1/v} ]] && _P9K_RETVAL=${1/v} && return
- [[ -d $dir/${1#node-} ]] && _P9K_RETVAL=${1#node-} && return
- [[ -d $dir/${1#node-v} ]] && _P9K_RETVAL=${1#node-v} && return
+ [[ -z $1 || $1 == system ]] && _p9k_ret=$1 && return
+ [[ -d $dir/$1 ]] && _p9k_ret=$1 && return
+ [[ -d $dir/${1/v} ]] && _p9k_ret=${1/v} && return
+ [[ -d $dir/${1#node-} ]] && _p9k_ret=${1#node-} && return
+ [[ -d $dir/${1#node-v} ]] && _p9k_ret=${1#node-v} && return
return 1
}
function _p9k_nodenv_global_version() {
- _p9k_read_nodenv_version_file ${NODENV_ROOT:-$HOME/.nodenv}/version || _P9K_RETVAL=system
+ _p9k_read_nodenv_version_file ${NODENV_ROOT:-$HOME/.nodenv}/version || _p9k_ret=system
}
################################################################
# Segment to display nodenv information
# https://github.com/nodenv/nodenv
-set_default POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW false
prompt_nodenv() {
(( $+commands[nodenv] )) || return
- _P9K_RETVAL=$NODENV_VERSION
- if [[ -z $_P9K_RETVAL ]]; then
+ _p9k_ret=$NODENV_VERSION
+ if [[ -z $_p9k_ret ]]; then
[[ $NODENV_DIR == /* ]] && local dir=$NODENV_DIR || local dir="$PWD/$NODENV_DIR"
while [[ $dir != //[^/]# ]]; do
_p9k_read_nodenv_version_file $dir/.node-version && break
[[ $dir == / ]] && break
dir=${dir:h}
done
- if [[ -z $_P9K_RETVAL ]]; then
- [[ $POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW == true ]] || return
+ if [[ -z $_p9k_ret ]]; then
+ (( _POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW )) || return
_p9k_nodenv_global_version
fi
fi
- _p9k_nodeenv_version_transform $_P9K_RETVAL || return
- local v=$_P9K_RETVAL
+ _p9k_nodeenv_version_transform $_p9k_ret || return
+ local v=$_p9k_ret
- if [[ $POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW == false ]]; then
+ if (( !_POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW )); then
_p9k_nodenv_global_version
- _p9k_nodeenv_version_transform $_P9K_RETVAL && [[ $v == $_P9K_RETVAL ]] && return
+ _p9k_nodeenv_version_transform $_p9k_ret && [[ $v == $_p9k_ret ]] && return
fi
"$1_prompt_segment" "$0" "$2" "black" "green" 'NODE_ICON' 0 '' "${v//\%/%%}"
@@ -1766,7 +1859,7 @@ prompt_nodenv() {
################################################################
# Segment to print a little OS icon
prompt_os_icon() {
- "$1_prompt_segment" "$0" "$2" "black" "white" '' 0 '' "$OS_ICON"
+ "$1_prompt_segment" "$0" "$2" "black" "white" '' 0 '' "$_p9k_os_icon"
}
################################################################
@@ -1774,7 +1867,7 @@ prompt_os_icon() {
prompt_php_version() {
_p9k_cached_cmd_stdout php --version || return
local -a match
- [[ $_P9K_RETVAL == (#b)(*$'\n')#(PHP [[:digit:].]##)* ]] || return
+ [[ $_p9k_ret == (#b)(*$'\n')#(PHP [[:digit:].]##)* ]] || return
local v=$match[2]
"$1_prompt_segment" "$0" "$2" "fuchsia" "grey93" '' 0 '' "${v//\%/%%}"
}
@@ -1784,10 +1877,10 @@ prompt_php_version() {
prompt_ram() {
local -F free_bytes
- case $OS in
+ case $_p9k_os in
OSX)
(( $+commands[vm_stat] )) || return
- local stat && stat=$(command vm_stat 2>/dev/null) || return
+ local stat && stat=$(vm_stat 2>/dev/null) || return
[[ $stat =~ 'Pages free:[[:space:]]+([0-9]+)' ]] || return
(( free_bytes+=match[1] ))
[[ $stat =~ 'Pages inactive:[[:space:]]+([0-9]+)' ]] || return
@@ -1795,35 +1888,34 @@ prompt_ram() {
(( free_bytes *= 4096 ))
;;
BSD)
- local stat && stat=$(command grep -F 'avail memory' /var/run/dmesg.boot 2>/dev/null) || return
+ local stat && stat=$(grep -F 'avail memory' /var/run/dmesg.boot 2>/dev/null) || return
free_bytes=${${(A)=stat}[4]}
;;
*)
- local stat && stat=$(command grep -F MemAvailable /proc/meminfo 2>/dev/null) || return
+ local stat && stat=$(grep -F MemAvailable /proc/meminfo 2>/dev/null) || return
free_bytes=$(( ${${(A)=stat}[2]} * 1024 ))
;;
esac
_p9k_human_readable_bytes $free_bytes
- $1_prompt_segment $0 $2 yellow "$DEFAULT_COLOR" RAM_ICON 0 '' $_P9K_RETVAL
+ $1_prompt_segment $0 $2 yellow "$_p9k_color1" RAM_ICON 0 '' $_p9k_ret
}
function _p9k_read_rbenv_version_file() {
[[ -r $1 ]] || return
local content
read -r content <$1 2>/dev/null
- _P9K_RETVAL="${${(A)=content}[1]}"
- [[ -n $_P9K_RETVAL ]]
+ _p9k_ret="${${(A)=content}[1]}"
+ [[ -n $_p9k_ret ]]
}
function _p9k_rbenv_global_version() {
- _p9k_read_rbenv_version_file ${RBENV_ROOT:-$HOME/.rbenv}/version || _P9K_RETVAL=system
+ _p9k_read_rbenv_version_file ${RBENV_ROOT:-$HOME/.rbenv}/version || _p9k_ret=system
}
################################################################
# Segment to display rbenv information
# https://github.com/rbenv/rbenv#choosing-the-ruby-version
-set_default POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW false
prompt_rbenv() {
(( $+commands[rbenv] )) || return
local v=$RBENV_VERSION
@@ -1831,53 +1923,51 @@ prompt_rbenv() {
[[ $RBENV_DIR == /* ]] && local dir=$RBENV_DIR || local dir="$PWD/$RBENV_DIR"
while true; do
if _p9k_read_rbenv_version_file $dir/.ruby-version; then
- v=$_P9K_RETVAL
+ v=$_p9k_ret
break
fi
if [[ $dir == / ]]; then
- [[ $POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW == true ]] || return
+ (( _POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW )) || return
_p9k_rbenv_global_version
- v=$_P9K_RETVAL
+ v=$_p9k_ret
break
fi
dir=${dir:h}
done
fi
- if [[ $POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW == false ]]; then
+ if (( !_POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW )); then
_p9k_rbenv_global_version
- [[ $v == $_P9K_RETVAL ]] && return
+ [[ $v == $_p9k_ret ]] && return
fi
- "$1_prompt_segment" "$0" "$2" "red" "$DEFAULT_COLOR" 'RUBY_ICON' 0 '' "${v//\%/%%}"
+ "$1_prompt_segment" "$0" "$2" "red" "$_p9k_color1" 'RUBY_ICON' 0 '' "${v//\%/%%}"
}
################################################################
# Segment to display chruby information
# see https://github.com/postmodern/chruby/issues/245 for chruby_auto issue with ZSH
-set_default POWERLEVEL9K_CHRUBY_SHOW_VERSION true
-set_default POWERLEVEL9K_CHRUBY_SHOW_ENGINE true
prompt_chruby() {
[[ -n $RUBY_ENGINE ]] || return
local v=''
- [[ $POWERLEVEL9K_CHRUBY_SHOW_ENGINE == true ]] && v=$RUBY_ENGINE
- if [[ $POWERLEVEL9K_CHRUBY_SHOW_VERSION == true && -n $RUBY_VERSION ]] && v+=${v:+ }$RUBY_VERSION
- "$1_prompt_segment" "$0" "$2" "red" "$DEFAULT_COLOR" 'RUBY_ICON' 0 '' "${v//\%/%%}"
+ (( _POWERLEVEL9K_CHRUBY_SHOW_ENGINE )) && v=$RUBY_ENGINE
+ if [[ $_POWERLEVEL9K_CHRUBY_SHOW_VERSION == 1 && -n $RUBY_VERSION ]] && v+=${v:+ }$RUBY_VERSION
+ "$1_prompt_segment" "$0" "$2" "red" "$_p9k_color1" 'RUBY_ICON' 0 '' "${v//\%/%%}"
}
################################################################
# Segment to print an icon if user is root.
prompt_root_indicator() {
- "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR" "yellow" 'ROOT_ICON' 0 '${${(%):-%#}:#%}' ''
+ "$1_prompt_segment" "$0" "$2" "$_p9k_color1" "yellow" 'ROOT_ICON' 0 '${${(%):-%#}:#%}' ''
}
################################################################
# Segment to display Rust version number
prompt_rust_version() {
_p9k_cached_cmd_stdout rustc --version || return
- local v=${${_P9K_RETVAL#rustc }%% *}
+ local v=${${_p9k_ret#rustc }%% *}
[[ -n $v ]] || return
- "$1_prompt_segment" "$0" "$2" "darkorange" "$DEFAULT_COLOR" 'RUST_ICON' 0 '' "${v//\%/%%}"
+ "$1_prompt_segment" "$0" "$2" "darkorange" "$_p9k_color1" 'RUST_ICON' 0 '' "${v//\%/%%}"
}
# RSpec test ratio
@@ -1897,97 +1987,85 @@ prompt_rvm() {
[[ $GEM_HOME == *rvm* && $ruby_string != $rvm_path/bin/ruby ]] || return
local v=${${${GEM_HOME:t}%%${rvm_gemset_separator:-@}*}#*-}
[[ -n $v ]] || return
- "$1_prompt_segment" "$0" "$2" "240" "$DEFAULT_COLOR" 'RUBY_ICON' 0 '' "${v//\%/%%}"
+ "$1_prompt_segment" "$0" "$2" "240" "$_p9k_color1" 'RUBY_ICON' 0 '' "${v//\%/%%}"
}
################################################################
# Segment to display SSH icon when connected
prompt_ssh() {
if [[ -n "$SSH_CLIENT" || -n "$SSH_TTY" ]]; then
- "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR" "yellow" 'SSH_ICON' 0 '' ''
+ "$1_prompt_segment" "$0" "$2" "$_p9k_color1" "yellow" 'SSH_ICON' 0 '' ''
fi
}
-################################################################
-# Status: When an error occur, return the error code, or a cross icon if option is set
-# Display an ok icon when no error occur, or hide the segment if option is set to false
-#
-set_default POWERLEVEL9K_STATUS_CROSS false
-set_default POWERLEVEL9K_STATUS_OK true
-set_default POWERLEVEL9K_STATUS_SHOW_PIPESTATUS true
-set_default POWERLEVEL9K_STATUS_HIDE_SIGNAME false
-# old options, retro compatibility
-set_default POWERLEVEL9K_STATUS_VERBOSE true
-set_default POWERLEVEL9K_STATUS_OK_IN_NON_VERBOSE false
-
exit_code_or_status() {
local ec=$1
- if [[ "$POWERLEVEL9K_STATUS_HIDE_SIGNAME" = true ]] || (( ec <= 128 )); then
- _P9K_RETVAL=$ec
+ if (( _POWERLEVEL9K_STATUS_HIDE_SIGNAME || ec <= 128 )); then
+ _p9k_ret=$ec
else
- _P9K_RETVAL="SIG${signals[$((ec - 127))]}($((ec - 128)))"
+ _p9k_ret="SIG${signals[$((ec - 127))]}($((ec - 128)))"
fi
}
-typeset -gi _P9K_EXIT_CODE
-typeset -ga _P9K_PIPE_EXIT_CODES
-
+################################################################
+# Status: When an error occur, return the error code, or a cross icon if option is set
+# Display an ok icon when no error occur, or hide the segment if option is set to false
prompt_status() {
- if ! _p9k_cache_get "$0" "$2" "$_P9K_EXIT_CODE" "${(@)_P9K_PIPE_EXIT_CODES}"; then
+ if ! _p9k_cache_get "$0" "$2" "$__p9k_exit_code" "${(@)__p9k_pipe_exit_codes}"; then
local ec_text
local ec_sum
local ec
- if [[ $POWERLEVEL9K_STATUS_SHOW_PIPESTATUS == true ]]; then
- if (( $#_P9K_PIPE_EXIT_CODES > 1 )); then
- ec_sum=${_P9K_PIPE_EXIT_CODES[1]}
- exit_code_or_status "${_P9K_PIPE_EXIT_CODES[1]}"
+ if (( _POWERLEVEL9K_STATUS_SHOW_PIPESTATUS )); then
+ if (( $#__p9k_pipe_exit_codes > 1 )); then
+ ec_sum=${__p9k_pipe_exit_codes[1]}
+ exit_code_or_status "${__p9k_pipe_exit_codes[1]}"
else
- ec_sum=${_P9K_EXIT_CODE}
- exit_code_or_status "${_P9K_EXIT_CODE}"
+ ec_sum=${__p9k_exit_code}
+ exit_code_or_status "${__p9k_exit_code}"
fi
- ec_text=$_P9K_RETVAL
- for ec in "${(@)_P9K_PIPE_EXIT_CODES[2,-1]}"; do
+ ec_text=$_p9k_ret
+ for ec in "${(@)__p9k_pipe_exit_codes[2,-1]}"; do
(( ec_sum += ec ))
exit_code_or_status "$ec"
- ec_text+="|$_P9K_RETVAL"
+ ec_text+="|$_p9k_ret"
done
else
- ec_sum=${_P9K_EXIT_CODE}
- # We use _P9K_EXIT_CODE instead of the right-most _P9K_PIPE_EXIT_CODES item because
+ ec_sum=${__p9k_exit_code}
+ # We use __p9k_exit_code instead of the right-most __p9k_pipe_exit_codes item because
# PIPE_FAIL may be set.
- exit_code_or_status "${_P9K_EXIT_CODE}"
- ec_text=$_P9K_RETVAL
+ exit_code_or_status "${__p9k_exit_code}"
+ ec_text=$_p9k_ret
fi
if (( ec_sum > 0 )); then
- if [[ "$POWERLEVEL9K_STATUS_CROSS" == false && "$POWERLEVEL9K_STATUS_VERBOSE" == true ]]; then
- _P9K_CACHE_VAL=("$0_ERROR" "$2" red yellow1 CARRIAGE_RETURN_ICON 0 '' "$ec_text")
+ if (( !_POWERLEVEL9K_STATUS_CROSS && _POWERLEVEL9K_STATUS_VERBOSE )); then
+ _p9k_cache_val=("$0_ERROR" "$2" red yellow1 CARRIAGE_RETURN_ICON 0 '' "$ec_text")
else
- _P9K_CACHE_VAL=("$0_ERROR" "$2" "$DEFAULT_COLOR" red FAIL_ICON 0 '' '')
+ _p9k_cache_val=("$0_ERROR" "$2" "$_p9k_color1" red FAIL_ICON 0 '' '')
fi
- elif [[ "$POWERLEVEL9K_STATUS_OK" == true ]] && [[ "$POWERLEVEL9K_STATUS_VERBOSE" == true || "$POWERLEVEL9K_STATUS_OK_IN_NON_VERBOSE" == true ]]; then
- _P9K_CACHE_VAL=("$0_OK" "$2" "$DEFAULT_COLOR" green OK_ICON 0 '' '')
+ elif (( _POWERLEVEL9K_STATUS_OK && (_POWERLEVEL9K_STATUS_VERBOSE || _POWERLEVEL9K_STATUS_OK_IN_NON_VERBOSE) )); then
+ _p9k_cache_val=("$0_OK" "$2" "$_p9k_color1" green OK_ICON 0 '' '')
else
return
fi
- if (( $#_P9K_PIPE_EXIT_CODES < 3 )); then
- _p9k_cache_set "${(@)_P9K_CACHE_VAL}"
+ if (( $#__p9k_pipe_exit_codes < 3 )); then
+ _p9k_cache_set "${(@)_p9k_cache_val}"
fi
fi
- "$1_prompt_segment" "${(@)_P9K_CACHE_VAL}"
+ "$1_prompt_segment" "${(@)_p9k_cache_val}"
}
prompt_prompt_char() {
- if (( _P9K_EXIT_CODE )); then
- $1_prompt_segment $0_ERROR_VIINS $2 "$DEFAULT_COLOR" 196 '' 0 '${${KEYMAP:-0}:#vicmd}' '❯'
- $1_prompt_segment $0_ERROR_VICMD $2 "$DEFAULT_COLOR" 196 '' 0 '${(M)${:-$KEYMAP$_P9K_REGION_ACTIVE}:#vicmd0}' '❮'
- $1_prompt_segment $0_ERROR_VIVIS $2 "$DEFAULT_COLOR" 196 '' 0 '${(M)${:-$KEYMAP$_P9K_REGION_ACTIVE}:#vicmd1}' 'Ⅴ'
+ if (( __p9k_exit_code )); then
+ $1_prompt_segment $0_ERROR_VIINS $2 "$_p9k_color1" 196 '' 0 '${${KEYMAP:-0}:#vicmd}' '❯'
+ $1_prompt_segment $0_ERROR_VICMD $2 "$_p9k_color1" 196 '' 0 '${(M)${:-$KEYMAP$_p9k_region_active}:#vicmd0}' '❮'
+ $1_prompt_segment $0_ERROR_VIVIS $2 "$_p9k_color1" 196 '' 0 '${(M)${:-$KEYMAP$_p9k_region_active}:#vicmd1}' 'Ⅴ'
else
- $1_prompt_segment $0_OK_VIINS $2 "$DEFAULT_COLOR" 76 '' 0 '${${KEYMAP:-0}:#vicmd}' '❯'
- $1_prompt_segment $0_OK_VICMD $2 "$DEFAULT_COLOR" 76 '' 0 '${(M)${:-$KEYMAP$_P9K_REGION_ACTIVE}:#vicmd0}' '❮'
- $1_prompt_segment $0_OK_VIVIS $2 "$DEFAULT_COLOR" 76 '' 0 '${(M)${:-$KEYMAP$_P9K_REGION_ACTIVE}:#vicmd1}' 'Ⅴ'
+ $1_prompt_segment $0_OK_VIINS $2 "$_p9k_color1" 76 '' 0 '${${KEYMAP:-0}:#vicmd}' '❯'
+ $1_prompt_segment $0_OK_VICMD $2 "$_p9k_color1" 76 '' 0 '${(M)${:-$KEYMAP$_p9k_region_active}:#vicmd0}' '❮'
+ $1_prompt_segment $0_OK_VIVIS $2 "$_p9k_color1" 76 '' 0 '${(M)${:-$KEYMAP$_p9k_region_active}:#vicmd1}' 'Ⅴ'
fi
}
@@ -1996,9 +2074,9 @@ prompt_prompt_char() {
prompt_swap() {
local -F used_bytes
- if [[ "$OS" == "OSX" ]]; then
+ if [[ "$_p9k_os" == "OSX" ]]; then
(( $+commands[sysctl] )) || return
- [[ "$(command sysctl vm.swapusage 2>/dev/null)" =~ "used = ([0-9,.]+)([A-Z]+)" ]] || return
+ [[ "$(sysctl vm.swapusage 2>/dev/null)" =~ "used = ([0-9,.]+)([A-Z]+)" ]] || return
used_bytes=${match[1]//,/.}
case ${match[2]} in
'K') (( used_bytes *= 1024 ));;
@@ -2008,7 +2086,7 @@ prompt_swap() {
*) return;;
esac
else
- local meminfo && meminfo=$(command grep -F 'Swap' /proc/meminfo 2>/dev/null) || return
+ local meminfo && meminfo=$(grep -F 'Swap' /proc/meminfo 2>/dev/null) || return
[[ $meminfo =~ 'SwapTotal:[[:space:]]+([0-9]+)' ]] || return
(( used_bytes+=match[1] ))
[[ $meminfo =~ 'SwapFree:[[:space:]]+([0-9]+)' ]] || return
@@ -2017,7 +2095,7 @@ prompt_swap() {
fi
_p9k_human_readable_bytes $used_bytes
- $1_prompt_segment $0 $2 yellow "$DEFAULT_COLOR" SWAP_ICON 0 '' $_P9K_RETVAL
+ $1_prompt_segment $0 $2 yellow "$_p9k_color1" SWAP_ICON 0 '' $_p9k_ret
}
################################################################
@@ -2035,8 +2113,8 @@ prompt_symfony2_tests() {
# Segment to display Symfony2-Version
prompt_symfony2_version() {
if [[ -r app/bootstrap.php.cache ]]; then
- local v="${$(command grep -F " VERSION " app/bootstrap.php.cache 2>/dev/null)//[![:digit:].]}"
- "$1_prompt_segment" "$0" "$2" "grey35" "$DEFAULT_COLOR" 'SYMFONY_ICON' 0 '' "${v//\%/%%}"
+ local v="${$(grep -F " VERSION " app/bootstrap.php.cache 2>/dev/null)//[![:digit:].]}"
+ "$1_prompt_segment" "$0" "$2" "grey35" "$_p9k_color1" 'SYMFONY_ICON' 0 '' "${v//\%/%%}"
fi
}
@@ -2050,80 +2128,55 @@ build_test_stats() {
(( code_amount > 0 )) || return
local -F 2 ratio=$(( 100. * tests_amount / code_amount ))
- (( ratio >= 75 )) && "$1_prompt_segment" "${2}_GOOD" "$3" "cyan" "$DEFAULT_COLOR" "$6" 0 '' "$headline: $ratio%%"
- (( ratio >= 50 && ratio < 75 )) && "$1_prompt_segment" "$2_AVG" "$3" "yellow" "$DEFAULT_COLOR" "$6" 0 '' "$headline: $ratio%%"
- (( ratio < 50 )) && "$1_prompt_segment" "$2_BAD" "$3" "red" "$DEFAULT_COLOR" "$6" 0 '' "$headline: $ratio%%"
+ (( ratio >= 75 )) && "$1_prompt_segment" "${2}_GOOD" "$3" "cyan" "$_p9k_color1" "$6" 0 '' "$headline: $ratio%%"
+ (( ratio >= 50 && ratio < 75 )) && "$1_prompt_segment" "$2_AVG" "$3" "yellow" "$_p9k_color1" "$6" 0 '' "$headline: $ratio%%"
+ (( ratio < 50 )) && "$1_prompt_segment" "$2_BAD" "$3" "red" "$_p9k_color1" "$6" 0 '' "$headline: $ratio%%"
}
################################################################
# System time
-
-# Format for the current time: 09:51:02. See `man 3 strftime`.
-set_default POWERLEVEL9K_TIME_FORMAT "%D{%H:%M:%S}"
-# If set to true, time will update every second.
-set_default POWERLEVEL9K_EXPERIMENTAL_TIME_REALTIME false
-# If set to true, time will update when you hit enter. This way prompts for the past
-# commands will contain the start times of their commands as opposed to the default
-# behavior where they contain the end times of their preceding commands.
-set_default POWERLEVEL9K_TIME_UPDATE_ON_COMMAND false
prompt_time() {
- if [[ $POWERLEVEL9K_EXPERIMENTAL_TIME_REALTIME == true ]]; then
- "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR_INVERTED" "$DEFAULT_COLOR" "TIME_ICON" 0 '' \
- "$POWERLEVEL9K_TIME_FORMAT"
+ if (( _POWERLEVEL9K_EXPERIMENTAL_TIME_REALTIME )); then
+ "$1_prompt_segment" "$0" "$2" "$_p9k_color2" "$_p9k_color1" "TIME_ICON" 0 '' \
+ "$_POWERLEVEL9K_TIME_FORMAT"
else
- local t=${${(%)POWERLEVEL9K_TIME_FORMAT}//\%/%%}
- if [[ $POWERLEVEL9K_TIME_UPDATE_ON_COMMAND == true ]]; then
+ local t=${${(%)_POWERLEVEL9K_TIME_FORMAT}//\%/%%}
+ if (( _POWERLEVEL9K_TIME_UPDATE_ON_COMMAND )); then
_p9k_escape $t
- t=$_P9K_RETVAL
- _p9k_escape $POWERLEVEL9K_TIME_FORMAT
- "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR_INVERTED" "$DEFAULT_COLOR" "TIME_ICON" 1 '' \
- "\${_P9K_LINE_FINISH-$t}\${_P9K_LINE_FINISH+$_P9K_RETVAL}"
+ t=$_p9k_ret
+ _p9k_escape $_POWERLEVEL9K_TIME_FORMAT
+ "$1_prompt_segment" "$0" "$2" "$_p9k_color2" "$_p9k_color1" "TIME_ICON" 1 '' \
+ "\${_p9k_line_finish-$t}\${_p9k_line_finish+$_p9k_ret}"
else
- "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR_INVERTED" "$DEFAULT_COLOR" "TIME_ICON" 0 '' $t
+ "$1_prompt_segment" "$0" "$2" "$_p9k_color2" "$_p9k_color1" "TIME_ICON" 0 '' $t
fi
fi
}
################################################################
# System date
-set_default POWERLEVEL9K_DATE_FORMAT "%D{%d.%m.%y}"
prompt_date() {
- local d=$POWERLEVEL9K_DATE_FORMAT
- [[ $POWERLEVEL9K_EXPERIMENTAL_TIME_REALTIME == true ]] || d=${${(%)d}//\%/%%}
- "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR_INVERTED" "$DEFAULT_COLOR" "DATE_ICON" 0 '' "$d"
+ local d=${${(%)_POWERLEVEL9K_DATE_FORMAT}//\%/%%}
+ "$1_prompt_segment" "$0" "$2" "$_p9k_color2" "$_p9k_color1" "DATE_ICON" 0 '' "$d"
}
################################################################
# todo.sh: shows the number of tasks in your todo.sh file
prompt_todo() {
local todo=$commands[todo.sh]
- [[ -n $todo ]] || return
- if (( ! $+_P9K_TODO_FILE )); then
- local bash=${commands[bash]:-:}
- typeset -g _P9K_TODO_FILE=$($bash 2>/dev/null -c "
- [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\$HOME/.todo/config
- [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\$HOME/todo.cfg
- [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\$HOME/.todo.cfg
- [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\${XDG_CONFIG_HOME:-\$HOME/.config}/todo/config
- [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=${(qqq)todo:h}/todo.cfg
- [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\${TODOTXT_GLOBAL_CFG_FILE:-/etc/todo/config}
- [ -r \"\$TODOTXT_CFG_FILE\" ] || exit
- source \"\$TODOTXT_CFG_FILE\" &>/dev/null
- echo \"\$TODO_FILE\"")
- fi
- [[ -r $_P9K_TODO_FILE ]] || return
+ [[ -n $todo && -r $_p9k_todo_file ]] || return
local -H stat
- zstat -H stat -- $_P9K_TODO_FILE 2>/dev/null || return
+ zstat -H stat -- $_p9k_todo_file 2>/dev/null || return
if ! _p9k_cache_get $0 $stat[inode] $stat[mtime] $stat[size]; then
- local count=$($todo -p ls | command tail -1)
+ local count="$($todo -p ls | tail -1)"
if [[ $count == (#b)'TODO: '[[:digit:]]##' of '([[:digit:]]##)' '* ]]; then
_p9k_cache_set 1 $match[1]
else
_p9k_cache_set 0 0
fi
fi
- (( $_P9K_CACHE_VAL[1] )) || return
- "$1_prompt_segment" "$0" "$2" "grey50" "$DEFAULT_COLOR" 'TODO_ICON' 0 '' "${_P9K_CACHE_VAL[2]}"
+ (( $_p9k_cache_val[1] )) || return
+ "$1_prompt_segment" "$0" "$2" "grey50" "$_p9k_color1" 'TODO_ICON' 0 '' "${_p9k_cache_val[2]}"
}
################################################################
@@ -2131,51 +2184,206 @@ prompt_todo() {
# version control
# The vcs segment can have 4 different states - defaults to 'CLEAN'.
-typeset -gA vcs_states=(
+typeset -gA __p9k_vcs_states=(
'CLEAN' '2'
'MODIFIED' '3'
'UNTRACKED' '2'
'LOADING' '8'
)
-set_default POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND red
-set_default POWERLEVEL9K_SHOW_CHANGESET false
-set_default POWERLEVEL9K_VCS_LOADING_TEXT loading
-set_default -i POWERLEVEL9K_VCS_INTERNAL_HASH_LENGTH 8
-set_default -a POWERLEVEL9K_VCS_GIT_HOOKS vcs-detect-changes git-untracked git-aheadbehind git-stash git-remotebranch git-tagname
-set_default -a POWERLEVEL9K_VCS_HG_HOOKS vcs-detect-changes
-set_default -a POWERLEVEL9K_VCS_SVN_HOOKS vcs-detect-changes svn-detect-changes
+function +vi-git-untracked() {
+ [[ -z "${vcs_comm[gitdir]}" || "${vcs_comm[gitdir]}" == "." ]] && return
-# If it takes longer than this to fetch git repo status, display the prompt with a greyed out
-# vcs segment and fix it asynchronously when the results come it.
-set_default -F POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS 0.05
-set_default -a POWERLEVEL9K_VCS_BACKENDS git
+ # get the root for the current repo or submodule
+ local repoTopLevel="$(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
-powerlevel9k_vcs_init() {
- if [[ -n "$POWERLEVEL9K_CHANGESET_HASH_LENGTH" ]]; then
- POWERLEVEL9K_VCS_INTERNAL_HASH_LENGTH="$POWERLEVEL9K_CHANGESET_HASH_LENGTH"
+ local untrackedFiles=$(git ls-files --others --exclude-standard "${repoTopLevel}" 2> /dev/null)
+
+ if [[ -z $untrackedFiles && $_POWERLEVEL9K_VCS_SHOW_SUBMODULE_DIRTY == 1 ]]; then
+ untrackedFiles+=$(git submodule foreach --quiet --recursive '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=$(git rev-list origin/${hook_com[branch]}..HEAD | wc -l)
+ ahead=$(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=$(git rev-list HEAD..origin/${hook_com[branch]} | wc -l)
+ behind=$(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=${$(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=$(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 $(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=$(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=$(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
- VCS_CHANGESET_PREFIX=''
- if [[ "$POWERLEVEL9K_SHOW_CHANGESET" == true ]]; then
- VCS_CHANGESET_PREFIX="$(print_icon 'VCS_COMMIT_ICON')%0.$POWERLEVEL9K_VCS_INTERNAL_HASH_LENGTH""i "
+ local prefix=''
+ if (( _POWERLEVEL9K_SHOW_CHANGESET )); then
+ _p9k_get_icon '' VCS_COMMIT_ICON
+ prefix="$_p9k_ret%0.${_POWERLEVEL9K_CHANGESET_HASH_LENGTH}i "
fi
zstyle ':vcs_info:*' check-for-changes true
- VCS_DEFAULT_FORMAT="$VCS_CHANGESET_PREFIX%b%c%u%m"
- zstyle ':vcs_info:*' formats "$VCS_DEFAULT_FORMAT"
- zstyle ':vcs_info:*' actionformats "%b %F{${POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND}}| %a%f"
- zstyle ':vcs_info:*' stagedstr " $(print_icon 'VCS_STAGED_ICON')"
- zstyle ':vcs_info:*' unstagedstr " $(print_icon 'VCS_UNSTAGED_ICON')"
- zstyle ':vcs_info:git*+set-message:*' hooks $POWERLEVEL9K_VCS_GIT_HOOKS
- zstyle ':vcs_info:hg*+set-message:*' hooks $POWERLEVEL9K_VCS_HG_HOOKS
- zstyle ':vcs_info:svn*+set-message:*' hooks $POWERLEVEL9K_VCS_SVN_HOOKS
+ zstyle ':vcs_info:*' formats "$prefix%b%c%u%m"
+ zstyle ':vcs_info:*' actionformats "%b %F{$_POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND}| %a%f"
+ _p9k_get_icon '' VCS_STAGED_ICON
+ zstyle ':vcs_info:*' stagedstr " $_p9k_ret"
+ _p9k_get_icon '' VCS_UNSTAGED_ICON
+ zstyle ':vcs_info:*' unstagedstr " $_p9k_ret"
+ zstyle ':vcs_info:git*+set-message:*' hooks $_POWERLEVEL9K_VCS_GIT_HOOKS
+ zstyle ':vcs_info:hg*+set-message:*' hooks $_POWERLEVEL9K_VCS_HG_HOOKS
+ zstyle ':vcs_info:svn*+set-message:*' hooks $_POWERLEVEL9K_VCS_SVN_HOOKS
# For Hg, only show the branch name
- zstyle ':vcs_info:hg*:*' branchformat "$(print_icon 'VCS_BRANCH_ICON')%b"
+ if (( _POWERLEVEL9K_HIDE_BRANCH_ICON )); then
+ zstyle ':vcs_info:hg*:*' branchformat "%b"
+ else
+ _p9k_get_icon '' VCS_BRANCH_ICON
+ zstyle ':vcs_info:hg*:*' branchformat "$_p9k_ret%b"
+ fi
# The `get-revision` function must be turned on for dirty-check to work for Hg
zstyle ':vcs_info:hg*:*' get-revision true
zstyle ':vcs_info:hg*:*' get-bookmarks true
@@ -2183,23 +2391,17 @@ powerlevel9k_vcs_init() {
# TODO: fix the %b (branch) format for svn. Using %b breaks color-encoding of the foreground
# for the rest of the powerline.
- zstyle ':vcs_info:svn*:*' formats "$VCS_CHANGESET_PREFIX%c%u"
- zstyle ':vcs_info:svn*:*' actionformats "$VCS_CHANGESET_PREFIX%c%u %F{${POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND}}| %a%f"
+ zstyle ':vcs_info:svn*:*' formats "$prefix%c%u"
+ zstyle ':vcs_info:svn*:*' actionformats "$prefix%c%u %F{$_POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND}| %a%f"
- if [[ "$POWERLEVEL9K_SHOW_CHANGESET" == true ]]; then
+ if (( _POWERLEVEL9K_SHOW_CHANGESET )); then
zstyle ':vcs_info:*' get-revision true
fi
}
-# git workdir => the last prompt we've shown for it
-typeset -gAH _P9K_LAST_GIT_PROMPT
-
-# git workdir => 1 if gitstatus is slow on it, 0 if it's fast.
-typeset -gAH _P9K_GIT_SLOW
-
function _p9k_vcs_status_save() {
local z=$'\0'
- _P9K_LAST_GIT_PROMPT[$VCS_STATUS_WORKDIR]=$VCS_STATUS_ACTION$z$VCS_STATUS_COMMIT\
+ _p9k_last_git_prompt[$VCS_STATUS_WORKDIR]=$VCS_STATUS_ACTION$z$VCS_STATUS_COMMIT\
$z$VCS_STATUS_COMMITS_AHEAD$z$VCS_STATUS_COMMITS_BEHIND$z$VCS_STATUS_HAS_CONFLICTED\
$z$VCS_STATUS_HAS_STAGED$z$VCS_STATUS_HAS_UNSTAGED$z$VCS_STATUS_HAS_UNTRACKED\
$z$VCS_STATUS_INDEX_SIZE$z$VCS_STATUS_LOCAL_BRANCH$z$VCS_STATUS_NUM_CONFLICTED\
@@ -2221,20 +2423,19 @@ function _p9k_vcs_status_restore() {
function _p9k_vcs_status_for_dir() {
local dir=$1
while true; do
- _P9K_RETVAL=$_P9K_LAST_GIT_PROMPT[$dir]
- [[ -n $_P9K_RETVAL ]] && return 0
+ _p9k_ret=$_p9k_last_git_prompt[$dir]
+ [[ -n $_p9k_ret ]] && return 0
[[ $dir == / ]] && return 1
dir=${dir:h}
done
}
function _p9k_vcs_status_purge() {
- unsetopt nomatch
local dir=$1
while true; do
# unset doesn't work if $dir contains weird shit
- _P9K_LAST_GIT_PROMPT[$dir]=""
- _P9K_GIT_SLOW[$dir]=""
+ _p9k_last_git_prompt[$dir]=""
+ _p9k_git_slow[$dir]=""
[[ $dir == / ]] && break
dir=${dir:h}
done
@@ -2242,34 +2443,30 @@ function _p9k_vcs_status_purge() {
function _p9k_vcs_icon() {
case "$VCS_STATUS_REMOTE_URL" in
- *github*) _P9K_RETVAL=VCS_GIT_GITHUB_ICON;;
- *bitbucket*) _P9K_RETVAL=VCS_GIT_BITBUCKET_ICON;;
- *stash*) _P9K_RETVAL=VCS_GIT_GITHUB_ICON;;
- *gitlab*) _P9K_RETVAL=VCS_GIT_GITLAB_ICON;;
- *) _P9K_RETVAL=VCS_GIT_ICON;;
+ *github*) _p9k_ret=VCS_GIT_GITHUB_ICON;;
+ *bitbucket*) _p9k_ret=VCS_GIT_BITBUCKET_ICON;;
+ *stash*) _p9k_ret=VCS_GIT_GITHUB_ICON;;
+ *gitlab*) _p9k_ret=VCS_GIT_GITLAB_ICON;;
+ *) _p9k_ret=VCS_GIT_ICON;;
esac
}
-set_default POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING false
-
function _p9k_vcs_render() {
local state
- if (( $+_P9K_NEXT_VCS_DIR )); then
+ if (( $+_p9k_next_vcs_dir )); then
if _p9k_vcs_status_for_dir ${${GIT_DIR:a}:-$PWD}; then
- _p9k_vcs_status_restore $_P9K_RETVAL
+ _p9k_vcs_status_restore $_p9k_ret
state=LOADING
else
- if [[ -n $POWERLEVEL9K_VCS_LOADING_TEXT ]] || { _p9k_get_icon prompt_vcs_LOADING VCS_LOADING_ICON; [[ -n $_P9K_RETVAL ]] }; then
- $1_prompt_segment prompt_vcs_LOADING $2 "${vcs_states[LOADING]}" "$DEFAULT_COLOR" VCS_LOADING_ICON 0 '' "$POWERLEVEL9K_VCS_LOADING_TEXT"
- fi
+ $1_prompt_segment prompt_vcs_LOADING $2 "${__p9k_vcs_states[LOADING]}" "$_p9k_color1" VCS_LOADING_ICON 0 '' "$_POWERLEVEL9K_VCS_LOADING_TEXT"
return 0
fi
elif [[ $VCS_STATUS_RESULT != ok-* ]]; then
return 1
fi
- if [[ $POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING == true ]]; then
+ if (( _POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING )); then
if [[ -z $state ]]; then
if [[ $VCS_STATUS_HAS_STAGED != 0 || $VCS_STATUS_HAS_UNSTAGED != 0 ]]; then
state=MODIFIED
@@ -2280,21 +2477,21 @@ function _p9k_vcs_render() {
fi
fi
_p9k_vcs_icon
- $1_prompt_segment prompt_vcs_$state $2 "${vcs_states[$state]}" "$DEFAULT_COLOR" "$_P9K_RETVAL" 0 '' ""
+ $1_prompt_segment prompt_vcs_$state $2 "${__p9k_vcs_states[$state]}" "$_p9k_color1" "$_p9k_ret" 0 '' ""
return 0
fi
- (( ${POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-untracked]} )) || VCS_STATUS_HAS_UNTRACKED=0
- (( ${POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-aheadbehind]} )) || { VCS_STATUS_COMMITS_AHEAD=0 && VCS_STATUS_COMMITS_BEHIND=0 }
- (( ${POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-stash]} )) || VCS_STATUS_STASHES=0
- (( ${POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-remotebranch]} )) || VCS_STATUS_REMOTE_BRANCH=""
- (( ${POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-tagname]} )) || VCS_STATUS_TAG=""
+ (( ${_POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-untracked]} )) || VCS_STATUS_HAS_UNTRACKED=0
+ (( ${_POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-aheadbehind]} )) || { VCS_STATUS_COMMITS_AHEAD=0 && VCS_STATUS_COMMITS_BEHIND=0 }
+ (( ${_POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-stash]} )) || VCS_STATUS_STASHES=0
+ (( ${_POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-remotebranch]} )) || VCS_STATUS_REMOTE_BRANCH=""
+ (( ${_POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-tagname]} )) || VCS_STATUS_TAG=""
- (( POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM >= 0 && VCS_STATUS_COMMITS_AHEAD > POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM )) &&
- VCS_STATUS_COMMITS_AHEAD=$POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM
+ (( _POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM >= 0 && VCS_STATUS_COMMITS_AHEAD > _POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM )) &&
+ VCS_STATUS_COMMITS_AHEAD=$_POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM
- (( POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM >= 0 && VCS_STATUS_COMMITS_BEHIND > POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM )) &&
- VCS_STATUS_COMMITS_BEHIND=$POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM
+ (( _POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM >= 0 && VCS_STATUS_COMMITS_BEHIND > _POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM )) &&
+ VCS_STATUS_COMMITS_BEHIND=$_POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM
local -a cache_key=(
"$VCS_STATUS_LOCAL_BRANCH"
@@ -2312,7 +2509,7 @@ function _p9k_vcs_render() {
"$VCS_STATUS_STASHES"
"$VCS_STATUS_TAG"
)
- if [[ $POWERLEVEL9K_SHOW_CHANGESET == true || -z $VCS_STATUS_LOCAL_BRANCH ]]; then
+ if [[ $_POWERLEVEL9K_SHOW_CHANGESET == 1 || -z $VCS_STATUS_LOCAL_BRANCH ]]; then
cache_key+=$VCS_STATUS_COMMIT
fi
@@ -2320,7 +2517,7 @@ function _p9k_vcs_render() {
local icon
local content
- if (( ${POWERLEVEL9K_VCS_GIT_HOOKS[(I)vcs-detect-changes]} )); then
+ if (( ${_POWERLEVEL9K_VCS_GIT_HOOKS[(I)vcs-detect-changes]} )); then
if [[ $VCS_STATUS_HAS_STAGED != 0 || $VCS_STATUS_HAS_UNSTAGED != 0 ]]; then
: ${state:=MODIFIED}
elif [[ $VCS_STATUS_HAS_UNTRACKED != 0 ]]; then
@@ -2342,24 +2539,24 @@ function _p9k_vcs_render() {
function _$0_fmt() {
_p9k_vcs_style $state $1
- content+="$_P9K_RETVAL$2"
+ content+="$_p9k_ret$2"
}
local ws
- if [[ $POWERLEVEL9K_SHOW_CHANGESET == true || -z $VCS_STATUS_LOCAL_BRANCH ]]; then
+ if [[ $_POWERLEVEL9K_SHOW_CHANGESET == 1 || -z $VCS_STATUS_LOCAL_BRANCH ]]; then
_p9k_get_icon prompt_vcs_$state VCS_COMMIT_ICON
- _$0_fmt COMMIT "$_P9K_RETVAL${${VCS_STATUS_COMMIT:0:$POWERLEVEL9K_VCS_INTERNAL_HASH_LENGTH}:-HEAD}"
+ _$0_fmt COMMIT "$_p9k_ret${${VCS_STATUS_COMMIT:0:$_POWERLEVEL9K_CHANGESET_HASH_LENGTH}:-HEAD}"
ws=' '
fi
if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then
- _p9k_get_icon prompt_vcs_$state VCS_BRANCH_ICON
- _$0_fmt BRANCH "$ws$_P9K_RETVAL${VCS_STATUS_LOCAL_BRANCH//\%/%%}"
+ (( _POWERLEVEL9K_HIDE_BRANCH_ICON )) && _p9k_ret='' || _p9k_get_icon prompt_vcs_$state VCS_BRANCH_ICON
+ _$0_fmt BRANCH "$ws$_p9k_ret${VCS_STATUS_LOCAL_BRANCH//\%/%%}"
fi
- if [[ $POWERLEVEL9K_VCS_HIDE_TAGS == false && -n $VCS_STATUS_TAG ]]; then
+ if [[ $_POWERLEVEL9K_VCS_HIDE_TAGS == 0 && -n $VCS_STATUS_TAG ]]; then
_p9k_get_icon prompt_vcs_$state VCS_TAG_ICON
- _$0_fmt TAG " $_P9K_RETVAL${VCS_STATUS_TAG//\%/%%}"
+ _$0_fmt TAG " $_p9k_ret${VCS_STATUS_TAG//\%/%%}"
fi
if [[ -n $VCS_STATUS_ACTION ]]; then
@@ -2368,82 +2565,80 @@ function _p9k_vcs_render() {
if [[ -n $VCS_STATUS_REMOTE_BRANCH &&
$VCS_STATUS_LOCAL_BRANCH != $VCS_STATUS_REMOTE_BRANCH ]]; then
_p9k_get_icon prompt_vcs_$state VCS_REMOTE_BRANCH_ICON
- _$0_fmt REMOTE_BRANCH " $_P9K_RETVAL${VCS_STATUS_REMOTE_BRANCH//\%/%%}"
+ _$0_fmt REMOTE_BRANCH " $_p9k_ret${VCS_STATUS_REMOTE_BRANCH//\%/%%}"
fi
if [[ $VCS_STATUS_HAS_STAGED == 1 || $VCS_STATUS_HAS_UNSTAGED == 1 || $VCS_STATUS_HAS_UNTRACKED == 1 ]]; then
_p9k_get_icon prompt_vcs_$state VCS_DIRTY_ICON
- _$0_fmt DIRTY "$_P9K_RETVAL"
+ _$0_fmt DIRTY "$_p9k_ret"
if [[ $VCS_STATUS_HAS_STAGED == 1 ]]; then
_p9k_get_icon prompt_vcs_$state VCS_STAGED_ICON
- (( ${POWERLEVEL9K_VCS_MAX_NUM_STAGED:-$POWERLEVEL9K_VCS_STAGED_MAX_NUM} != 1 )) && _P9K_RETVAL+=$VCS_STATUS_NUM_STAGED
- _$0_fmt STAGED " $_P9K_RETVAL"
+ (( _POWERLEVEL9K_VCS_STAGED_MAX_NUM != 1 )) && _p9k_ret+=$VCS_STATUS_NUM_STAGED
+ _$0_fmt STAGED " $_p9k_ret"
fi
if [[ $VCS_STATUS_HAS_UNSTAGED == 1 ]]; then
_p9k_get_icon prompt_vcs_$state VCS_UNSTAGED_ICON
- (( ${POWERLEVEL9K_VCS_MAX_NUM_UNSTAGED:-$POWERLEVEL9K_VCS_UNSTAGED_MAX_NUM} != 1 )) && _P9K_RETVAL+=$VCS_STATUS_NUM_UNSTAGED
- _$0_fmt UNSTAGED " $_P9K_RETVAL"
+ (( _POWERLEVEL9K_VCS_UNSTAGED_MAX_NUM != 1 )) && _p9k_ret+=$VCS_STATUS_NUM_UNSTAGED
+ _$0_fmt UNSTAGED " $_p9k_ret"
fi
if [[ $VCS_STATUS_HAS_UNTRACKED == 1 ]]; then
_p9k_get_icon prompt_vcs_$state VCS_UNTRACKED_ICON
- (( ${POWERLEVEL9K_VCS_MAX_NUM_UNTRACKED:-$POWERLEVEL9K_VCS_UNTRACKED_MAX_NUM} != 1 )) && _P9K_RETVAL+=$VCS_STATUS_NUM_UNTRACKED
- _$0_fmt UNTRACKED " $_P9K_RETVAL"
+ (( _POWERLEVEL9K_VCS_UNTRACKED_MAX_NUM != 1 )) && _p9k_ret+=$VCS_STATUS_NUM_UNTRACKED
+ _$0_fmt UNTRACKED " $_p9k_ret"
fi
fi
if [[ $VCS_STATUS_COMMITS_BEHIND -gt 0 ]]; then
_p9k_get_icon prompt_vcs_$state VCS_INCOMING_CHANGES_ICON
- (( POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM != 1 )) && _P9K_RETVAL+=$VCS_STATUS_COMMITS_BEHIND
- _$0_fmt INCOMING_CHANGES " $_P9K_RETVAL"
+ (( _POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM != 1 )) && _p9k_ret+=$VCS_STATUS_COMMITS_BEHIND
+ _$0_fmt INCOMING_CHANGES " $_p9k_ret"
fi
if [[ $VCS_STATUS_COMMITS_AHEAD -gt 0 ]]; then
_p9k_get_icon prompt_vcs_$state VCS_OUTGOING_CHANGES_ICON
- (( POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM != 1 )) && _P9K_RETVAL+=$VCS_STATUS_COMMITS_AHEAD
- _$0_fmt OUTGOING_CHANGES " $_P9K_RETVAL"
+ (( _POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM != 1 )) && _p9k_ret+=$VCS_STATUS_COMMITS_AHEAD
+ _$0_fmt OUTGOING_CHANGES " $_p9k_ret"
fi
if [[ $VCS_STATUS_STASHES -gt 0 ]]; then
_p9k_get_icon prompt_vcs_$state VCS_STASH_ICON
- _$0_fmt STASH " $_P9K_RETVAL$VCS_STATUS_STASHES"
+ _$0_fmt STASH " $_p9k_ret$VCS_STATUS_STASHES"
fi
fi
- _p9k_cache_set "prompt_vcs_$state" "$2" "${vcs_states[$state]}" "$DEFAULT_COLOR" "$icon" 0 '' "$content"
+ _p9k_cache_set "prompt_vcs_$state" "$2" "${__p9k_vcs_states[$state]}" "$_p9k_color1" "$icon" 0 '' "$content"
fi
- $1_prompt_segment "$_P9K_CACHE_VAL[@]"
+ $1_prompt_segment "$_p9k_cache_val[@]"
return 0
}
-typeset -gF _P9K_GITSTATUS_START_TIME
-
function _p9k_vcs_resume() {
emulate -L zsh && setopt no_hist_expand extended_glob
if [[ $VCS_STATUS_RESULT == ok-async ]]; then
- local latency=$((EPOCHREALTIME - _P9K_GITSTATUS_START_TIME))
- if (( latency > POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS )); then
- _P9K_GIT_SLOW[$VCS_STATUS_WORKDIR]=1
- elif (( $1 && latency < 0.8 * POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS )); then # 0.8 to avoid flip-flopping
- _P9K_GIT_SLOW[$VCS_STATUS_WORKDIR]=0
+ local latency=$((EPOCHREALTIME - _p9k_gitstatus_start_time))
+ if (( latency > _POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS )); then
+ _p9k_git_slow[$VCS_STATUS_WORKDIR]=1
+ elif (( $1 && latency < 0.8 * _POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS )); then # 0.8 to avoid flip-flopping
+ _p9k_git_slow[$VCS_STATUS_WORKDIR]=0
fi
_p9k_vcs_status_save
fi
- if [[ -z $_P9K_NEXT_VCS_DIR ]]; then
- unset _P9K_NEXT_VCS_DIR
+ if [[ -z $_p9k_next_vcs_dir ]]; then
+ unset _p9k_next_vcs_dir
case $VCS_STATUS_RESULT in
norepo-async) (( $1 )) && _p9k_vcs_status_purge ${${GIT_DIR:a}:-$PWD};;
- ok-async) (( $1 )) || _P9K_NEXT_VCS_DIR=${${GIT_DIR:a}:-$PWD};;
+ ok-async) (( $1 )) || _p9k_next_vcs_dir=${${GIT_DIR:a}:-$PWD};;
esac
fi
- if [[ -n $_P9K_NEXT_VCS_DIR ]]; then
- if ! gitstatus_query -d $_P9K_NEXT_VCS_DIR -t 0 -c '_p9k_vcs_resume 1' POWERLEVEL9K; then
- unset _P9K_NEXT_VCS_DIR
+ if [[ -n $_p9k_next_vcs_dir ]]; then
+ if ! gitstatus_query -d $_p9k_next_vcs_dir -t 0 -c '_p9k_vcs_resume 1' POWERLEVEL9K; then
+ unset _p9k_next_vcs_dir
unset VCS_STATUS_RESULT
else
case $VCS_STATUS_RESULT in
- tout) _P9K_NEXT_VCS_DIR=''; _P9K_GITSTATUS_START_TIME=$EPOCHREALTIME;;
- norepo-sync) _p9k_vcs_status_purge $_P9K_NEXT_VCS_DIR; unset _P9K_NEXT_VCS_DIR;;
- ok-sync) _p9k_vcs_status_save; unset _P9K_NEXT_VCS_DIR;;
+ tout) _p9k_next_vcs_dir=''; _p9k_gitstatus_start_time=$EPOCHREALTIME;;
+ norepo-sync) _p9k_vcs_status_purge $_p9k_next_vcs_dir; unset _p9k_next_vcs_dir;;
+ ok-sync) _p9k_vcs_status_save; unset _p9k_next_vcs_dir;;
esac
fi
fi
@@ -2452,23 +2647,23 @@ function _p9k_vcs_resume() {
}
function _p9k_vcs_gitstatus() {
- [[ $POWERLEVEL9K_DISABLE_GITSTATUS == true ]] && return 1
- if [[ $_P9K_REFRESH_REASON == precmd ]]; then
- if (( $+_P9K_NEXT_VCS_DIR )); then
- _P9K_NEXT_VCS_DIR=${${GIT_DIR:a}:-$PWD}
+ (( _POWERLEVEL9K_DISABLE_GITSTATUS )) && return 1
+ if [[ $_p9k_refresh_reason == precmd ]]; then
+ if (( $+_p9k_next_vcs_dir )); then
+ _p9k_next_vcs_dir=${${GIT_DIR:a}:-$PWD}
else
local dir=${${GIT_DIR:a}:-$PWD}
- local -F timeout=$POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS
+ local -F timeout=_POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS
if ! _p9k_vcs_status_for_dir $dir; then
gitstatus_query -d $dir -t $timeout -p -c '_p9k_vcs_resume 0' POWERLEVEL9K || return 1
case $VCS_STATUS_RESULT in
- tout) _P9K_NEXT_VCS_DIR=''; _P9K_GITSTATUS_START_TIME=$EPOCHREALTIME; return 0;;
+ tout) _p9k_next_vcs_dir=''; _p9k_gitstatus_start_time=$EPOCHREALTIME; return 0;;
norepo-sync) return 0;;
ok-sync) _p9k_vcs_status_save;;
esac
else
while true; do
- case $_P9K_GIT_SLOW[$dir] in
+ case $_p9k_git_slow[$dir] in
"") [[ $dir == / ]] && break; dir=${dir:h};;
0) break;;
1) timeout=0; break;;
@@ -2481,7 +2676,7 @@ function _p9k_vcs_gitstatus() {
return 1
fi
case $VCS_STATUS_RESULT in
- tout) _P9K_NEXT_VCS_DIR=''; _P9K_GITSTATUS_START_TIME=$EPOCHREALTIME;;
+ tout) _p9k_next_vcs_dir=''; _p9k_gitstatus_start_time=$EPOCHREALTIME;;
norepo-sync) _p9k_vcs_status_purge $dir;;
ok-sync) _p9k_vcs_status_save;;
esac
@@ -2494,7 +2689,7 @@ function _p9k_vcs_gitstatus() {
# Segment to show VCS information
prompt_vcs() {
- local -a backends=($POWERLEVEL9K_VCS_BACKENDS)
+ local -a backends=($_POWERLEVEL9K_VCS_BACKENDS)
if (( ${backends[(I)git]} )) && _p9k_vcs_gitstatus; then
_p9k_vcs_render $1 $2 && return
backends=(${backends:#git})
@@ -2519,26 +2714,22 @@ prompt_vcs() {
current_state='CLEAN'
fi
fi
- $1_prompt_segment "${0}_${(U)current_state}" "$2" "${vcs_states[$current_state]}" "$DEFAULT_COLOR" "$vcs_visual_identifier" 0 '' "$vcs_prompt"
+ $1_prompt_segment "${0}_${(U)current_state}" "$2" "${__p9k_vcs_states[$current_state]}" "$_p9k_color1" "$vcs_visual_identifier" 0 '' "$vcs_prompt"
fi
fi
}
################################################################
# Vi Mode: show editing mode (NORMAL|INSERT|VISUAL)
-#
-# VISUAL mode is shown as NORMAL unless POWERLEVEL9K_VI_VISUAL_MODE_STRING is explicitly set.
-set_default POWERLEVEL9K_VI_INSERT_MODE_STRING "INSERT"
-set_default POWERLEVEL9K_VI_COMMAND_MODE_STRING "NORMAL"
prompt_vi_mode() {
- if [[ -n $POWERLEVEL9K_VI_INSERT_MODE_STRING ]]; then
- $1_prompt_segment $0_INSERT $2 "$DEFAULT_COLOR" blue '' 0 '${${KEYMAP:-0}:#vicmd}' "$POWERLEVEL9K_VI_INSERT_MODE_STRING"
+ if [[ -n $_POWERLEVEL9K_VI_INSERT_MODE_STRING ]]; then
+ $1_prompt_segment $0_INSERT $2 "$_p9k_color1" blue '' 0 '${${KEYMAP:-0}:#vicmd}' "$_POWERLEVEL9K_VI_INSERT_MODE_STRING"
fi
- if (( $+POWERLEVEL9K_VI_VISUAL_MODE_STRING )); then
- $1_prompt_segment $0_NORMAL $2 "$DEFAULT_COLOR" white '' 0 '${(M)${:-$KEYMAP$_P9K_REGION_ACTIVE}:#vicmd0}' "$POWERLEVEL9K_VI_COMMAND_MODE_STRING"
- $1_prompt_segment $0_VISUAL $2 "$DEFAULT_COLOR" white '' 0 '${(M)${:-$KEYMAP$_P9K_REGION_ACTIVE}:#vicmd1}' "$POWERLEVEL9K_VI_VISUAL_MODE_STRING"
+ if (( $+_POWERLEVEL9K_VI_VISUAL_MODE_STRING )); then
+ $1_prompt_segment $0_NORMAL $2 "$_p9k_color1" white '' 0 '${(M)${:-$KEYMAP$_p9k_region_active}:#vicmd0}' "$_POWERLEVEL9K_VI_COMMAND_MODE_STRING"
+ $1_prompt_segment $0_VISUAL $2 "$_p9k_color1" white '' 0 '${(M)${:-$KEYMAP$_p9k_region_active}:#vicmd1}' "$_POWERLEVEL9K_VI_VISUAL_MODE_STRING"
else
- $1_prompt_segment $0_NORMAL $2 "$DEFAULT_COLOR" white '' 0 '${(M)KEYMAP:#vicmd}' "$POWERLEVEL9K_VI_COMMAND_MODE_STRING"
+ $1_prompt_segment $0_NORMAL $2 "$_p9k_color1" white '' 0 '${(M)KEYMAP:#vicmd}' "$_POWERLEVEL9K_VI_COMMAND_MODE_STRING"
fi
}
@@ -2546,34 +2737,30 @@ prompt_vi_mode() {
# Virtualenv: current working virtualenv
# More information on virtualenv (Python):
# https://virtualenv.pypa.io/en/latest/
-set_default POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION true
-set_default POWERLEVEL9K_VIRTUALENV_LEFT_DELIMITER "("
-set_default POWERLEVEL9K_VIRTUALENV_RIGHT_DELIMITER ")"
prompt_virtualenv() {
[[ -n $VIRTUAL_ENV ]] || return
local msg=''
- if [[ $POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION == true ]] && _p9k_python_version; then
- msg="$_P9K_RETVAL "
+ if (( _POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION )) && _p9k_python_version; then
+ msg="$_p9k_ret "
fi
- msg+="$POWERLEVEL9K_VIRTUALENV_LEFT_DELIMITER${${VIRTUAL_ENV:t}//\%/%%}$POWERLEVEL9K_VIRTUALENV_RIGHT_DELIMITER"
- "$1_prompt_segment" "$0" "$2" "blue" "$DEFAULT_COLOR" 'PYTHON_ICON' 0 '' "$msg"
+ msg+="$_POWERLEVEL9K_VIRTUALENV_LEFT_DELIMITER${${VIRTUAL_ENV:t}//\%/%%}$_POWERLEVEL9K_VIRTUALENV_RIGHT_DELIMITER"
+ "$1_prompt_segment" "$0" "$2" "blue" "$_p9k_color1" 'PYTHON_ICON' 0 '' "$msg"
}
function _p9k_read_pyenv_version_file() {
[[ -r $1 ]] || return
local content
read -rd $'\0' content <$1 2>/dev/null
- _P9K_RETVAL=${${(j.:.)${(@)${=content}#python-}:-system}}
+ _p9k_ret=${${(j.:.)${(@)${=content}#python-}:-system}}
}
function _p9k_pyenv_global_version() {
- _p9k_read_pyenv_version_file ${PYENV_ROOT:-$HOME/.pyenv}/version || _P9K_RETVAL=system
+ _p9k_read_pyenv_version_file ${PYENV_ROOT:-$HOME/.pyenv}/version || _p9k_ret=system
}
################################################################
# Segment to display pyenv information
# https://github.com/pyenv/pyenv#choosing-the-python-version
-set_default POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW false
prompt_pyenv() {
(( $+commands[pyenv] )) || return
local v=${(j.:.)${(@)${(s.:.)PYENV_VERSION}#python-}}
@@ -2581,25 +2768,25 @@ prompt_pyenv() {
[[ $PYENV_DIR == /* ]] && local dir=$PYENV_DIR || local dir="$PWD/$PYENV_DIR"
while true; do
if _p9k_read_pyenv_version_file $dir/.python-version; then
- v=$_P9K_RETVAL
+ v=$_p9k_ret
break
fi
if [[ $dir == / ]]; then
- [[ $POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW == true ]] || return
+ (( _POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW )) || return
_p9k_pyenv_global_version
- v=$_P9K_RETVAL
+ v=$_p9k_ret
break
fi
dir=${dir:h}
done
fi
- if [[ $POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW == false ]]; then
+ if (( !_POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW )); then
_p9k_pyenv_global_version
- [[ $v == $_P9K_RETVAL ]] && return
+ [[ $v == $_p9k_ret ]] && return
fi
- "$1_prompt_segment" "$0" "$2" "blue" "$DEFAULT_COLOR" 'PYTHON_ICON' 0 '' "${v//\%/%%}"
+ "$1_prompt_segment" "$0" "$2" "blue" "$_p9k_color1" 'PYTHON_ICON' 0 '' "${v//\%/%%}"
}
################################################################
@@ -2608,9 +2795,9 @@ prompt_openfoam() {
local wm_project_version="$WM_PROJECT_VERSION"
local wm_fork="$WM_FORK"
if [[ -n "$wm_project_version" && -z "$wm_fork" ]] ; then
- "$1_prompt_segment" "$0" "$2" "yellow" "$DEFAULT_COLOR" '' 0 '' "OF: ${${wm_project_version:t}//\%/%%}"
+ "$1_prompt_segment" "$0" "$2" "yellow" "$_p9k_color1" '' 0 '' "OF: ${${wm_project_version:t}//\%/%%}"
elif [[ -n "$wm_project_version" && -n "$wm_fork" ]] ; then
- "$1_prompt_segment" "$0" "$2" "yellow" "$DEFAULT_COLOR" '' 0 '' "F-X: ${${wm_project_version:t}//\%/%%}"
+ "$1_prompt_segment" "$0" "$2" "yellow" "$_p9k_color1" '' 0 '' "F-X: ${${wm_project_version:t}//\%/%%}"
fi
}
@@ -2618,7 +2805,7 @@ prompt_openfoam() {
# Segment to display Swift version
prompt_swift_version() {
_p9k_cached_cmd_stdout swift --version || return
- [[ $_P9K_RETVAL == (#b)[^[:digit:]]#([[:digit:].]##)* ]] || return
+ [[ $_p9k_ret == (#b)[^[:digit:]]#([[:digit:].]##)* ]] || return
"$1_prompt_segment" "$0" "$2" "magenta" "white" 'SWIFT_ICON' 0 '' "${match[1]//\%/%%}"
}
@@ -2632,35 +2819,6 @@ prompt_dir_writable() {
################################################################
# Kubernetes Current Context/Namespace
-
-# Set to false to truncate trailing "/default": "mycontext/default" will become "mycontext".
-set_default POWERLEVEL9K_KUBECONTEXT_SHOW_DEFAULT_NAMESPACE true
-
-# Defines context classes for the purpose of applying different styling to different contexts.
-#
-# POWERLEVEL9K_KUBECONTEXT_CLASSES must be an array with even number of elements. The first
-# element in each pair defines a pattern against which the current context (in the format it is
-# displayed in the prompt) gets matched. The second element defines context class. Patterns are
-# tried in order. The first match wins.
-#
-# If a non-empty class <C> is assigned to a context, the segment is styled with
-# POWERLEVEL9K_KUBECONTEXT_<U>_BACKGROUND and POWERLEVEL9K_KUBECONTEXT_<U>_FOREGROUND where <U> is
-# uppercased <C>. Otherwise with POWERLEVEL9K_KUBECONTEXT_BACKGROUND and
-# POWERLEVEL9K_KUBECONTEXT_FOREGROUND.
-#
-# Example: Use red background for contexts containing "prod", green for "testing" and yellow for
-# everything else.
-#
-# POWERLEVEL9K_KUBECONTEXT_CLASSES=(
-# '*prod*' prod
-# '*testing*' testing
-# '*' other)
-#
-# POWERLEVEL9K_KUBECONTEXT_PROD_BACKGROUND=red
-# POWERLEVEL9K_KUBECONTEXT_TESTING_BACKGROUND=green
-# POWERLEVEL9K_KUBECONTEXT_OTHER_BACKGROUND=yellow
-set_default -a POWERLEVEL9K_KUBECONTEXT_CLASSES
-
prompt_kubecontext() {
(( $+commands[kubectl] )) || return
local cfg
@@ -2672,18 +2830,18 @@ prompt_kubecontext() {
done
if ! _p9k_cache_get $0 "${key[@]}"; then
- local ctx=$(command kubectl config view -o=jsonpath='{.current-context}')
+ local ctx=$(kubectl config view -o=jsonpath='{.current-context}')
if [[ -n $ctx ]]; then
local p="{.contexts[?(@.name==\"$ctx\")].context.namespace}"
- local ns="${$(command kubectl config view -o=jsonpath=$p):-default}"
- if [[ $ctx != $ns && ($ns != default || $POWERLEVEL9K_KUBECONTEXT_SHOW_DEFAULT_NAMESPACE == true) ]]; then
+ local ns="${$(kubectl config view -o=jsonpath=$p):-default}"
+ if [[ $ctx != $ns && ($ns != default || $_POWERLEVEL9K_KUBECONTEXT_SHOW_DEFAULT_NAMESPACE == 1) ]]; then
ctx+="/$ns"
fi
fi
local suf
if [[ -n $ctx ]]; then
local pat class
- for pat class in $POWERLEVEL9K_KUBECONTEXT_CLASSES; do
+ for pat class in "${_POWERLEVEL9K_KUBECONTEXT_CLASSES[@]}"; do
if [[ $ctx == ${~pat} ]]; then
[[ -n $class ]] && suf=_${(U)class}
break
@@ -2693,8 +2851,8 @@ prompt_kubecontext() {
_p9k_cache_set "$ctx" "$suf"
fi
- [[ -n $_P9K_CACHE_VAL[1] ]] || return
- $1_prompt_segment $0$_P9K_CACHE_VAL[2] $2 magenta white KUBERNETES_ICON 0 '' "${_P9K_CACHE_VAL[1]//\%/%%}"
+ [[ -n $_p9k_cache_val[1] ]] || return
+ $1_prompt_segment $0$_p9k_cache_val[2] $2 magenta white KUBERNETES_ICON 0 '' "${_p9k_cache_val[1]//\%/%%}"
}
################################################################
@@ -2702,7 +2860,7 @@ prompt_kubecontext() {
prompt_dropbox() {
(( $+commands[dropbox-cli] )) || return
# The first column is just the directory, so cut it
- local dropbox_status="$(command dropbox-cli filestatus . | cut -d\ -f2-)"
+ local dropbox_status="$(dropbox-cli filestatus . | cut -d\ -f2-)"
# Only show if the folder is tracked and dropbox is running
if [[ "$dropbox_status" != 'unwatched' && "$dropbox_status" != "isn't running!" ]]; then
@@ -2715,122 +2873,100 @@ prompt_dropbox() {
fi
}
-# Specifies the format of java version.
-#
-# POWERLEVEL9K_JAVA_VERSION_FULL=true => 1.8.0_212-8u212-b03-0ubuntu1.18.04.1-b03
-# POWERLEVEL9K_JAVA_VERSION_FULL=false => 1.8.0_212
-#
-# These correspond to `java -fullversion` and `java -version` respectively.
-set_default POWERLEVEL9K_JAVA_VERSION_FULL true
-
# print Java version number
prompt_java_version() {
_p9k_cached_cmd_stdout_stderr java -fullversion || return
- local v=$_P9K_RETVAL
+ local v=$_p9k_ret
v=${${v#*\"}%\"*}
- [[ $POWERLEVEL9K_JAVA_VERSION_FULL == true ]] || v=${v%%-*}
+ (( _POWERLEVEL9K_JAVA_VERSION_FULL )) || v=${v%%-*}
[[ -n $v ]] || return
"$1_prompt_segment" "$0" "$2" "red" "white" "JAVA_ICON" 0 '' "${v//\%/%%}"
}
-################################################################
-# Prompt processing and drawing
-################################################################
-# Main prompt
-set_default -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS context dir vcs
-set_default -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS status root_indicator background_jobs history time
-
powerlevel9k_preexec() {
- if (( _P9K_EMULATE_ZERO_RPROMPT_INDENT )); then
- if [[ -n $_P9K_REAL_ZLE_RPROMPT_INDENT ]]; then
- ZLE_RPROMPT_INDENT=$_P9K_REAL_ZLE_RPROMPT_INDENT
+ if (( _p9k_emulate_zero_rprompt_indent )); then
+ if [[ -n $_p9k_real_zle_rprompt_indent ]]; then
+ ZLE_RPROMPT_INDENT=$_p9k_real_zle_rprompt_indent
else
unset ZLE_RPROMPT_INDENT
fi
fi
- typeset -gF _P9K_TIMER_START=EPOCHREALTIME
+ __p9k_timer_start=EPOCHREALTIME
}
-typeset -g _P9K_PROMPT
-typeset -g _P9K_RPROMPT
-
-typeset -g _P9K_PROMPT_SIDE _P9K_SEGMENT_NAME
-typeset -gi _P9K_SEGMENT_INDEX
-
function _p9k_build_segment() {
- _P9K_SEGMENT_NAME=${_P9K_SEGMENT_NAME%_joined}
- if [[ $_P9K_SEGMENT_NAME == custom_* ]]; then
- prompt_custom $_P9K_PROMPT_SIDE $_P9K_SEGMENT_INDEX $_P9K_SEGMENT_NAME[8,-1]
- elif (( $+functions[prompt_$_P9K_SEGMENT_NAME] )); then
- prompt_$_P9K_SEGMENT_NAME $_P9K_PROMPT_SIDE $_P9K_SEGMENT_INDEX
+ _p9k_segment_name=${_p9k_segment_name%_joined}
+ if [[ $_p9k_segment_name == custom_* ]]; then
+ prompt_custom $_p9k_prompt_side $_p9k_segment_index $_p9k_segment_name[8,-1]
+ elif (( $+functions[prompt_$_p9k_segment_name] )); then
+ prompt_$_p9k_segment_name $_p9k_prompt_side $_p9k_segment_index
fi
- ((++_P9K_SEGMENT_INDEX))
+ ((++_p9k_segment_index))
}
-set_default POWERLEVEL9K_DISABLE_RPROMPT false
function _p9k_set_prompt() {
- unset _P9K_LINE_FINISH
- unset _P9K_RPROMPT_OVERRIDE
- PROMPT=$_P9K_PROMPT_PREFIX_LEFT
+ unset _p9k_line_finish
+ unset _p9k_rprompt_override
+ PROMPT=$_p9k_prompt_prefix_left
RPROMPT=
- local -i left_idx=1 right_idx=1 num_lines=$#_P9K_LINE_SEGMENTS_LEFT i
+ local -i left_idx=1 right_idx=1 num_lines=$#_p9k_line_segments_left i
for i in {1..$num_lines}; do
local right=
- if [[ $POWERLEVEL9K_DISABLE_RPROMPT == false ]]; then
- _P9K_DIR=
- _P9K_PROMPT=
- _P9K_SEGMENT_INDEX=right_idx
- _P9K_PROMPT_SIDE=right
- for _P9K_SEGMENT_NAME in ${(@0)_P9K_LINE_SEGMENTS_RIGHT[i]}; do
+ if (( !_POWERLEVEL9K_DISABLE_RPROMPT )); then
+ _p9k_dir=
+ _p9k_prompt=
+ _p9k_segment_index=right_idx
+ _p9k_prompt_side=right
+ for _p9k_segment_name in ${(@0)_p9k_line_segments_right[i]}; do
_p9k_build_segment
done
- right_idx=_P9K_SEGMENT_INDEX
- if [[ -n $_P9K_PROMPT || $_P9K_LINE_NEVER_EMPTY_RIGHT[i] == 1 ]]; then
- right=$_P9K_LINE_PREFIX_RIGHT[i]$_P9K_PROMPT$_P9K_LINE_SUFFIX_RIGHT[i]
+ right_idx=_p9k_segment_index
+ if [[ -n $_p9k_prompt || $_p9k_line_never_empty_right[i] == 1 ]]; then
+ right=$_p9k_line_prefix_right[i]$_p9k_prompt$_p9k_line_suffix_right[i]
fi
fi
- unset _P9K_DIR
- _P9K_PROMPT=$_P9K_LINE_PREFIX_LEFT[i]
- _P9K_SEGMENT_INDEX=left_idx
- _P9K_PROMPT_SIDE=left
- for _P9K_SEGMENT_NAME in ${(@0)_P9K_LINE_SEGMENTS_LEFT[i]}; do
+ unset _p9k_dir
+ _p9k_prompt=$_p9k_line_prefix_left[i]
+ _p9k_segment_index=left_idx
+ _p9k_prompt_side=left
+ for _p9k_segment_name in ${(@0)_p9k_line_segments_left[i]}; do
_p9k_build_segment
done
- left_idx=_P9K_SEGMENT_INDEX
- _P9K_PROMPT+=$_P9K_LINE_SUFFIX_LEFT[i]
- if (( $+_P9K_DIR || (i != num_lines && $#right) )); then
- PROMPT+='${${:-${_P9K_D::=0}${_P9K_RPROMPT::=${_P9K_RPROMPT_OVERRIDE-'$right'}}${_P9K_LPROMPT::='$_P9K_PROMPT'}}+}'
- PROMPT+=$_P9K_GAP_PRE
- if (( $+_P9K_DIR )); then
- if (( i == num_lines && (POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS > 0 || POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT > 0) )); then
- local a=$POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS
- local f=$((0.01*POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT))'*_P9K_CLM'
- PROMPT+="\${\${_P9K_G::=$((($a<$f)*$f+($a>=$f)*$a))}+}"
+ left_idx=_p9k_segment_index
+ _p9k_prompt+=$_p9k_line_suffix_left[i]
+ if (( $+_p9k_dir || (i != num_lines && $#right) )); then
+ PROMPT+='${${:-${_p9k_d::=0}${_p9k_rprompt::=${_p9k_rprompt_override-'$right'}}${_p9k_lprompt::='$_p9k_prompt'}}+}'
+ PROMPT+=$_p9k_gap_pre
+ if (( $+_p9k_dir )); then
+ if (( i == num_lines && (_POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS > 0 || _POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT > 0) )); then
+ local a=$_POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS
+ local f=$((0.01*_POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT))'*_p9k_clm'
+ PROMPT+="\${\${_p9k_g::=$((($a<$f)*$f+($a>=$f)*$a))}+}"
else
- PROMPT+='${${_P9K_G::=0}+}'
+ PROMPT+='${${_p9k_g::=0}+}'
fi
- if [[ $POWERLEVEL9K_DIR_MAX_LENGTH == <->('%'|) ]]; then
+ if [[ $_POWERLEVEL9K_DIR_MAX_LENGTH == <->('%'|) ]]; then
local lim
- if [[ $POWERLEVEL9K_DIR_MAX_LENGTH[-1] == '%' ]]; then
- lim="$_P9K_DIR_LEN-$((0.01*$POWERLEVEL9K_DIR_MAX_LENGTH[1,-2]))*_P9K_CLM"
+ if [[ $_POWERLEVEL9K_DIR_MAX_LENGTH[-1] == '%' ]]; then
+ lim="$_p9k_dir_len-$((0.01*$_POWERLEVEL9K_DIR_MAX_LENGTH[1,-2]))*_p9k_clm"
else
- lim=$((_P9K_DIR_LEN-POWERLEVEL9K_DIR_MAX_LENGTH))
+ lim=$((_p9k_dir_len-_POWERLEVEL9K_DIR_MAX_LENGTH))
((lim <= 0)) && lim=
fi
if [[ -n $lim ]]; then
- PROMPT+='${${${$((_P9K_G<_P9K_M+'$lim')):#1}:-${_P9K_G::=$((_P9K_M+'$lim'))}}+}'
+ PROMPT+='${${${$((_p9k_g<_p9k_m+'$lim')):#1}:-${_p9k_g::=$((_p9k_m+'$lim'))}}+}'
fi
fi
- PROMPT+='${${_P9K_D::=$((_P9K_M-_P9K_G))}+}'
- PROMPT+='${_P9K_LPROMPT/\%\{d\%\}*\%\{d\%\}/'$_P9K_DIR'}'
- PROMPT+='${${_P9K_M::=$((_P9K_D+_P9K_G))}+}'
+ PROMPT+='${${_p9k_d::=$((_p9k_m-_p9k_g))}+}'
+ PROMPT+='${_p9k_lprompt/\%\{d\%\}*\%\{d\%\}/'$_p9k_dir'}'
+ PROMPT+='${${_p9k_m::=$((_p9k_d+_p9k_g))}+}'
else
- PROMPT+='${_P9K_LPROMPT}'
+ PROMPT+='${_p9k_lprompt}'
fi
- ((i != num_lines && $#right)) && PROMPT+=$_P9K_LINE_GAP_POST[i]
+ ((i != num_lines && $#right)) && PROMPT+=$_p9k_line_gap_post[i]
else
- PROMPT+=$_P9K_PROMPT
+ PROMPT+=$_p9k_prompt
fi
if (( i == num_lines )); then
RPROMPT=$right
@@ -2842,194 +2978,188 @@ function _p9k_set_prompt() {
PROMPT=${${PROMPT//$' %{\b'/'%{%G'}//$' \b'}
RPROMPT=${${RPROMPT//$' %{\b'/'%{%G'}//$' \b'}
- PROMPT+=$_P9K_PROMPT_SUFFIX_LEFT
- [[ -n $RPROMPT ]] && RPROMPT=$_P9K_PROMPT_PREFIX_RIGHT$RPROMPT$_P9K_PROMPT_SUFFIX_RIGHT
+ PROMPT+=$_p9k_prompt_suffix_left
+ [[ -n $RPROMPT ]] && RPROMPT=$_p9k_prompt_prefix_right$RPROMPT$_p9k_prompt_suffix_right
- _P9K_REAL_ZLE_RPROMPT_INDENT=
+ _p9k_real_zle_rprompt_indent=
+ (( $#_p9k_cache < _POWERLEVEL9K_MAX_CACHE_SIZE )) || _p9k_cache=()
}
-typeset -g _P9K_REFRESH_REASON
-
function _p9k_update_prompt() {
- (( _P9K_ENABLED )) || return
- _P9K_REFRESH_REASON=$1
+ _p9k_refresh_reason=$1
_p9k_set_prompt
- _P9K_REFRESH_REASON=''
+ _p9k_refresh_reason=''
zle && zle .reset-prompt && zle -R
}
-typeset -gi _P9K_REGION_ACTIVE
-
-set_default POWERLEVEL9K_PROMPT_ADD_NEWLINE false
-set_default POWERLEVEL9K_SHOW_RULER false
-
powerlevel9k_refresh_prompt_inplace() {
emulate -L zsh && setopt no_hist_expand extended_glob
- _p9k_init
- _P9K_REFRESH_REASON=precmd
+ (( __p9k_enabled )) || return
+ _p9k_refresh_reason=precmd
_p9k_set_prompt
- _P9K_REFRESH_REASON=''
+ _p9k_refresh_reason=''
}
powerlevel9k_prepare_prompts() {
- _P9K_EXIT_CODE=$?
- _P9K_PIPE_EXIT_CODES=( "$pipestatus[@]" )
- if (( $+_P9K_TIMER_START )); then
- P9K_COMMAND_DURATION_SECONDS=$((EPOCHREALTIME - _P9K_TIMER_START))
- unset _P9K_TIMER_START
- else
- unset P9K_COMMAND_DURATION_SECONDS
- fi
- _P9K_REGION_ACTIVE=0
+ __p9k_exit_code=$?
+ __p9k_pipe_exit_codes=( $pipestatus )
+ __p9k_timer_end=EPOCHREALTIME
+
+ _p9k_must_init && _p9k_init
unsetopt localoptions
prompt_opts=(cr percent sp subst)
setopt nopromptbang prompt{cr,percent,sp,subst}
powerlevel9k_refresh_prompt_inplace
+
+ __p9k_timer_start=0
+ _p9k_region_active=0
}
function _p9k_zle_keymap_select() {
zle && zle .reset-prompt && zle -R
}
-set_default POWERLEVEL9K_IGNORE_TERM_COLORS false
-set_default POWERLEVEL9K_IGNORE_TERM_LANG false
-set_default POWERLEVEL9K_DISABLE_GITSTATUS false
-set_default -i POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY -1
-set_default -i POWERLEVEL9K_VCS_STAGED_MAX_NUM 1
-set_default -i POWERLEVEL9K_VCS_UNSTAGED_MAX_NUM 1
-set_default -i POWERLEVEL9K_VCS_UNTRACKED_MAX_NUM 1
-set_default -i POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM -1
-set_default -i POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM -1
-
-typeset -g _P9K_REAL_ZLE_RPROMPT_INDENT
-typeset -gi _P9K_INITIALIZED=0
+_p9k_deinit_async_pump() {
+ if (( _p9k_async_pump_lock_fd )); then
+ zsystem flock -u $_p9k_async_pump_lock_fd
+ _p9k_async_pump_lock_fd=0
+ fi
+ if (( _p9k_async_pump_fd )); then
+ zle -F $_p9k_async_pump_fd
+ exec {_p9k_async_pump_fd}>&-
+ _p9k_async_pump_fd=0
+ fi
+ if (( _p9k_async_pump_pid )); then
+ kill -- -$_p9k_async_pump_pid &>/dev/null
+ _p9k_async_pump_pid=0
+ fi
+ if [[ -n $_p9k_async_pump_fifo ]]; then
+ rm -f $_p9k_async_pump_fifo
+ _p9k_async_pump_fifo=''
+ fi
+ if [[ -n $_p9k_async_pump_lock ]]; then
+ rm -f $_p9k_async_pump_lock
+ _p9k_async_pump_lock=''
+ fi
+ add-zsh-hook -D zshexit _p9k_kill_async_pump
+}
-typeset -g OS
-typeset -g OS_ICON
-typeset -g SED_EXTENDED_REGEX_PARAMETER
+function _p9k_on_async_message() {
+ emulate -L zsh && setopt no_hist_expand extended_glob
+ (( ARGC == 1 )) || return
+ local msg='' IFS=''
+ while read -r -t -u $1 msg; do
+ [[ $__p9k_enabled == 1 && $1 == $_p9k_async_pump_fd ]] && eval $_p9k_async_pump_line$msg
+ _p9k_async_pump_line=
+ msg=
+ done
+ _p9k_async_pump_line+=$msg
+ [[ $__p9k_enabled == 1 && $1 == $_p9k_async_pump_fd ]] && zle && zle .reset-prompt && zle -R
+}
+
+function _p9k_async_pump() {
+ emulate -L zsh || return
+ setopt noaliases no_hist_expand extended_glob || return
+ zmodload zsh/system zsh/datetime || return
+ echo ok || return
+
+ local ip last_ip
+ local -F next_ip_time
+ while ! zsystem flock -t 0 $lock 2>/dev/null && kill -0 $parent_pid; do
+ if (( time_realtime )); then
+ echo || break
+ # SIGWINCH is a workaround for a bug in zsh. After a background job completes, callbacks
+ # registered with `zle -F` stop firing until the user presses any key or the process
+ # receives a signal (any signal at all).
+ # Fix: https://github.com/zsh-users/zsh/commit/5e11082349bf72897f93f3a4493a97a2caf15984.
+ kill -WINCH $parent_pid
+ fi
+ if (( public_ip && EPOCHREALTIME >= next_ip_time )); then
+ ip=
+ local method=''
+ local -F start=EPOCHREALTIME
+ next_ip_time=$((start + 5))
+ for method in $ip_methods $ip_methods; do
+ case $method in
+ dig)
+ if (( $+commands[dig] )); then
+ ip=$(dig +tries=1 +short -4 A myip.opendns.com @resolver1.opendns.com 2>/dev/null)
+ [[ $ip == ';'* ]] && ip=
+ if [[ -z $ip ]]; then
+ ip=$(dig +tries=1 +short -6 AAAA myip.opendns.com @resolver1.opendns.com 2>/dev/null)
+ [[ $ip == ';'* ]] && ip=
+ fi
+ fi
+ ;;
+ curl)
+ if (( $+commands[curl] )); then
+ ip=$(curl --max-time 5 -w '\n' "$ip_url" 2>/dev/null)
+ fi
+ ;;
+ wget)
+ if (( $+commands[wget] )); then
+ ip=$(wget -T 5 -qO- "$ip_url" 2>/dev/null)
+ fi
+ ;;
+ esac
+ [[ $ip =~ '^[0-9a-f.:]+$' ]] || ip=''
+ if [[ -n $ip ]]; then
+ next_ip_time=$((start + tout))
+ break
+ fi
+ done
+ if [[ $ip != $last_ip ]]; then
+ last_ip=$ip
+ echo _p9k_public_ip=${(q)${${ip//\%/%%}//$'\n'}} || break
+ kill -WINCH $parent_pid
+ fi
+ fi
+ sleep 1
+ done
+ rm -f $lock $fifo
+}
-typeset -g _P9K_ASYNC_PUMP_LINE
-typeset -g _P9K_ASYNC_PUMP_FIFO
-typeset -g _P9K_ASYNC_PUMP_LOCK
-typeset -gi _P9K_ASYNC_PUMP_FD=0
-typeset -gi _P9K_ASYNC_PUMP_PID=0
-typeset -gi _P9K_ASYNC_PUMP_SUBSHELL=0
+function _p9k_kill_async_pump() {
+ emulate -L zsh && setopt no_hist_expand extended_glob
+ if (( ZSH_SUBSHELL == _p9k_async_pump_subshell )); then
+ _p9k_deinit_async_pump
+ fi
+}
_p9k_init_async_pump() {
local -i public_ip time_realtime
segment_in_use public_ip && public_ip=1
- segment_in_use time && [[ $POWERLEVEL9K_EXPERIMENTAL_TIME_REALTIME == true ]] && time_realtime=1
+ segment_in_use time && (( _POWERLEVEL9K_EXPERIMENTAL_TIME_REALTIME )) && time_realtime=1
(( public_ip || time_realtime )) || return
_p9k_start_async_pump() {
setopt err_return no_bg_nice
- _P9K_ASYNC_PUMP_LOCK=$(mktemp ${TMPDIR:-/tmp}/p9k-$$-async-pump-lock.XXXXXXXXXX)
- _P9K_ASYNC_PUMP_FIFO=$(mktemp -u ${TMPDIR:-/tmp}/p9k-$$-async-pump-fifo.XXXXXXXXXX)
- mkfifo $_P9K_ASYNC_PUMP_FIFO
- sysopen -rw -o cloexec,sync -u _P9K_ASYNC_PUMP_FD $_P9K_ASYNC_PUMP_FIFO
- zsystem flock $_P9K_ASYNC_PUMP_LOCK
-
- function _p9k_on_async_message() {
- emulate -L zsh && setopt no_hist_expand extended_glob
- local msg=''
- while IFS='' read -r -t -u $_P9K_ASYNC_PUMP_FD msg; do
- eval $_P9K_ASYNC_PUMP_LINE$msg
- _P9K_ASYNC_PUMP_LINE=
- msg=
- done
- _P9K_ASYNC_PUMP_LINE+=$msg
- zle && zle .reset-prompt && zle -R
- }
-
- zle -F $_P9K_ASYNC_PUMP_FD _p9k_on_async_message
-
- function _p9k_async_pump() {
- emulate -L zsh && setopt no_hist_expand extended_glob && zmodload zsh/system zsh/datetime && echo ok || return
-
- local ip last_ip
- local -F next_ip_time
- while ! zsystem flock -t 0 $lock 2>/dev/null && kill -0 $parent_pid; do
- if (( time_realtime )); then
- echo || break
- # SIGWINCH is a workaround for a bug in zsh. After a background job completes, callbacks
- # registered with `zle -F` stop firing until the user presses any key or the process
- # receives a signal (any signal at all).
- # Fix: https://github.com/zsh-users/zsh/commit/5e11082349bf72897f93f3a4493a97a2caf15984.
- kill -WINCH $parent_pid
- fi
- if (( public_ip && EPOCHREALTIME >= next_ip_time )); then
- ip=
- local method=''
- local -F start=EPOCHREALTIME
- next_ip_time=$((start + 5))
- for method in $ip_methods $ip_methods; do
- case $method in
- dig)
- if (( $+commands[dig] )); then
- ip=$(command dig +tries=1 +short -4 A myip.opendns.com @resolver1.opendns.com 2>/dev/null)
- [[ $ip == ';'* ]] && ip=
- if [[ -z $ip ]]; then
- ip=$(command dig +tries=1 +short -6 AAAA myip.opendns.com @resolver1.opendns.com 2>/dev/null)
- [[ $ip == ';'* ]] && ip=
- fi
- fi
- ;;
- curl)
- if (( $+commands[curl] )); then
- ip=$(command curl --max-time 5 -w '\n' "$ip_url" 2>/dev/null)
- fi
- ;;
- wget)
- if (( $+commands[wget] )); then
- ip=$(wget -T 5 -qO- "$ip_url" 2>/dev/null)
- fi
- ;;
- esac
- [[ $ip =~ '^[0-9a-f.:]+$' ]] || ip=''
- if [[ -n $ip ]]; then
- next_ip_time=$((start + tout))
- break
- fi
- done
- if [[ $ip != $last_ip ]]; then
- last_ip=$ip
- echo _P9K_PUBLIC_IP=${(q)${${ip//\%/%%}//$'\n'}} || break
- kill -WINCH $parent_pid
- fi
- fi
- sleep 1
- done
- command rm -f $lock $fifo
- }
+ _p9k_async_pump_lock=$(mktemp ${TMPDIR:-/tmp}/p9k-$$-async-pump-lock.XXXXXXXXXX)
+ _p9k_async_pump_fifo=$(mktemp -u ${TMPDIR:-/tmp}/p9k-$$-async-pump-fifo.XXXXXXXXXX)
+ mkfifo $_p9k_async_pump_fifo
+ sysopen -rw -o cloexec,sync -u _p9k_async_pump_fd $_p9k_async_pump_fifo
+ zle -F $_p9k_async_pump_fd _p9k_on_async_message
+ zsystem flock -f _p9k_async_pump_lock_fd $_p9k_async_pump_lock
zsh -dfc "
local -i public_ip=$public_ip time_realtime=$time_realtime parent_pid=$$
- local -a ip_methods=($POWERLEVEL9K_PUBLIC_IP_METHODS)
- local -F tout=$POWERLEVEL9K_PUBLIC_IP_TIMEOUT
- local ip_url=$POWERLEVEL9K_PUBLIC_IP_HOST
- local lock=$_P9K_ASYNC_PUMP_LOCK
- local fifo=$_P9K_ASYNC_PUMP_FIFO
+ local -a ip_methods=($_POWERLEVEL9K_PUBLIC_IP_METHODS)
+ local -F tout=$_POWERLEVEL9K_PUBLIC_IP_TIMEOUT
+ local ip_url=$_POWERLEVEL9K_PUBLIC_IP_HOST
+ local lock=$_p9k_async_pump_lock
+ local fifo=$_p9k_async_pump_fifo
$functions[_p9k_async_pump]
- " </dev/null >&$_P9K_ASYNC_PUMP_FD 2>/dev/null &!
-
- _P9K_ASYNC_PUMP_PID=$!
- _P9K_ASYNC_PUMP_SUBSHELL=$ZSH_SUBSHELL
+ " </dev/null >&$_p9k_async_pump_fd 2>/dev/null &!
- unfunction _p9k_async_pump
+ _p9k_async_pump_pid=$!
+ _p9k_async_pump_subshell=$ZSH_SUBSHELL
local resp
- read -r -u $_P9K_ASYNC_PUMP_FD resp && [[ $resp == ok ]]
+ read -r -u $_p9k_async_pump_fd resp && [[ $resp == ok ]]
- function _p9k_kill_async_pump() {
- emulate -L zsh && setopt no_hist_expand extended_glob
- if (( ZSH_SUBSHELL == _P9K_ASYNC_PUMP_SUBSHELL )); then
- (( _P9K_ASYNC_PUMP_PID )) && kill -- -$_P9K_ASYNC_PUMP_PID &>/dev/null
- command rm -f "$_P9K_ASYNC_PUMP_FIFO" "$_P9K_ASYNC_PUMP_LOCK"
- fi
- }
add-zsh-hook zshexit _p9k_kill_async_pump
}
@@ -3037,18 +3167,7 @@ _p9k_init_async_pump() {
>&2 print -P "%F{red}[ERROR]%f Powerlevel10k failed to start async worker. The following segments may malfunction: "
(( public_ip )) && >&2 print -P " - %F{green}public_ip%f"
(( time_realtime )) && >&2 print -P " - %F{green}time%f"
- if (( _P9K_ASYNC_PUMP_FD )); then
- zle -F $_P9K_ASYNC_PUMP_FD
- exec {_P9K_ASYNC_PUMP_FD}>&-
- _P9K_ASYNC_PUMP_FD=0
- fi
- if (( _P9K_ASYNC_PUMP_PID )); then
- kill -- -$_P9K_ASYNC_PUMP_PID &>/dev/null
- _P9K_ASYNC_PUMP_PID=0
- fi
- command rm -f $_P9K_ASYNC_PUMP_FIFO
- _P9K_ASYNC_PUMP_FIFO=''
- unset -f _p9k_on_async_message
+ _p9k_deinit_async_pump
fi
}
@@ -3068,34 +3187,294 @@ function _p9k_prompt_overflow_bug() {
is-at-least 5.5 && ! is-at-least 5.7.2
}
-# Some people write POWERLEVEL9K_DIR_PATH_SEPARATOR='\uNNNN' instead of
-# POWERLEVEL9K_DIR_PATH_SEPARATOR=$'\uNNNN'. There is no good reason for it and if we were
-# starting from scratch we wouldn't perform automatic conversion from the former to the latter.
-# But we aren't starting from scratch, so convert we do.
-_p9k_init_strings() {
- # To find candidates:
+_p9k_init_vars() {
+ typeset -g _p9k_param_sig
+ typeset -g _p9k_ret
+ typeset -g _p9k_cache_key
+ typeset -ga _p9k_cache_val
+ typeset -gA _p9k_cache
+ typeset -ga _p9k_t
+ typeset -g _p9k_n
+ typeset -gi _p9k_i
+ typeset -g _p9k_bg
+ typeset -ga _p9k_left_join
+ typeset -ga _p9k_right_join
+ typeset -g _p9k_public_ip
+ typeset -g _p9k_todo_file
+ # git workdir => the last prompt we've shown for it
+ typeset -gA _p9k_last_git_prompt
+ # git workdir => 1 if gitstatus is slow on it, 0 if it's fast.
+ typeset -gA _p9k_git_slow
+ typeset -gF _p9k_gitstatus_start_time
+ typeset -g _p9k_prompt
+ typeset -g _p9k_rprompt
+ typeset -g _p9k_lprompt
+ typeset -g _p9k_prompt_side
+ typeset -g _p9k_segment_name
+ typeset -gi _p9k_segment_index
+ typeset -g _p9k_refresh_reason
+ typeset -gi _p9k_region_active
+ typeset -g _p9k_real_zle_rprompt_indent
+ typeset -g _p9k_async_pump_line
+ typeset -g _p9k_async_pump_fifo
+ typeset -g _p9k_async_pump_lock
+ typeset -gi _p9k_async_pump_lock_fd
+ typeset -gi _p9k_async_pump_fd
+ typeset -gi _p9k_async_pump_pid
+ typeset -gi _p9k_async_pump_subshell
+ typeset -ga _p9k_line_segments_left
+ typeset -ga _p9k_line_segments_right
+ typeset -ga _p9k_line_prefix_left
+ typeset -ga _p9k_line_prefix_right
+ typeset -ga _p9k_line_suffix_left
+ typeset -ga _p9k_line_suffix_right
+ typeset -ga _p9k_line_never_empty_right
+ typeset -ga _p9k_line_gap_post
+ typeset -g _p9k_xy
+ typeset -g _p9k_clm
+ typeset -g _p9k_p
+ typeset -gi _p9k_x
+ typeset -gi _p9k_y
+ typeset -gi _p9k_m
+ typeset -gi _p9k_d
+ typeset -gi _p9k_g
+ typeset -gi _p9k_ind
+ typeset -g _p9k_gap_pre
+ typeset -g _p9k_prompt_prefix_left
+ typeset -g _p9k_prompt_prefix_right
+ typeset -g _p9k_prompt_suffix_left
+ typeset -g _p9k_prompt_suffix_right
+ typeset -gi _p9k_emulate_zero_rprompt_indent
+ typeset -gA _p9k_battery_states
+ typeset -g _p9k_os
+ typeset -g _p9k_os_icon
+ typeset -g _p9k_color1
+ typeset -g _p9k_color2
+ typeset -g _p9k_s
+ typeset -g _p9k_ss
+ typeset -g _p9k_sss
+ typeset -g _p9k_v
+ typeset -g _p9k_c
+ typeset -g _p9k_e
+ typeset -g _p9k_w
+ typeset -gi _p9k_dir_len
+ typeset -gi _p9k_num_cpus
+
+ typeset -gF P9K_COMMAND_DURATION_SECONDS
+ typeset -g P9K_VISUAL_IDENTIFIER
+ typeset -g P9K_CONTENT
+ typeset -g P9K_GAP
+}
+
+_p9k_init_params() {
+ _p9k_declare -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS -- context dir vcs
+ _p9k_declare -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS -- status root_indicator background_jobs history time
+ _p9k_declare -b POWERLEVEL9K_DISABLE_RPROMPT 0
+ _p9k_declare -b POWERLEVEL9K_PROMPT_ADD_NEWLINE 0
+ _p9k_declare -b POWERLEVEL9K_PROMPT_ON_NEWLINE 0
+ _p9k_declare -b POWERLEVEL9K_RPROMPT_ON_NEWLINE 0
+ _p9k_declare -b POWERLEVEL9K_SHOW_RULER 0
+ _p9k_declare -i POWERLEVEL9K_PROMPT_ADD_NEWLINE_COUNT 1
+ _p9k_declare -s POWERLEVEL9K_COLOR_SCHEME dark
+ _p9k_declare -s POWERLEVEL9K_GITSTATUS_DIR ""
+ _p9k_declare -b POWERLEVEL9K_VCS_SHOW_SUBMODULE_DIRTY 0
+ _p9k_declare -i POWERLEVEL9K_VCS_SHORTEN_LENGTH
+ _p9k_declare -i POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH
+ _p9k_declare -s POWERLEVEL9K_VCS_SHORTEN_STRATEGY
+ _p9k_declare -s POWERLEVEL9K_VCS_SHORTEN_DELIMITER
+ _p9k_declare -b POWERLEVEL9K_HIDE_BRANCH_ICON 0
+ _p9k_declare -b POWERLEVEL9K_VCS_HIDE_TAGS 0
+ _p9k_declare -i POWERLEVEL9K_CHANGESET_HASH_LENGTH 8
+ # Specifies the maximum number of elements in the cache. When the cache grows over this limit,
+ # it gets cleared. This is meant to avoid memory leaks when a rogue prompt is filling the cache
+ # with data.
+ _p9k_declare -i POWERLEVEL9K_MAX_CACHE_SIZE 10000
+ _p9k_declare -e POWERLEVEL9K_ANACONDA_LEFT_DELIMITER "("
+ _p9k_declare -e POWERLEVEL9K_ANACONDA_RIGHT_DELIMITER ")"
+ _p9k_declare -b POWERLEVEL9K_ANACONDA_SHOW_PYTHON_VERSION 1
+ _p9k_declare -b POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE 1
+ _p9k_declare -b POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE_ALWAYS 0
+ _p9k_declare -b POWERLEVEL9K_DISK_USAGE_ONLY_WARNING 0
+ _p9k_declare -i POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL 90
+ _p9k_declare -i POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL 95
+ _p9k_declare -i POWERLEVEL9K_BATTERY_LOW_THRESHOLD 10
+ _p9k_declare -i POWERLEVEL9K_BATTERY_HIDE_ABOVE_THRESHOLD 999
+ _p9k_declare -a POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND --
+ _p9k_declare -b POWERLEVEL9K_BATTERY_VERBOSE 1
+ if [[ $parameters[POWERLEVEL9K_BATTERY_STAGES] == scalar ]]; then
+ _p9k_declare -e POWERLEVEL9K_BATTERY_STAGES
+ else
+ _p9k_declare -a POWERLEVEL9K_BATTERY_STAGES --
+ _POWERLEVEL9K_BATTERY_STAGES=("${(@g::)_POWERLEVEL9K_BATTERY_STAGES}")
+ fi
+ _p9k_declare -F POWERLEVEL9K_PUBLIC_IP_TIMEOUT 300
+ _p9k_declare -a POWERLEVEL9K_PUBLIC_IP_METHODS -- dig curl wget
+ _p9k_declare -e POWERLEVEL9K_PUBLIC_IP_NONE ""
+ _p9k_declare -s POWERLEVEL9K_PUBLIC_IP_HOST "http://ident.me"
+ _p9k_declare -s POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE ""
+ _p9k_declare -b POWERLEVEL9K_ALWAYS_SHOW_CONTEXT 0
+ _p9k_declare -b POWERLEVEL9K_ALWAYS_SHOW_USER 0
+ _p9k_declare -e POWERLEVEL9K_CONTEXT_TEMPLATE "%n@%m"
+ _p9k_declare -e POWERLEVEL9K_USER_TEMPLATE "%n"
+ _p9k_declare -e POWERLEVEL9K_HOST_TEMPLATE "%m"
+ _p9k_declare -F POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD 3
+ _p9k_declare -i POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION 2
+ # Other options: "d h m s".
+ _p9k_declare -s POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT "H:M:S"
+ _p9k_declare -e POWERLEVEL9K_DIR_PATH_SEPARATOR "/"
+ _p9k_declare -e POWERLEVEL9K_HOME_FOLDER_ABBREVIATION "~"
+ _p9k_declare -b POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD 0
+ _p9k_declare -b POWERLEVEL9K_DIR_ANCHORS_BOLD 0
+ _p9k_declare -b POWERLEVEL9K_DIR_PATH_ABSOLUTE 0
+ _p9k_declare -b POWERLEVEL9K_DIR_SHOW_WRITABLE 0
+ _p9k_declare -b POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER 0
+ _p9k_declare -b POWERLEVEL9K_DIR_HYPERLINK 0
+ _p9k_declare -s POWERLEVEL9K_SHORTEN_STRATEGY ""
+ _p9k_declare -s POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND
+ _p9k_declare -s POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND
+ _p9k_declare -s POWERLEVEL9K_DIR_ANCHOR_FOREGROUND
+ _p9k_declare -s POWERLEVEL9K_DIR_SHORTENED_FOREGROUND
+ _p9k_declare -s POWERLEVEL9K_SHORTEN_FOLDER_MARKER "(.shorten_folder_marker|.bzr|CVS|.git|.hg|.svn|.terraform|.citc)"
+ # Shorten directory if it's longer than this even if there is space for it.
+ # The value can be either absolute (e.g., '80') or a percentage of terminal
+ # width (e.g, '50%'). If empty, directory will be shortened only when prompt
+ # doesn't fit. Applies only when POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique.
+ _p9k_declare -s POWERLEVEL9K_DIR_MAX_LENGTH 0
+ # Individual elements are patterns. They are expanded with the options set
+ # by `emulate zsh && setopt extended_glob`.
+ _p9k_declare -a POWERLEVEL9K_DIR_PACKAGE_FILES -- package.json composer.json
+ # When dir is on the last prompt line, try to shorten it enough to leave at least this many
+ # columns for typing commands. Applies only when POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique.
+ _p9k_declare -i POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS 40
+ # When dir is on the last prompt line, try to shorten it enough to leave at least
+ # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. Applies
+ # only when POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique.
+ _p9k_declare -F POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT 50
+ # POWERLEVEL9K_DIR_CLASSES allow you to specify custom styling and icons for different
+ # directories.
+ #
+ # POWERLEVEL9K_DIR_CLASSES must be an array with 3 * N elements. Each triplet consists of:
+ #
+ # 1. A pattern against which the current directory is matched. Matching is done with
+ # extended_glob option enabled.
+ # 2. Directory class for the purpose of styling.
+ # 3. Icon.
+ #
+ # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. If there are no
+ # matches, there will be no icon and the styling is done according to POWERLEVEL9K_DIR_BACKGROUND,
+ # POWERLEVEL9K_DIR_FOREGROUND, etc.
+ #
+ # Example:
+ #
+ # POWERLEVEL9K_DIR_CLASSES=(
+ # '~/work(/*)#' WORK '(╯°□°)╯︵ ┻━┻'
+ # '~(/*)#' HOME '⌂'
+ # '*' DEFAULT '')
+ #
+ # POWERLEVEL9K_DIR_WORK_BACKGROUND=red
+ # POWERLEVEL9K_DIR_HOME_BACKGROUND=blue
+ # POWERLEVEL9K_DIR_DEFAULT_BACKGROUND=yellow
+ #
+ # With these settings, the current directory in the prompt may look like this:
#
- # egrep 'set_default [^-]' powerlevel9k.zsh-theme | egrep -v '(true|false)$'
- _p9k_g_expand POWERLEVEL9K_ANACONDA_LEFT_DELIMITER
- _p9k_g_expand POWERLEVEL9K_ANACONDA_RIGHT_DELIMITER
- _p9k_g_expand POWERLEVEL9K_CONTEXT_TEMPLATE
- _p9k_g_expand POWERLEVEL9K_DATE_FORMAT
- _p9k_g_expand POWERLEVEL9K_DIR_PATH_SEPARATOR
- _p9k_g_expand POWERLEVEL9K_HOME_FOLDER_ABBREVIATION
- _p9k_g_expand POWERLEVEL9K_HOST_TEMPLATE
- _p9k_g_expand POWERLEVEL9K_PUBLIC_IP_NONE
- _p9k_g_expand POWERLEVEL9K_SHORTEN_DELIMITER
- _p9k_g_expand POWERLEVEL9K_TIME_FORMAT
- _p9k_g_expand POWERLEVEL9K_USER_TEMPLATE
- _p9k_g_expand POWERLEVEL9K_VCS_LOADING_TEXT
- _p9k_g_expand POWERLEVEL9K_VI_COMMAND_MODE_STRING
- _p9k_g_expand POWERLEVEL9K_VI_INSERT_MODE_STRING
+ # (╯°□°)╯︵ ┻━┻ ~/work/projects/important/urgent
+ #
+ # ⌂ ~/best/powerlevel10k
+ _p9k_declare -a POWERLEVEL9K_DIR_CLASSES
+ _p9k_declare -i POWERLEVEL9K_SHORTEN_DELIMITER_LENGTH
+ _p9k_declare -e POWERLEVEL9K_SHORTEN_DELIMITER
+ _p9k_declare -i POWERLEVEL9K_SHORTEN_DIR_LENGTH
+ _p9k_declare -s POWERLEVEL9K_IP_INTERFACE "^[^ ]+"
+ _p9k_declare -s POWERLEVEL9K_VPN_IP_INTERFACE "tun"
+ _p9k_declare -i POWERLEVEL9K_LOAD_WHICH 5
+ _p9k_declare -b POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW 0
+ _p9k_declare -b POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY 0
+ _p9k_declare -b POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW 0
+ _p9k_declare -b POWERLEVEL9K_CHRUBY_SHOW_VERSION 1
+ _p9k_declare -b POWERLEVEL9K_CHRUBY_SHOW_ENGINE 1
+ _p9k_declare -b POWERLEVEL9K_STATUS_CROSS 0
+ _p9k_declare -b POWERLEVEL9K_STATUS_OK 1
+ _p9k_declare -b POWERLEVEL9K_STATUS_SHOW_PIPESTATUS 1
+ _p9k_declare -b POWERLEVEL9K_STATUS_HIDE_SIGNAME 0
+ _p9k_declare -b POWERLEVEL9K_STATUS_VERBOSE 1
+ _p9k_declare -b POWERLEVEL9K_STATUS_OK_IN_NON_VERBOSE 0
+ # Format for the current time: 09:51:02. See `man 3 strftime`.
+ _p9k_declare -e POWERLEVEL9K_TIME_FORMAT "%D{%H:%M:%S}"
+ # If set to true, time will update every second.
+ _p9k_declare -b POWERLEVEL9K_EXPERIMENTAL_TIME_REALTIME 0
+ # If set to true, time will update when you hit enter. This way prompts for the past
+ # commands will contain the start times of their commands as opposed to the default
+ # behavior where they contain the end times of their preceding commands.
+ _p9k_declare -b POWERLEVEL9K_TIME_UPDATE_ON_COMMAND 0
+ _p9k_declare -e POWERLEVEL9K_DATE_FORMAT "%D{%d.%m.%y}"
+ _p9k_declare -s POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND 1
+ _p9k_declare -b POWERLEVEL9K_SHOW_CHANGESET 0
+ _p9k_declare -e POWERLEVEL9K_VCS_LOADING_TEXT loading
+ _p9k_declare -a POWERLEVEL9K_VCS_GIT_HOOKS -- vcs-detect-changes git-untracked git-aheadbehind git-stash git-remotebranch git-tagname
+ _p9k_declare -a POWERLEVEL9K_VCS_HG_HOOKS -- vcs-detect-changes
+ _p9k_declare -a POWERLEVEL9K_VCS_SVN_HOOKS -- vcs-detect-changes svn-detect-changes
+ # If it takes longer than this to fetch git repo status, display the prompt with a greyed out
+ # vcs segment and fix it asynchronously when the results come it.
+ _p9k_declare -F POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS 0.05
+ _p9k_declare -a POWERLEVEL9K_VCS_BACKENDS -- git
+ _p9k_declare -b POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING 0
+ _p9k_declare -i POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY -1
+ _p9k_declare -i POWERLEVEL9K_VCS_STAGED_MAX_NUM 1
+ _p9k_declare -i POWERLEVEL9K_VCS_UNSTAGED_MAX_NUM 1
+ _p9k_declare -i POWERLEVEL9K_VCS_UNTRACKED_MAX_NUM 1
+ _p9k_declare -i POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM -1
+ _p9k_declare -i POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM -1
+ _p9k_declare -b POWERLEVEL9K_DISABLE_GITSTATUS 0
+ _p9k_declare -e POWERLEVEL9K_VI_INSERT_MODE_STRING "INSERT"
+ _p9k_declare -e POWERLEVEL9K_VI_COMMAND_MODE_STRING "NORMAL"
+ # VISUAL mode is shown as NORMAL unless POWERLEVEL9K_VI_VISUAL_MODE_STRING is explicitly set.
+ _p9k_declare -e POWERLEVEL9K_VI_VISUAL_MODE_STRING
+ _p9k_declare -b POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION 1
+ _p9k_declare -e POWERLEVEL9K_VIRTUALENV_LEFT_DELIMITER "("
+ _p9k_declare -e POWERLEVEL9K_VIRTUALENV_RIGHT_DELIMITER ")"
+ _p9k_declare -b POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW 0
+ _p9k_declare -b POWERLEVEL9K_KUBECONTEXT_SHOW_DEFAULT_NAMESPACE 1
+ # Defines context classes for the purpose of applying different styling to different contexts.
+ #
+ # POWERLEVEL9K_KUBECONTEXT_CLASSES must be an array with even number of elements. The first
+ # element in each pair defines a pattern against which the current context (in the format it is
+ # displayed in the prompt) gets matched. The second element defines context class. Patterns are
+ # tried in order. The first match wins.
+ #
+ # If a non-empty class <C> is assigned to a context, the segment is styled with
+ # POWERLEVEL9K_KUBECONTEXT_<U>_BACKGROUND and POWERLEVEL9K_KUBECONTEXT_<U>_FOREGROUND where <U> is
+ # uppercased <C>. Otherwise with POWERLEVEL9K_KUBECONTEXT_BACKGROUND and
+ # POWERLEVEL9K_KUBECONTEXT_FOREGROUND.
+ #
+ # Example: Use red background for contexts containing "prod", green for "testing" and yellow for
+ # everything else.
+ #
+ # POWERLEVEL9K_KUBECONTEXT_CLASSES=(
+ # '*prod*' prod
+ # '*testing*' testing
+ # '*' other)
+ #
+ # POWERLEVEL9K_KUBECONTEXT_PROD_BACKGROUND=red
+ # POWERLEVEL9K_KUBECONTEXT_TESTING_BACKGROUND=green
+ # POWERLEVEL9K_KUBECONTEXT_OTHER_BACKGROUND=yellow
+ _p9k_declare -a POWERLEVEL9K_KUBECONTEXT_CLASSES --
+ # Specifies the format of java version.
+ #
+ # POWERLEVEL9K_JAVA_VERSION_FULL=true => 1.8.0_212-8u212-b03-0ubuntu1.18.04.1-b03
+ # POWERLEVEL9K_JAVA_VERSION_FULL=false => 1.8.0_212
+ #
+ # These correspond to `java -fullversion` and `java -version` respectively.
+ _p9k_declare -b POWERLEVEL9K_JAVA_VERSION_FULL 1
}
+typeset -ga __p9k_wrapped_zle_widgets
+
# _p9k_wrap_zle_widget zle-keymap-select _p9k_zle_keymap_select
_p9k_wrap_zle_widget() {
local widget=$1
local hook=$2
+ (( __p9k_wrapped_zle_widgets[(I)$widget:$hook] )) && return
+ __p9k_wrapped_zle_widgets+=$widget:$hook
local orig=p9k-orig-$widget
case $widgets[$widget] in
user:*)
@@ -3116,49 +3495,63 @@ _p9k_wrap_zle_widget() {
zle -N -- $widget $wrapper
}
+function _p9k_zle_line_finish() {
+ (( __p9k_enabled )) || return
+ [[ ! -o TRANSIENT_RPROMPT ]] || _p9k_rprompt_override=
+ _p9k_line_finish=
+ zle && zle .reset-prompt && zle -R
+}
+
+function _p9k_zle_line_pre_redraw() {
+ (( __p9k_enabled )) || return
+ [[ ${KEYMAP:-} == vicmd ]] || return 0
+ local region=${${REGION_ACTIVE:-0}/2/1}
+ [[ $region != $_p9k_region_active ]] || return 0
+ _p9k_region_active=$region
+ zle && zle .reset-prompt && zle -R
+}
+
prompt__p9k_internal_nothing() {
- _P9K_PROMPT+='${_P9K_SSS::=}'
+ _p9k_prompt+='${_p9k_sss::=}'
}
# _p9k_build_gap_post <first|newline>
_p9k_build_gap_post() {
_p9k_get_icon '' MULTILINE_${(U)1}_PROMPT_GAP_CHAR
- local char=${_P9K_RETVAL:- }
+ local char=${_p9k_ret:- }
_p9k_prompt_length $char
- if (( _P9K_RETVAL != 1 || $#char != 1 )); then
+ if (( _p9k_ret != 1 || $#char != 1 )); then
print -P "%F{red}WARNING!%f %BMULTILINE_${(U)1}_PROMPT_GAP_CHAR%b is not one character long. Will use ' '."
print -P "Either change the value of %BPOWERLEVEL9K_MULTILINE_${(U)1}_PROMPT_GAP_CHAR%b or remove it."
char=' '
fi
local style
_p9k_color prompt_multiline_$1_prompt_gap BACKGROUND ""
- [[ -n $_P9K_RETVAL ]] && _p9k_background $_P9K_RETVAL
- style+=$_P9K_RETVAL
+ [[ -n $_p9k_ret ]] && _p9k_background $_p9k_ret
+ style+=$_p9k_ret
_p9k_color prompt_multiline_$1_prompt_gap FOREGROUND ""
- [[ -n $_P9K_RETVAL ]] && _p9k_foreground $_P9K_RETVAL
- style+=$_P9K_RETVAL
+ [[ -n $_p9k_ret ]] && _p9k_foreground $_p9k_ret
+ style+=$_p9k_ret
local exp=POWERLEVEL9K_MULTILINE_${(U)1}_PROMPT_GAP_EXPANSION
(( $+parameters[$exp] )) && exp=${(P)exp} || exp='${P9K_GAP}'
[[ $char == '.' ]] && local s=',' || local s='.'
- _P9K_RETVAL=$style'${${${_P9K_M:#-*}:+'
+ _p9k_ret=$style'${${${_p9k_m:#-*}:+'
if [[ $exp == '${P9K_GAP}' ]]; then
- _P9K_RETVAL+='${(pl'$s'$((_P9K_M+1))'$s$s$char$s$')}'
+ _p9k_ret+='${(pl'$s'$((_p9k_m+1))'$s$s$char$s$')}'
else
- _P9K_RETVAL+='${${P9K_GAP::=${(pl'$s'$((_P9K_M+1))'$s$s$char$s$')}}+}'
- _P9K_RETVAL+='${:-"'$exp'"}'
+ _p9k_ret+='${${P9K_GAP::=${(pl'$s'$((_p9k_m+1))'$s$s$char$s$')}}+}'
+ _p9k_ret+='${:-"'$exp'"}'
style=1
fi
- _P9K_RETVAL+='$_P9K_RPROMPT$_P9K_T[$((1+!_P9K_IND))]}:-\n}'
- [[ -n $style ]] && _P9K_RETVAL+='%b%k%f'
+ _p9k_ret+='$_p9k_rprompt$_p9k_t[$((1+!_p9k_ind))]}:-\n}'
+ [[ -n $style ]] && _p9k_ret+='%b%k%f'
}
_p9k_init_lines() {
- typeset -ga _P9K_LINE_{SEGMENTS,PREFIX,SUFFIX}_{LEFT,RIGHT}
- typeset -ga _P9K_LINE_NEVER_EMPTY_RIGHT _P9K_LINE_GAP_POST
- local -a left_segments=($POWERLEVEL9K_LEFT_PROMPT_ELEMENTS)
- local -a right_segments=($POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS)
+ local -a left_segments=($_POWERLEVEL9K_LEFT_PROMPT_ELEMENTS)
+ local -a right_segments=($_POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS)
- if [[ $POWERLEVEL9K_PROMPT_ON_NEWLINE == true ]]; then
+ if (( _POWERLEVEL9K_PROMPT_ON_NEWLINE )); then
left_segments+=(newline _p9k_internal_nothing)
fi
@@ -3168,7 +3561,7 @@ _p9k_init_lines() {
repeat $((num_right_lines - num_left_lines)) left_segments=(newline $left_segments)
local -i num_lines=num_right_lines
else
- if [[ $POWERLEVEL9K_RPROMPT_ON_NEWLINE == true ]]; then
+ if (( _POWERLEVEL9K_RPROMPT_ON_NEWLINE )); then
repeat $((num_left_lines - num_right_lines)) right_segments=(newline $right_segments)
else
repeat $((num_left_lines - num_right_lines)) right_segments+=newline
@@ -3179,89 +3572,89 @@ _p9k_init_lines() {
repeat $num_lines; do
local -i left_end=${left_segments[(i)newline]}
local -i right_end=${right_segments[(i)newline]}
- _P9K_LINE_SEGMENTS_LEFT+="${(pj:\0:)left_segments[1,left_end-1]}"
- _P9K_LINE_SEGMENTS_RIGHT+="${(pj:\0:)right_segments[1,right_end-1]}"
+ _p9k_line_segments_left+="${(pj:\0:)left_segments[1,left_end-1]}"
+ _p9k_line_segments_right+="${(pj:\0:)right_segments[1,right_end-1]}"
(( left_end > $#left_segments )) && left_segments=() || shift left_end left_segments
(( right_end > $#right_segments )) && right_segments=() || shift right_end right_segments
_p9k_get_icon '' LEFT_SEGMENT_SEPARATOR
- _p9k_get_icon 'prompt_empty_line' LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL $_P9K_RETVAL
- _p9k_escape $_P9K_RETVAL
- _P9K_LINE_PREFIX_LEFT+='${${:-${_P9K_BG::=NONE}${_P9K_I::=0}${_P9K_SSS::=%f'$_P9K_RETVAL'}}+}'
- _P9K_LINE_SUFFIX_LEFT+='%b%k$_P9K_SSS%b%k%f'
+ _p9k_get_icon 'prompt_empty_line' LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL $_p9k_ret
+ _p9k_escape $_p9k_ret
+ _p9k_line_prefix_left+='${${:-${_p9k_bg::=NONE}${_p9k_i::=0}${_p9k_sss::=%f'$_p9k_ret'}}+}'
+ _p9k_line_suffix_left+='%b%k$_p9k_sss%b%k%f'
_p9k_escape ${(g::)POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL}
- [[ -n $_P9K_RETVAL ]] && _P9K_LINE_NEVER_EMPTY_RIGHT+=1 || _P9K_LINE_NEVER_EMPTY_RIGHT+=0
- _P9K_LINE_PREFIX_RIGHT+='${${:-${_P9K_BG::=NONE}${_P9K_I::=0}${_P9K_SSS::='$_P9K_RETVAL'}}+}'
- _P9K_LINE_SUFFIX_RIGHT+='$_P9K_SSS%b%k%f' # gets overridden for _P9K_EMULATE_ZERO_RPROMPT_INDENT
+ [[ -n $_p9k_ret ]] && _p9k_line_never_empty_right+=1 || _p9k_line_never_empty_right+=0
+ _p9k_line_prefix_right+='${${:-${_p9k_bg::=NONE}${_p9k_i::=0}${_p9k_sss::='$_p9k_ret'}}+}'
+ _p9k_line_suffix_right+='$_p9k_sss%b%k%f' # gets overridden for _p9k_emulate_zero_rprompt_indent
done
_p9k_get_icon '' LEFT_SEGMENT_END_SEPARATOR
- if [[ -n $_P9K_RETVAL ]]; then
- _P9K_RETVAL+=%b%k%f
+ if [[ -n $_p9k_ret ]]; then
+ _p9k_ret+=%b%k%f
# Not escaped for historical reasons.
- _P9K_RETVAL='${:-"'$_P9K_RETVAL'"}'
- if [[ $POWERLEVEL9K_PROMPT_ON_NEWLINE == true ]]; then
- _P9K_LINE_SUFFIX_LEFT[-2]+=$_P9K_RETVAL
+ _p9k_ret='${:-"'$_p9k_ret'"}'
+ if (( _POWERLEVEL9K_PROMPT_ON_NEWLINE )); then
+ _p9k_line_suffix_left[-2]+=$_p9k_ret
else
- _P9K_LINE_SUFFIX_LEFT[-1]+=$_P9K_RETVAL
+ _p9k_line_suffix_left[-1]+=$_p9k_ret
fi
fi
if (( num_lines > 1 )); then
_p9k_build_gap_post first
- _P9K_LINE_GAP_POST[1]=$_P9K_RETVAL
+ _p9k_line_gap_post[1]=$_p9k_ret
- if [[ $+POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX == 1 || $POWERLEVEL9K_PROMPT_ON_NEWLINE == true ]]; then
+ if [[ $+POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX == 1 || $_POWERLEVEL9K_PROMPT_ON_NEWLINE == 1 ]]; then
_p9k_get_icon '' MULTILINE_FIRST_PROMPT_PREFIX
- [[ _P9K_RETVAL == *%* ]] && _P9K_RETVAL+=%b%k%f
+ [[ _p9k_ret == *%* ]] && _p9k_ret+=%b%k%f
# Not escaped for historical reasons.
- _P9K_RETVAL='${:-"'$_P9K_RETVAL'"}'
- _P9K_LINE_PREFIX_LEFT[1]=$_P9K_RETVAL$_P9K_LINE_PREFIX_LEFT[1]
+ _p9k_ret='${:-"'$_p9k_ret'"}'
+ _p9k_line_prefix_left[1]=$_p9k_ret$_p9k_line_prefix_left[1]
fi
- if [[ $+POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX == 1 || $POWERLEVEL9K_PROMPT_ON_NEWLINE == true ]]; then
+ if [[ $+POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX == 1 || $_POWERLEVEL9K_PROMPT_ON_NEWLINE == 1 ]]; then
_p9k_get_icon '' MULTILINE_LAST_PROMPT_PREFIX
- [[ _P9K_RETVAL == *%* ]] && _P9K_RETVAL+=%b%k%f
+ [[ _p9k_ret == *%* ]] && _p9k_ret+=%b%k%f
# Not escaped for historical reasons.
- _P9K_RETVAL='${:-"'$_P9K_RETVAL'"}'
- _P9K_LINE_PREFIX_LEFT[-1]=$_P9K_RETVAL$_P9K_LINE_PREFIX_LEFT[-1]
+ _p9k_ret='${:-"'$_p9k_ret'"}'
+ _p9k_line_prefix_left[-1]=$_p9k_ret$_p9k_line_prefix_left[-1]
fi
_p9k_get_icon '' MULTILINE_FIRST_PROMPT_SUFFIX
- if [[ -n $_P9K_RETVAL ]]; then
- [[ _P9K_RETVAL == *%* ]] && _P9K_RETVAL+=%b%k%f
- _p9k_escape $_P9K_RETVAL
- _P9K_LINE_SUFFIX_RIGHT[1]+=$_P9K_RETVAL
- _P9K_LINE_NEVER_EMPTY_RIGHT[1]=1
+ if [[ -n $_p9k_ret ]]; then
+ [[ _p9k_ret == *%* ]] && _p9k_ret+=%b%k%f
+ _p9k_escape $_p9k_ret
+ _p9k_line_suffix_right[1]+=$_p9k_ret
+ _p9k_line_never_empty_right[1]=1
fi
_p9k_get_icon '' MULTILINE_LAST_PROMPT_SUFFIX
- if [[ -n $_P9K_RETVAL ]]; then
- [[ _P9K_RETVAL == *%* ]] && _P9K_RETVAL+=%b%k%f
- _p9k_escape $_P9K_RETVAL
- _P9K_LINE_SUFFIX_RIGHT[-1]+=$_P9K_RETVAL
- _P9K_LINE_NEVER_EMPTY_RIGHT[-1]=1
+ if [[ -n $_p9k_ret ]]; then
+ [[ _p9k_ret == *%* ]] && _p9k_ret+=%b%k%f
+ _p9k_escape $_p9k_ret
+ _p9k_line_suffix_right[-1]+=$_p9k_ret
+ _p9k_line_never_empty_right[-1]=1
fi
if (( num_lines > 2 )); then
_p9k_build_gap_post newline
- _P9K_LINE_GAP_POST[2,-2]=(${${:-{3..num_lines}}:/*/$_P9K_RETVAL})
+ _p9k_line_gap_post[2,-2]=(${${:-{3..num_lines}}:/*/$_p9k_ret})
- if [[ $+POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX == 1 || $POWERLEVEL9K_PROMPT_ON_NEWLINE == true ]]; then
+ if [[ $+POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX == 1 || $_POWERLEVEL9K_PROMPT_ON_NEWLINE == 1 ]]; then
_p9k_get_icon '' MULTILINE_NEWLINE_PROMPT_PREFIX
- [[ _P9K_RETVAL == *%* ]] && _P9K_RETVAL+=%b%k%f
+ [[ _p9k_ret == *%* ]] && _p9k_ret+=%b%k%f
# Not escaped for historical reasons.
- _P9K_RETVAL='${:-"'$_P9K_RETVAL'"}'
- _P9K_LINE_PREFIX_LEFT[2,-2]=$_P9K_RETVAL${^_P9K_LINE_PREFIX_LEFT[2,-2]}
+ _p9k_ret='${:-"'$_p9k_ret'"}'
+ _p9k_line_prefix_left[2,-2]=$_p9k_ret${^_p9k_line_prefix_left[2,-2]}
fi
_p9k_get_icon '' MULTILINE_NEWLINE_PROMPT_SUFFIX
- if [[ -n $_P9K_RETVAL ]]; then
- [[ _P9K_RETVAL == *%* ]] && _P9K_RETVAL+=%b%k%f
- _p9k_escape $_P9K_RETVAL
- _P9K_LINE_SUFFIX_RIGHT[2,-2]=${^_P9K_LINE_SUFFIX_RIGHT[2,-2]}$_P9K_RETVAL
- _P9K_LINE_NEVER_EMPTY_RIGHT[2,-2]=${(@)_P9K_LINE_NEVER_EMPTY_RIGHT[2,-2]/0/1}
+ if [[ -n $_p9k_ret ]]; then
+ [[ _p9k_ret == *%* ]] && _p9k_ret+=%b%k%f
+ _p9k_escape $_p9k_ret
+ _p9k_line_suffix_right[2,-2]=${^_p9k_line_suffix_right[2,-2]}$_p9k_ret
+ _p9k_line_never_empty_right[2,-2]=${(@)_p9k_line_never_empty_right[2,-2]/0/1}
fi
fi
fi
@@ -3270,62 +3663,60 @@ _p9k_init_lines() {
_p9k_init_prompt() {
_p9k_init_lines
- typeset -g _P9K_XY _P9K_CLM _P9K_P
- typeset -gi _P9K_X _P9K_Y _P9K_M _P9K_D _P9K_G _P9K_IND
- typeset -g _P9K_GAP_PRE='${${:-${_P9K_X::=0}${_P9K_Y::=1024}${_P9K_P::=$_P9K_LPROMPT$_P9K_RPROMPT}'
+ _p9k_gap_pre='${${:-${_p9k_x::=0}${_p9k_y::=1024}${_p9k_p::=$_p9k_lprompt$_p9k_rprompt}'
repeat 10; do
- _P9K_GAP_PRE+='${_P9K_M::=$(((_P9K_X+_P9K_Y)/2))}'
- _P9K_GAP_PRE+='${_P9K_XY::=${${(%):-$_P9K_P%$_P9K_M(l./$_P9K_M;$_P9K_Y./$_P9K_X;$_P9K_M)}##*/}}'
- _P9K_GAP_PRE+='${_P9K_X::=${_P9K_XY%;*}}'
- _P9K_GAP_PRE+='${_P9K_Y::=${_P9K_XY#*;}}'
+ _p9k_gap_pre+='${_p9k_m::=$(((_p9k_x+_p9k_y)/2))}'
+ _p9k_gap_pre+='${_p9k_xy::=${${(%):-$_p9k_p%$_p9k_m(l./$_p9k_m;$_p9k_y./$_p9k_x;$_p9k_m)}##*/}}'
+ _p9k_gap_pre+='${_p9k_x::=${_p9k_xy%;*}}'
+ _p9k_gap_pre+='${_p9k_y::=${_p9k_xy#*;}}'
done
- _P9K_GAP_PRE+='${_P9K_M::=$((_P9K_CLM-_P9K_X-_P9K_IND-1))}'
- _P9K_GAP_PRE+='}+}'
+ _p9k_gap_pre+='${_p9k_m::=$((_p9k_clm-_p9k_x-_p9k_ind-1))}'
+ _p9k_gap_pre+='}+}'
- typeset -g _P9K_PROMPT_PREFIX_LEFT='${${_P9K_CLM::=$COLUMNS}+}${${COLUMNS::=1024}+}'
- typeset -g _P9K_PROMPT_PREFIX_RIGHT='${${_P9K_CLM::=$COLUMNS}+}${${COLUMNS::=1024}+}'
- typeset -g _P9K_PROMPT_SUFFIX_LEFT='${${COLUMNS::=$_P9K_CLM}+}'
- typeset -g _P9K_PROMPT_SUFFIX_RIGHT='${${COLUMNS::=$_P9K_CLM}+}'
+ _p9k_prompt_prefix_left='${${_p9k_clm::=$COLUMNS}+}${${COLUMNS::=1024}+}'
+ _p9k_prompt_prefix_right='${${_p9k_clm::=$COLUMNS}+}${${COLUMNS::=1024}+}'
+ _p9k_prompt_suffix_left='${${COLUMNS::=$_p9k_clm}+}'
+ _p9k_prompt_suffix_right='${${COLUMNS::=$_p9k_clm}+}'
- _P9K_PROMPT_PREFIX_LEFT+='%b%k%f'
+ _p9k_prompt_prefix_left+='%b%k%f'
# Bug fixed in: https://github.com/zsh-users/zsh/commit/3eea35d0853bddae13fa6f122669935a01618bf9.
# If affects most terminals when RPROMPT is non-empty and ZLE_RPROMPT_INDENT is zero.
# We can work around it as long as RPROMPT ends with a space.
- if [[ -n $_P9K_LINE_SEGMENTS_RIGHT[-1] && $_P9K_LINE_NEVER_EMPTY_RIGHT[-1] == 0 &&
- $ZLE_RPROMPT_INDENT == 0 && $POWERLEVEL9K_WHITESPACE_BETWEEN_RIGHT_SEGMENTS == ' ' &&
+ if [[ -n $_p9k_line_segments_right[-1] && $_p9k_line_never_empty_right[-1] == 0 &&
+ $ZLE_RPROMPT_INDENT == 0 && ${POWERLEVEL9K_WHITESPACE_BETWEEN_RIGHT_SEGMENTS:- } == ' ' &&
-z $(typeset -m 'POWERLEVEL9K_*(RIGHT_RIGHT_WHITESPACE|RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL)') ]] &&
! is-at-least 5.7.2; then
- typeset -gi _P9K_EMULATE_ZERO_RPROMPT_INDENT=1
- _P9K_PROMPT_PREFIX_LEFT+='${${:-${_P9K_REAL_ZLE_RPROMPT_INDENT:=$ZLE_RPROMPT_INDENT}${ZLE_RPROMPT_INDENT::=1}${_P9K_IND::=0}}+}'
- _P9K_LINE_SUFFIX_RIGHT[-1]='${_P9K_SSS:+${_P9K_SSS% }%E}'
+ _p9k_emulate_zero_rprompt_indent=1
+ _p9k_prompt_prefix_left+='${${:-${_p9k_real_zle_rprompt_indent:=$ZLE_RPROMPT_INDENT}${ZLE_RPROMPT_INDENT::=1}${_p9k_ind::=0}}+}'
+ _p9k_line_suffix_right[-1]='${_p9k_sss:+${_p9k_sss% }%E}'
else
- typeset -gi _P9K_EMULATE_ZERO_RPROMPT_INDENT=0
- _P9K_PROMPT_PREFIX_LEFT+='${${_P9K_IND::=${${ZLE_RPROMPT_INDENT:-1}/#-*/0}}+}'
+ _p9k_emulate_zero_rprompt_indent=0
+ _p9k_prompt_prefix_left+='${${_p9k_ind::=${${ZLE_RPROMPT_INDENT:-1}/#-*/0}}+}'
fi
- if [[ $POWERLEVEL9K_PROMPT_ADD_NEWLINE == true ]]; then
- repeat ${POWERLEVEL9K_PROMPT_ADD_NEWLINE_COUNT:-1} _P9K_PROMPT_PREFIX_LEFT+=$'\n'
+ if (( _POWERLEVEL9K_PROMPT_ADD_NEWLINE )); then
+ repeat $_POWERLEVEL9K_PROMPT_ADD_NEWLINE_COUNT _p9k_prompt_prefix_left+=$'\n'
fi
- _P9K_T=($'\n' '')
- _p9k_prompt_overflow_bug && _P9K_T[2]='%{%G%}'
+ _p9k_t=($'\n' '')
+ _p9k_prompt_overflow_bug && _p9k_t[2]='%{%G%}'
- if [[ $POWERLEVEL9K_SHOW_RULER == true ]]; then
+ if (( _POWERLEVEL9K_SHOW_RULER )); then
_p9k_get_icon '' RULER_CHAR
- local ruler_char=$_P9K_RETVAL
+ local ruler_char=$_p9k_ret
_p9k_prompt_length $ruler_char
- if (( _P9K_RETVAL == 1 && $#ruler_char == 1 )); then
+ if (( _p9k_ret == 1 && $#ruler_char == 1 )); then
_p9k_color prompt_ruler BACKGROUND ""
- _p9k_background $_P9K_RETVAL
- _P9K_PROMPT_PREFIX_LEFT+=%b$_P9K_RETVAL
+ _p9k_background $_p9k_ret
+ _p9k_prompt_prefix_left+=%b$_p9k_ret
_p9k_color prompt_ruler FOREGROUND ""
- _p9k_foreground $_P9K_RETVAL
- _P9K_PROMPT_PREFIX_LEFT+=$_P9K_RETVAL
+ _p9k_foreground $_p9k_ret
+ _p9k_prompt_prefix_left+=$_p9k_ret
[[ $ruler_char == '.' ]] && local sep=',' || local sep='.'
- local ruler_len='${$((_P9K_CLM-_P9K_IND))/#-*/0}'
- _P9K_PROMPT_PREFIX_LEFT+="\${(pl$sep$ruler_len$sep$sep${(q)ruler_char}$sep)}%k%f"
- _P9K_PROMPT_PREFIX_LEFT+='$_P9K_T[$((1+!_P9K_IND))]'
+ local ruler_len='${$((_p9k_clm-_p9k_ind))/#-*/0}'
+ _p9k_prompt_prefix_left+="\${(pl$sep$ruler_len$sep$sep${(q)ruler_char}$sep)}%k%f"
+ _p9k_prompt_prefix_left+='$_p9k_t[$((1+!_p9k_ind))]'
else
print -P "%F{red}WARNING!%f %BPOWERLEVEL9K_RULER_CHAR%b is not one character long. Ruler won't be rendered."
print -P "Either change the value of %BPOWERLEVEL9K_RULER_CHAR%b or set %BPOWERLEVEL9K_SHOW_RULER=false%b to"
@@ -3334,16 +3725,11 @@ _p9k_init_prompt() {
fi
if [[ $ITERM_SHELL_INTEGRATION_INSTALLED == Yes ]]; then
- _P9K_PROMPT_PREFIX_LEFT+="%{$(iterm2_prompt_mark)%}"
+ _p9k_prompt_prefix_left+="%{$(iterm2_prompt_mark)%}"
fi
- if [[ -o TRANSIENT_RPROMPT && -n "$_P9K_LINE_SEGMENTS_RIGHT[2,-1]" ]] ||
- ( segment_in_use time && [[ $POWERLEVEL9K_TIME_UPDATE_ON_COMMAND == true ]] ); then
- function _p9k_zle_line_finish() {
- [[ ! -o TRANSIENT_RPROMPT ]] || _P9K_RPROMPT_OVERRIDE=
- _P9K_LINE_FINISH=
- zle && zle .reset-prompt && zle -R
- }
+ if [[ -o TRANSIENT_RPROMPT && -n "$_p9k_line_segments_right[2,-1]" ]] ||
+ ( segment_in_use time && (( _POWERLEVEL9K_TIME_UPDATE_ON_COMMAND )) ); then
_p9k_wrap_zle_widget zle-line-finish _p9k_zle_line_finish
fi
}
@@ -3375,117 +3761,116 @@ _p9k_init_ssh() {
[[ $w =~ "\(?($ipv4|$ipv6|$hostname)\)?\$" ]] && _P9K_SSH=1
}
+_p9k_must_init() {
+ emulate -L zsh && setopt no_hist_expand extended_glob
+ local -a param_keys=(${(o)parameters[(I)(POWERLEVEL9K_*|DEFAULT_USER|ZLE_RPROMPT_INDENT)]})
+ local IFS param_sig
+ IFS=$'\1' param_sig="${(@)param_keys:/(#b)(*)/$match[1]=\$$match[1]}"
+ IFS=$'\2' eval "param_sig=x\"$param_sig\""
+ [[ -o transient_rprompt ]] && param_sig+=t
+ [[ $param_sig == $_p9k_param_sig ]] && return 1
+ [[ -n $_p9k_param_sig ]] && _p9k_deinit
+ _p9k_param_sig=$param_sig
+}
+
+function _p9k_set_os() {
+ _p9k_os=$1
+ _p9k_get_icon prompt_os_icon $2
+ _p9k_os_icon=$_p9k_ret
+}
+
_p9k_init() {
- (( _P9K_INITIALIZED )) && return
+ emulate -L zsh && setopt no_hist_expand extended_glob
_p9k_init_icons
- _p9k_init_strings
+ _p9k_init_vars
+ _p9k_init_params
_p9k_init_prompt
_p9k_init_ssh
- function _$0_set_os() {
- OS=$1
- _p9k_get_icon prompt_os_icon $2
- OS_ICON=$_P9K_RETVAL
- }
-
- trap "unfunction _$0_set_os" EXIT
-
local uname=$(uname)
if [[ $uname == Linux && $(uname -o 2>/dev/null) == Android ]]; then
- _$0_set_os Android ANDROID_ICON
+ _p9k_set_os Android ANDROID_ICON
else
case $uname in
- SunOS) _$0_set_os Solaris SUNOS_ICON;;
- Darwin) _$0_set_os OSX APPLE_ICON;;
- CYGWIN_NT-* | MSYS_NT-*) _$0_set_os Windows WINDOWS_ICON;;
- FreeBSD|OpenBSD|DragonFly) _$0_set_os BSD FREEBSD_ICON;;
+ SunOS) _p9k_set_os Solaris SUNOS_ICON;;
+ Darwin) _p9k_set_os OSX APPLE_ICON;;
+ CYGWIN_NT-* | MSYS_NT-*) _p9k_set_os Windows WINDOWS_ICON;;
+ FreeBSD|OpenBSD|DragonFly) _p9k_set_os BSD FREEBSD_ICON;;
Linux)
- OS='Linux'
+ _p9k_os='Linux'
local os_release_id
[[ -f /etc/os-release &&
"${(f)$((</etc/os-release) 2>/dev/null)}" =~ "ID=([A-Za-z]+)" ]] && os_release_id="${match[1]}"
case "$os_release_id" in
- *arch*) _$0_set_os Linux LINUX_ARCH_ICON;;
- *debian*) _$0_set_os Linux LINUX_DEBIAN_ICON;;
- *raspbian*) _$0_set_os Linux LINUX_RASPBIAN_ICON;;
- *ubuntu*) _$0_set_os Linux LINUX_UBUNTU_ICON;;
- *elementary*) _$0_set_os Linux LINUX_ELEMENTARY_ICON;;
- *fedora*) _$0_set_os Linux LINUX_FEDORA_ICON;;
- *coreos*) _$0_set_os Linux LINUX_COREOS_ICON;;
- *gentoo*) _$0_set_os Linux LINUX_GENTOO_ICON;;
- *mageia*) _$0_set_os Linux LINUX_MAGEIA_ICON;;
- *centos*) _$0_set_os Linux LINUX_CENTOS_ICON;;
- *opensuse*|*tumbleweed*) _$0_set_os Linux LINUX_OPENSUSE_ICON;;
- *sabayon*) _$0_set_os Linux LINUX_SABAYON_ICON;;
- *slackware*) _$0_set_os Linux LINUX_SLACKWARE_ICON;;
- *linuxmint*) _$0_set_os Linux LINUX_MINT_ICON;;
- *alpine*) _$0_set_os Linux LINUX_ALPINE_ICON;;
- *aosc*) _$0_set_os Linux LINUX_AOSC_ICON;;
- *nixos*) _$0_set_os Linux LINUX_NIXOS_ICON;;
- *devuan*) _$0_set_os Linux LINUX_DEVUAN_ICON;;
- *manjaro*) _$0_set_os Linux LINUX_MANJARO_ICON;;
- *) _$0_set_os Linux LINUX_ICON;;
+ *arch*) _p9k_set_os Linux LINUX_ARCH_ICON;;
+ *debian*) _p9k_set_os Linux LINUX_DEBIAN_ICON;;
+ *raspbian*) _p9k_set_os Linux LINUX_RASPBIAN_ICON;;
+ *ubuntu*) _p9k_set_os Linux LINUX_UBUNTU_ICON;;
+ *elementary*) _p9k_set_os Linux LINUX_ELEMENTARY_ICON;;
+ *fedora*) _p9k_set_os Linux LINUX_FEDORA_ICON;;
+ *coreos*) _p9k_set_os Linux LINUX_COREOS_ICON;;
+ *gentoo*) _p9k_set_os Linux LINUX_GENTOO_ICON;;
+ *mageia*) _p9k_set_os Linux LINUX_MAGEIA_ICON;;
+ *centos*) _p9k_set_os Linux LINUX_CENTOS_ICON;;
+ *opensuse*|*tumbleweed*) _p9k_set_os Linux LINUX_OPENSUSE_ICON;;
+ *sabayon*) _p9k_set_os Linux LINUX_SABAYON_ICON;;
+ *slackware*) _p9k_set_os Linux LINUX_SLACKWARE_ICON;;
+ *linuxmint*) _p9k_set_os Linux LINUX_MINT_ICON;;
+ *alpine*) _p9k_set_os Linux LINUX_ALPINE_ICON;;
+ *aosc*) _p9k_set_os Linux LINUX_AOSC_ICON;;
+ *nixos*) _p9k_set_os Linux LINUX_NIXOS_ICON;;
+ *devuan*) _p9k_set_os Linux LINUX_DEVUAN_ICON;;
+ *manjaro*) _p9k_set_os Linux LINUX_MANJARO_ICON;;
+ *) _p9k_set_os Linux LINUX_ICON;;
esac
;;
esac
fi
- if [[ $POWERLEVEL9K_COLOR_SCHEME == light ]]; then
- typeset -g DEFAULT_COLOR=7
- typeset -g DEFAULT_COLOR_INVERTED=0
+ if [[ $_POWERLEVEL9K_COLOR_SCHEME == light ]]; then
+ _p9k_color1=7
+ _p9k_color2=0
else
- typeset -g DEFAULT_COLOR=0
- typeset -g DEFAULT_COLOR_INVERTED=7
+ _p9k_color1=0
+ _p9k_color2=7
fi
- typeset -gA _P9K_BATTERY_STATES=(
+ # Someone might be using these.
+ typeset -g OS=$_p9k_os
+ typeset -g DEFAULT_COLOR=$_p9k_color1
+ typeset -g DEFAULT_COLOR_INVERTED=$_p9k_color2
+
+ _p9k_battery_states=(
'LOW' 'red'
'CHARGING' 'yellow'
'CHARGED' 'green'
- 'DISCONNECTED' "$DEFAULT_COLOR_INVERTED"
+ 'DISCONNECTED' "$_p9k_color2"
)
local -i i=0
- local -a left_segments=(${(@0)_P9K_LINE_SEGMENTS_LEFT[@]})
+ local -a left_segments=(${(@0)_p9k_line_segments_left[@]})
+ _p9k_left_join=(1)
for ((i = 2; i <= $#left_segments; ++i)); do
local elem=$left_segments[i]
if [[ $elem == *_joined ]]; then
- _P9K_LEFT_JOIN+=$_P9K_LEFT_JOIN[((i-1))]
+ _p9k_left_join+=$_p9k_left_join[((i-1))]
else
- _P9K_LEFT_JOIN+=$i
+ _p9k_left_join+=$i
fi
done
- local -a right_segments=(${(@0)_P9K_LINE_SEGMENTS_RIGHT[@]})
+ local -a right_segments=(${(@0)_p9k_line_segments_right[@]})
+ _p9k_right_join=(1)
for ((i = 2; i <= $#right_segments; ++i)); do
local elem=$right_segments[i]
if [[ $elem == *_joined ]]; then
- _P9K_RIGHT_JOIN+=$_P9K_RIGHT_JOIN[((i-1))]
+ _p9k_right_join+=$_p9k_right_join[((i-1))]
else
- _P9K_RIGHT_JOIN+=$i
+ _p9k_right_join+=$i
fi
done
- # If the terminal `LANG` is set to `C`, this theme will not work at all.
- if [[ $LANG == "C" && $POWERLEVEL9K_IGNORE_TERM_LANG == false ]]; then
- print -P "\t%F{red}WARNING!%f Your terminal's 'LANG' is set to 'C', which breaks this theme!"
- print -P "\t%F{red}WARNING!%f Please set your 'LANG' to a UTF-8 language, like 'en_US.UTF-8'"
- print -P "\t%F{red}WARNING!%f _before_ loading this theme in your \~\.zshrc. Putting"
- print -P "\t%F{red}WARNING!%f %F{blue}export LANG=\"en_US.UTF-8\"%f at the top of your \~\/.zshrc is sufficient."
- print -P 'Set POWERLEVEL9K_IGNORE_TERM_LANG=true to suppress this warning.'
- fi
-
- # Display a warning if the terminal does not support 256 colors.
- if [[ $POWERLEVEL9K_IGNORE_TERM_COLORS == false ]]; then
- if zmodload zsh/terminfo 2>/dev/null && (( $+terminfo[colors] && $terminfo[colors] < 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 'In most terminal emulators, adding %F{blue}export TERM=xterm-256color%f to your %F{yellow}~/.zshrc%f is sufficient.'
- print -P 'Set %F{blue}POWERLEVEL9K_IGNORE_TERM_COLORS=true%f to suppress this warning.'
- fi
- fi
-
if [[ -n $POWERLEVEL9K_RIGHT_SEGMENT_END_SEPARATOR ]]; then
print -P "%F{yellow}WARNING!%f %F{red}POWERLEVEL9K_RIGHT_SEGMENT_END_SEPARATOR%f is no longer supported!"
print -P ""
@@ -3515,84 +3900,109 @@ _p9k_init() {
if segment_in_use vcs; then
powerlevel9k_vcs_init
- if [[ $POWERLEVEL9K_DISABLE_GITSTATUS != true && -n $POWERLEVEL9K_VCS_BACKENDS[(r)git] ]]; then
- source ${POWERLEVEL9K_GITSTATUS_DIR:-${_p9k_installation_dir}/gitstatus}/gitstatus.plugin.zsh
+ if [[ $_POWERLEVEL9K_DISABLE_GITSTATUS == 0 && -n $_POWERLEVEL9K_VCS_BACKENDS[(r)git] ]]; then
+ source ${_POWERLEVEL9K_GITSTATUS_DIR:-${__p9k_installation_dir}/gitstatus}/gitstatus.plugin.zsh
gitstatus_start \
- -s ${POWERLEVEL9K_VCS_MAX_NUM_STAGED:-$POWERLEVEL9K_VCS_STAGED_MAX_NUM} \
- -u ${POWERLEVEL9K_VCS_MAX_NUM_UNSTAGED:-$POWERLEVEL9K_VCS_UNSTAGED_MAX_NUM} \
- -d ${POWERLEVEL9K_VCS_MAX_NUM_UNTRACKED:-$POWERLEVEL9K_VCS_UNTRACKED_MAX_NUM} \
- -m $POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY \
+ -s $_POWERLEVEL9K_VCS_STAGED_MAX_NUM \
+ -u $_POWERLEVEL9K_VCS_UNSTAGED_MAX_NUM \
+ -d $_POWERLEVEL9K_VCS_UNTRACKED_MAX_NUM \
+ -m $_POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY \
POWERLEVEL9K
fi
fi
+ if segment_in_use todo; then
+ local todo=$commands[todo.sh]
+ if [[ -n $todo ]]; then
+ local bash=${commands[bash]:-:}
+ _p9k_todo_file=$($bash 2>/dev/null -c "
+ [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\$HOME/.todo/config
+ [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\$HOME/todo.cfg
+ [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\$HOME/.todo.cfg
+ [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\${XDG_CONFIG_HOME:-\$HOME/.config}/todo/config
+ [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=${(qqq)todo:h}/todo.cfg
+ [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\${TODOTXT_GLOBAL_CFG_FILE:-/etc/todo/config}
+ [ -r \"\$TODOTXT_CFG_FILE\" ] || exit
+ source \"\$TODOTXT_CFG_FILE\" &>/dev/null
+ echo \"\$TODO_FILE\"")
+ fi
+ fi
+
+ if segment_in_use load; then
+ case $_p9k_os in
+ OSX) (( $+commands[sysctl] )) && _p9k_num_cpus=$(sysctl -n hw.logicalcpu 2>/dev/null);;
+ BSD) (( $+commands[sysctl] )) && _p9k_num_cpus=$(sysctl -n hw.ncpu 2>/dev/null);;
+ *) (( $+commands[nproc] )) && _p9k_num_cpus=$(nproc 2>/dev/null);;
+ esac
+ fi
+
if segment_in_use dir; then
- if (( $+POWERLEVEL9K_DIR_CLASSES )); then
- local -a x=()
- local a='' b='' c=''
- for a b c in "${POWERLEVEL9K_DIR_CLASSES[@]}"; do
- x+=("$a" "$b" "${(g::)c}")
+ if (( $+_POWERLEVEL9K_DIR_CLASSES )); then
+ local -i i=0
+ for ((; i <= $#_POWERLEVEL9K_DIR_CLASSES; ++i)); do
+ _POWERLEVEL9K_DIR_CLASSES[i]=${(g::)_POWERLEVEL9K_DIR_CLASSES[i]}
done
- POWERLEVEL9K_DIR_CLASSES=("${x[@]}")
else
- typeset -ga POWERLEVEL9K_DIR_CLASSES=()
+ typeset -ga _POWERLEVEL9K_DIR_CLASSES=()
_p9k_get_icon prompt_dir_ETC ETC_ICON
- POWERLEVEL9K_DIR_CLASSES+=('/etc|/etc/*' ETC "$_P9K_RETVAL")
+ _POWERLEVEL9K_DIR_CLASSES+=('/etc|/etc/*' ETC "$_p9k_ret")
_p9k_get_icon prompt_dir_HOME HOME_ICON
- POWERLEVEL9K_DIR_CLASSES+=('~' HOME "$_P9K_RETVAL")
+ _POWERLEVEL9K_DIR_CLASSES+=('~' HOME "$_p9k_ret")
_p9k_get_icon prompt_dir_HOME_SUBFOLDER HOME_SUB_ICON
- POWERLEVEL9K_DIR_CLASSES+=('~/*' HOME_SUBFOLDER "$_P9K_RETVAL")
+ _POWERLEVEL9K_DIR_CLASSES+=('~/*' HOME_SUBFOLDER "$_p9k_ret")
_p9k_get_icon prompt_dir_DEFAULT FOLDER_ICON
- POWERLEVEL9K_DIR_CLASSES+=('*' DEFAULT "$_P9K_RETVAL")
+ _POWERLEVEL9K_DIR_CLASSES+=('*' DEFAULT "$_p9k_ret")
fi
fi
_p9k_init_async_pump
- if segment_in_use vi_mode && (( $+POWERLEVEL9K_VI_VISUAL_MODE_STRING )) || segment_in_use prompt_char; then
- function _p9k_zle_line_pre_redraw() {
- [[ ${KEYMAP:-} == vicmd ]] || return 0
- local region=${${REGION_ACTIVE:-0}/2/1}
- [[ $region != $_P9K_REGION_ACTIVE ]] || return 0
- _P9K_REGION_ACTIVE=$region
- zle && zle .reset-prompt && zle -R
- }
+ if segment_in_use vi_mode && (( $+_POWERLEVEL9K_VI_VISUAL_MODE_STRING )) || segment_in_use prompt_char; then
_p9k_wrap_zle_widget zle-line-pre-redraw _p9k_zle_line_pre_redraw
- _p9k_g_expand POWERLEVEL9K_VI_VISUAL_MODE_STRING
fi
if segment_in_use dir &&
- [[ $POWERLEVEL9K_SHORTEN_STRATEGY == truncate_with_package_name && $+commands[jq] == 0 ]]; then
+ [[ $_POWERLEVEL9K_SHORTEN_STRATEGY == truncate_with_package_name && $+commands[jq] == 0 ]]; then
>&2 print -P '%F{yellow}WARNING!%f %BPOWERLEVEL9K_SHORTEN_STRATEGY=truncate_with_package_name%b requires %F{green}jq%f.'
>&2 print -P 'Either install %F{green}jq%f or change the value of %BPOWERLEVEL9K_SHORTEN_STRATEGY%b.'
fi
_p9k_wrap_zle_widget zle-keymap-select _p9k_zle_keymap_select
+}
- _P9K_INITIALIZED=1
+_p9k_deinit() {
+ (( $+functions[gitstatus_stop] )) && gitstatus_stop POWERLEVEL9K
+ _p9k_deinit_async_pump
+ unset -m '(_POWERLEVEL9K_|P9K_|_p9k_)*'
}
-typeset -gi _P9K_ENABLED=0
+typeset -gi __p9k_enabled=0
prompt_powerlevel9k_setup() {
+ emulate -L zsh && setopt no_hist_expand extended_glob
prompt_powerlevel9k_teardown
-
- add-zsh-hook precmd powerlevel9k_prepare_prompts
+ __p9k_enabled=1
+ typeset -gF __p9k_timer_start=0
+ typeset -gF __p9k_timer_end=0
+ typeset -gi __p9k_exit_code=0
+ typeset -ga __p9k_pipe_exit_codes=()
add-zsh-hook preexec powerlevel9k_preexec
-
- unset _P9K_TIMER_START
- _P9K_ENABLED=1
+ add-zsh-hook precmd powerlevel9k_prepare_prompts
}
prompt_powerlevel9k_teardown() {
+ emulate -L zsh && setopt no_hist_expand extended_glob
add-zsh-hook -D precmd powerlevel9k_\*
add-zsh-hook -D preexec powerlevel9k_\*
PROMPT='%m%# '
RPROMPT=
- _P9K_ENABLED=0
+ if (( __p9k_enabled )); then
+ _p9k_deinit
+ __p9k_enabled=0
+ fi
}
-autoload -U colors && colors
+autoload -Uz colors && colors
autoload -Uz add-zsh-hook
zmodload zsh/datetime
diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme
index fd58c0cf..cf038446 100755
--- a/powerlevel9k.zsh-theme
+++ b/powerlevel9k.zsh-theme
@@ -20,32 +20,33 @@ fi
() {
emulate -L zsh
- if (( $+_p9k_sourced )); then
+ if (( $+__p9k_sourced )); then
prompt_powerlevel9k_setup
return
fi
- typeset -gr _p9k_sourced=1
- typeset -g _p9k_installation_dir=''
+ typeset -gr __p9k_sourced=1
+ typeset -g __p9k_installation_dir=''
if [[ -n $POWERLEVEL9K_INSTALLATION_DIR ]]; then
- _p9k_installation_dir=${POWERLEVEL9K_INSTALLATION_DIR:A}
+ __p9k_installation_dir=${POWERLEVEL9K_INSTALLATION_DIR:A}
else
if [[ ${(%):-%N} == '(eval)' ]]; then
if [[ $0 == '-antigen-load' && -r powerlevel9k.zsh-theme ]]; then
# Antigen uses eval to load things so it can change the plugin (!!)
# https://github.com/zsh-users/antigen/issues/581
- _p9k_installation_dir=$PWD
+ __p9k_installation_dir=$PWD
else
>&2 print -P '%F{red}[ERROR]%f Powerlevel10k cannot figure out its installation directory.'
>&2 print -P 'Please set %F{green}POWERLEVEL9K_INSTALLATION_DIR.%f'
- return 1
+ return
fi
else
- _p9k_installation_dir=${${(%):-%x}:A:h}
+ __p9k_installation_dir=${${(%):-%x}:A:h}
fi
fi
- source $_p9k_installation_dir/internal/p10k.zsh
+ typeset -gr __p9k_installation_dir
+ source $__p9k_installation_dir/internal/p10k.zsh || true
}
(( ! _p9k_restore_aliases )) || setopt aliases