Skip to content
This repository has been archived by the owner on Apr 24, 2020. It is now read-only.

Commit

Permalink
Improved speed of prompt_vcs by 50%-66%.
Browse files Browse the repository at this point in the history
  • Loading branch information
bhilburn committed Aug 31, 2016
1 parent 520eed1 commit c4fdc8f
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 9 deletions.
16 changes: 15 additions & 1 deletion functions/utilities.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,20 @@ if [[ "$OS" == 'OSX' ]]; then
fi
fi

# 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
if [[ -n "${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[(r)$key]}" ]] || [[ -n "${POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[(r)$key]}" ]]; then
return 0
else
return 1
fi
}

# Print a deprecation warning if an old segment is in use.
# Takes the name of an associative array that contains the
# deprecated segments as keys, the values contain the new
Expand All @@ -131,7 +145,7 @@ print_deprecation_warning() {
raw_deprecated_segments=(${(kvP@)1})

for key in ${(@k)raw_deprecated_segments}; do
if [[ -n "${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[(r)$key]}" ]] || [[ -n "${POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[(r)$key]}" ]]; then
if segment_in_use $key; then
# segment is deprecated
print -P "%F{yellow}Warning!%f The '$key' segment is deprecated. Use '%F{blue}${raw_deprecated_segments[$key]}%f' instead. For more informations, have a look at the CHANGELOG.md."
fi
Expand Down
23 changes: 15 additions & 8 deletions powerlevel9k.zsh-theme
Original file line number Diff line number Diff line change
Expand Up @@ -837,7 +837,7 @@ prompt_todo() {
set_default POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND "red"
# Default: Just display the first 8 characters of our changeset-ID.
set_default POWERLEVEL9K_VCS_INTERNAL_HASH_LENGTH "8"
prompt_vcs() {
powerlevel9k_vcs_init() {
if [[ -n "$POWERLEVEL9K_CHANGESET_HASH_LENGTH" ]]; then
POWERLEVEL9K_VCS_INTERNAL_HASH_LENGTH="$POWERLEVEL9K_CHANGESET_HASH_LENGTH"
fi
Expand All @@ -849,8 +849,7 @@ prompt_vcs() {
VCS_WORKDIR_HALF_DIRTY=false

# The vcs segment can have three different states - defaults to 'clean'.
local current_state=""
typeset -AH vcs_states
typeset -gAH vcs_states
vcs_states=(
'clean' 'green'
'modified' 'yellow'
Expand Down Expand Up @@ -890,6 +889,12 @@ prompt_vcs() {
if [[ "$POWERLEVEL9K_SHOW_CHANGESET" == true ]]; then
zstyle ':vcs_info:*' get-revision true
fi
}

prompt_vcs() {
VCS_WORKDIR_DIRTY=false
VCS_WORKDIR_HALF_DIRTY=false
current_state=""

# Actually invoke vcs_info manually to gather all information.
vcs_info
Expand Down Expand Up @@ -954,11 +959,8 @@ prompt_pyenv() {
################################################################
# Prompt processing and drawing
################################################################

# Main prompt
build_left_prompt() {
defined POWERLEVEL9K_LEFT_PROMPT_ELEMENTS || POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir rbenv vcs)

local index=1
for element in "${POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[@]}"; do
# Remove joined information in direct calls
Expand All @@ -980,8 +982,6 @@ build_left_prompt() {

# Right prompt
build_right_prompt() {
defined POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS || POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status root_indicator background_jobs history time)

local index=1
for element in "${POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[@]}"; do
# Remove joined information in direct calls
Expand Down Expand Up @@ -1050,6 +1050,9 @@ powerlevel9k_init() {
print -P "\t%F{red}WARNING!%f %F{blue}export LANG=\"en_US.UTF-8\"%f at the top of your \~\/.zshrc is sufficient."
fi

defined POWERLEVEL9K_LEFT_PROMPT_ELEMENTS || POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir rbenv vcs)
defined POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS || POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status root_indicator background_jobs history time)

# Display a warning if deprecated segments are in use.
typeset -AH deprecated_segments
# old => new
Expand All @@ -1067,6 +1070,10 @@ powerlevel9k_init() {
# initialize colors
autoload -U colors && colors

if segment_in_use "vcs"; then
powerlevel9k_vcs_init
fi

# initialize hooks
autoload -Uz add-zsh-hook

Expand Down

0 comments on commit c4fdc8f

Please sign in to comment.