aboutsummaryrefslogtreecommitdiff
path: root/powerlevel9k.zsh-theme
diff options
context:
space:
mode:
authorromkatv <roman.perepelitsa@gmail.com>2019-03-12 10:29:33 +0300
committerromkatv <roman.perepelitsa@gmail.com>2019-03-12 10:29:33 +0300
commita0d2449c43500300243fd6007099637cdb246c45 (patch)
tree4a6de135e07980f03bc60ad08eec8b36026d034c /powerlevel9k.zsh-theme
parentafc1a07a7122a64ad26d933e72c21a2931032696 (diff)
speed up time, date and custom prompts. saves 2.5ms overall
Diffstat (limited to 'powerlevel9k.zsh-theme')
-rwxr-xr-xpowerlevel9k.zsh-theme35
1 files changed, 23 insertions, 12 deletions
diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme
index 6ff63756..fd164702 100755
--- a/powerlevel9k.zsh-theme
+++ b/powerlevel9k.zsh-theme
@@ -773,6 +773,9 @@ prompt_custom() {
# Get content of custom segment
local command="POWERLEVEL9K_CUSTOM_${segment_name}"
local segment_content="$(eval ${(P)command})"
+ # Note: this would be a better implementation. I'm keeping the old one in case anyone
+ # relies on its quirks.
+ # local segment_content=$("${(@Q)${(z)${(P)command}}}")
if [[ -n $segment_content ]]; then
"$1_prompt_segment" "${0}_${3:u}" "$2" $DEFAULT_COLOR_INVERTED $DEFAULT_COLOR "$segment_content" "CUSTOM_${segment_name}_ICON"
@@ -1554,22 +1557,30 @@ build_test_stats() {
# If set to true, `time` prompt will update every second.
set_default POWERLEVEL9K_EXPERIMENTAL_TIME_REALTIME false
+set_default POWERLEVEL9K_TIME_FORMAT "%D{%H:%M:%S}"
prompt_time() {
- set_default POWERLEVEL9K_TIME_FORMAT "%D{%H:%M:%S}"
- if [[ $POWERLEVEL9K_EXPERIMENTAL_TIME_REALTIME == true ]]; then
- local _P9K_TIME=$POWERLEVEL9K_TIME_FORMAT
- else
- [[ -v _P9K_REFRESH_PROMPT ]] || typeset -gH _P9K_TIME=$(print -P $POWERLEVEL9K_TIME_FORMAT)
- fi
- "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR_INVERTED" "$DEFAULT_COLOR" "$_P9K_TIME" "TIME_ICON"
+ "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR_INVERTED" "$DEFAULT_COLOR" "$POWERLEVEL9K_TIME_FORMAT" "TIME_ICON"
+ # For the reference, here's how the code should ideally look like. However, it's 2ms slower
+ # for a tiny gain in usability. The difference is that the current code will cause time
+ # to update when vcs segment goes from grey to green/yellow, but the commented-out code
+ # won't (unless POWERLEVEL9K_EXPERIMENTAL_TIME_REALTIME is true).
+ #if [[ $POWERLEVEL9K_EXPERIMENTAL_TIME_REALTIME == true ]]; then
+ # local _P9K_TIME=$POWERLEVEL9K_TIME_FORMAT
+ #else
+ # [[ -v _P9K_REFRESH_PROMPT ]] || typeset -gH _P9K_TIME=$(print -P $POWERLEVEL9K_TIME_FORMAT)
+ # typeset -gH _P9K_TIME=$POWERLEVEL9K_TIME_FORMAT
+ #fi
+ #"$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR_INVERTED" "$DEFAULT_COLOR" "$_P9K_TIME" "TIME_ICON"
}
################################################################
# System date
+set_default POWERLEVEL9K_DATE_FORMAT "%D{%d.%m.%y}"
prompt_date() {
- set_default POWERLEVEL9K_DATE_FORMAT "%D{%d.%m.%y}"
- [[ -v _P9K_REFRESH_PROMPT ]] || typeset -gH _P9K_DATE=$(print -P $POWERLEVEL9K_DATE_FORMAT)
- "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR_INVERTED" "$DEFAULT_COLOR" "$_P9K_DATE" "DATE_ICON"
+ "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR_INVERTED" "$DEFAULT_COLOR" "$POWERLEVEL9K_DATE_FORMAT" "DATE_ICON"
+ # See comments in prompt_time.
+ # [[ -v _P9K_REFRESH_PROMPT ]] || typeset -gH _P9K_DATE=$(print -P $POWERLEVEL9K_DATE_FORMAT)
+ # "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR_INVERTED" "$DEFAULT_COLOR" "$_P9K_DATE" "DATE_ICON"
}
################################################################
@@ -2001,7 +2012,7 @@ build_left_prompt() {
# Check if it is a custom command, otherwise interpet it as
# a prompt.
- if [[ $element[0,7] =~ "custom_" ]]; then
+ if [[ $element == custom_* ]]; then
"prompt_custom" "left" "$index" $element[8,-1]
else
"prompt_$element" "left" "$index"
@@ -2029,7 +2040,7 @@ build_right_prompt() {
# Check if it is a custom command, otherwise interpet it as
# a prompt.
- if [[ $element[0,7] =~ "custom_" ]]; then
+ if [[ $element == custom_* ]]; then
"prompt_custom" "right" "$index" $element[8,-1]
else
"prompt_$element" "right" "$index"