aboutsummaryrefslogtreecommitdiff
path: root/powerlevel9k.zsh-theme
diff options
context:
space:
mode:
Diffstat (limited to 'powerlevel9k.zsh-theme')
-rwxr-xr-xpowerlevel9k.zsh-theme155
1 files changed, 66 insertions, 89 deletions
diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme
index 6d376934..1dfb7283 100755
--- a/powerlevel9k.zsh-theme
+++ b/powerlevel9k.zsh-theme
@@ -100,94 +100,76 @@ fi
CURRENT_BG=NONE
LAST_SEGMENT_INDEX=0
-# Cache the results of expensive computations to avoid avoid recomputing them on every prompt.
-# Setting this option to 'true' can greatly speed up prompt generation. However, any changes
-# to the configuration will require re-sourcing powerlevel9k. For example, if you change
-# POWERLEVEL9K_TIME_BACKGROUND in an interactive shell, your next prompt will reflect the change
-# only if caching is disabled.
-set_default POWERLEVEL9K_USE_CACHE false
-
-# Meaningless unless POWERLEVEL9K_USE_CACHE is 'true'.
-#
# 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 POWERLEVEL9K_MAX_CACHE_SIZE 10000
-if [[ $POWERLEVEL9K_USE_CACHE == true ]]; then
- # Functions producing left and right prompts are called from subshells, so any
- # changes to the environment variables they do get wiped out after the prompt is
- # printed. In order to cache the results of expensive computations in these functions,
- # we use a temporary file to communicate with the parent shell and to ask it to
- # change environment variables.
- typeset -AH _p9k_cache_data=()
- typeset -H _P9K_CACHE_CHANNEL=${$(mktemp -u)%/*}/p9k_cache_channel.$$
-
- # Note: Several performance-critical functions return results to the caller via global
- # variable _P9K_RETVAL rather than stdout. This is faster.
-
- # Store a key-value pair in the cache.
- #
- # * $1: Key.
- # * $2: Value. Can be empty.
- #
- # Note that an attempt to retrieve the value right away won't succeed. All requested
- # cache update get batched and flushed together after a prompt is built.
- _p9k_cache_set() {
- # Uncomment to see cache misses.
- # echo "cache: ${(qq)1} => ${(qq)2}" >&2
- echo -E "_p9k_cache_data+=(${(qq)1} ${(qq)2})" >>$_P9K_CACHE_CHANNEL
- _P9K_RETVAL=$2
- }
-
- # Retrieve a value from the cache.
- #
- # * $1: Key.
- #
- # If there is value associated with the specified key, sets _P9K_RETVAL and returns 0.
- # Otherwise returns 1.
- _p9k_cache_get() {
- _P9K_RETVAL=${_p9k_cache_data[$1]-__p9k_empty__}
- [[ $_P9K_RETVAL != __p9k_empty__ ]]
- }
-
- # Sets _P9K_RETVAL to icon whose name is supplied via $1.
- _p9k_get_icon() {
- local var_name=POWERLEVEL9K_$1
- _P9K_RETVAL=${${(P)var_name}-$icons[$1]}
- }
-
- typeset -aH _p9k_left_join=(1)
- for ((i = 2; i <= $#POWERLEVEL9K_LEFT_PROMPT_ELEMENTS; ++i)); do
- elem=$POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[$i]
- if [[ ${elem[-7,-1]} == '_joined' ]]; then
- _p9k_left_join+=$_p9k_left_join[((i-1))]
- else
- _p9k_left_join+=$i
- fi
- done
+# Functions producing left and right prompts are called from subshells, so any
+# changes to the environment variables they do get wiped out after the prompt is
+# printed. In order to cache the results of expensive computations in these functions,
+# we use a temporary file to communicate with the parent shell and to ask it to
+# change environment variables.
+typeset -AH _p9k_cache_data=()
+typeset -H _P9K_CACHE_CHANNEL=${$(mktemp -u)%/*}/p9k_cache_channel.$$
- typeset -aH _p9k_right_join=(1)
- for ((i = 2; i <= $#POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS; ++i)); do
- elem=$POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[$i]
- if [[ ${elem[-7,-1]} == '_joined' ]]; then
- _p9k_right_join+=$_p9k_right_join[((i-1))]
- else
- _p9k_right_join+=$i
- fi
- done
- unset elem
+# Note: Several performance-critical functions return results to the caller via global
+# variable _P9K_RETVAL rather than stdout. This is faster.
- _p9k_should_join_left() [[ $LAST_SEGMENT_INDEX -ge ${_p9k_left_join[$1]:-$1} ]]
- _p9k_should_join_right() [[ $LAST_SEGMENT_INDEX -ge ${_p9k_right_join[$1]:-$1} ]]
-else
- # Implementations of the cache functions when caching is disabled.
- _p9k_cache_set() _P9K_RETVAL=$2
- _p9k_cache_get() false
- _p9k_get_icon() _P9K_RETVAL="$(print_icon $1)"
- _p9k_should_join_left() segmentShouldBeJoined $1 $LAST_SEGMENT_INDEX "$POWERLEVEL9K_LEFT_PROMPT_ELEMENTS"
- _p9k_should_join_right() segmentShouldBeJoined $1 $LAST_SEGMENT_INDEX "$POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS"
-fi
+# Store a key-value pair in the cache.
+#
+# * $1: Key.
+# * $2: Value. Can be empty.
+#
+# Note that an attempt to retrieve the value right away won't succeed. All requested
+# cache update get batched and flushed together after a prompt is built.
+_p9k_cache_set() {
+ # Uncomment to see cache misses.
+ # echo "cache: ${(qq)1} => ${(qq)2}" >&2
+ echo -E "_p9k_cache_data+=(${(qq)1} ${(qq)2})" >>$_P9K_CACHE_CHANNEL
+ _P9K_RETVAL=$2
+}
+
+# Retrieve a value from the cache.
+#
+# * $1: Key.
+#
+# If there is value associated with the specified key, sets _P9K_RETVAL and returns 0.
+# Otherwise returns 1.
+_p9k_cache_get() {
+ _P9K_RETVAL=${_p9k_cache_data[$1]-__p9k_empty__}
+ [[ $_P9K_RETVAL != __p9k_empty__ ]]
+}
+
+# Sets _P9K_RETVAL to icon whose name is supplied via $1.
+_p9k_get_icon() {
+ local var_name=POWERLEVEL9K_$1
+ _P9K_RETVAL=${${(P)var_name}-$icons[$1]}
+}
+
+typeset -aH _p9k_left_join=(1)
+for ((i = 2; i <= $#POWERLEVEL9K_LEFT_PROMPT_ELEMENTS; ++i)); do
+ elem=$POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[$i]
+ if [[ ${elem[-7,-1]} == '_joined' ]]; then
+ _p9k_left_join+=$_p9k_left_join[((i-1))]
+ else
+ _p9k_left_join+=$i
+ fi
+done
+
+typeset -aH _p9k_right_join=(1)
+for ((i = 2; i <= $#POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS; ++i)); do
+ elem=$POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[$i]
+ if [[ ${elem[-7,-1]} == '_joined' ]]; then
+ _p9k_right_join+=$_p9k_right_join[((i-1))]
+ else
+ _p9k_right_join+=$i
+ fi
+done
+unset elem
+
+_p9k_should_join_left() [[ $LAST_SEGMENT_INDEX -ge ${_p9k_left_join[$1]:-$1} ]]
+_p9k_should_join_right() [[ $LAST_SEGMENT_INDEX -ge ${_p9k_right_join[$1]:-$1} ]]
# Resolves a color to its numerical value, or an empty string. Communicates the result back
# by setting _P9K_RETVAL.
@@ -1994,13 +1976,8 @@ powerlevel9k_preexec() {
_P9K_TIMER_START=$EPOCHREALTIME
}
-if [[ $POWERLEVEL9K_USE_CACHE == true ]]; then
- _P9K_MULTILINE_FIRST_PROMPT_PREFIX=$(print_icon MULTILINE_FIRST_PROMPT_PREFIX)
- _P9K_MULTILINE_LAST_PROMPT_PREFIX=$(print_icon MULTILINE_LAST_PROMPT_PREFIX)
-else
- _P9K_MULTILINE_FIRST_PROMPT_PREFIX='$(print_icon MULTILINE_FIRST_PROMPT_PREFIX)'
- _P9K_MULTILINE_LAST_PROMPT_PREFIX='$(print_icon MULTILINE_LAST_PROMPT_PREFIX)'
-fi
+_P9K_MULTILINE_FIRST_PROMPT_PREFIX=$(print_icon MULTILINE_FIRST_PROMPT_PREFIX)
+_P9K_MULTILINE_LAST_PROMPT_PREFIX=$(print_icon MULTILINE_LAST_PROMPT_PREFIX)
set_default POWERLEVEL9K_PROMPT_ADD_NEWLINE false
powerlevel9k_prepare_prompts() {
@@ -2019,7 +1996,7 @@ powerlevel9k_prepare_prompts() {
# Reset start time
_P9K_TIMER_START=0x7FFFFFFF
- if [[ $POWERLEVEL9K_USE_CACHE == true && -s $_P9K_CACHE_CHANNEL ]]; then
+ if [[ -s $_P9K_CACHE_CHANNEL ]]; then
eval $(<$_P9K_CACHE_CHANNEL)
rm -f $_P9K_CACHE_CHANNEL
if [[ -n $POWERLEVEL9K_MAX_CACHE_SIZE && $#_p9k_cache_data -gt $POWERLEVEL9K_MAX_CACHE_SIZE ]]; then