From: Simon Ruderich Date: Mon, 17 May 2010 09:57:31 +0000 (+0200) Subject: zsh/rc: Use caching with vcs_info to speed up the prompt. X-Git-Url: https://ruderich.org/simon/gitweb/?a=commitdiff_plain;h=e531d6fcc133cfa82c0849a1845e7cbeaeff5600;p=config%2Fdotfiles.git zsh/rc: Use caching with vcs_info to speed up the prompt. --- diff --git a/zsh/rc b/zsh/rc index cfd3f43..643d7ae 100644 --- a/zsh/rc +++ b/zsh/rc @@ -212,6 +212,45 @@ if [[ $ZSH_VERSION == (4.3.<9->|4.<4->*|<5->*) || zstyle ':vcs_info:*' unstagedstr '¹' zstyle ':vcs_info:*' stagedstr '²' + # Default to running vcs_info. If possible we prevent running it later for + # speed reasons. If set to a non empty value vcs_info is run. + FORCE_RUN_VCS_INFO=1 + + # Cache system inspired by Bart Trojanowski + # (http://jukie.net/~bart/blog/pimping-out-zsh-prompt). + #zstyle ':vcs_info:*+pre-get-data:*' hooks pre-get-data + +vi-pre-get-data() { + # Only Git and Mercurial support and need caching. Abort if any other + # VCS is used. + [[ "$vcs" != git && "$vcs" != hg ]] && return + + # If the shell just started up or we changed directories (or for other + # custom reasons) we must run vcs_info. + if [[ -n $FORCE_RUN_VCS_INFO ]]; then + FORCE_RUN_VCS_INFO= + return + fi + + # Don't run vcs_info by default to speed up the shell. + ret=1 + # If a git/hg command was run then run vcs_info as the status might + # need to be updated. + case "$(fc -ln $(($HISTCMD-1)))" in + git* | g\ *) + ret=0 + ;; + hg*) + ret=0 + ;; + esac + } + + # Must run vcs_info when changing directories. + prompt_chpwd() { + FORCE_RUN_VCS_INFO=1 + } + add-zsh-hook chpwd prompt_chpwd + # Call vcs_info as precmd before every prompt. prompt_precmd() { vcs_info