- add-zsh-hook precmd prompt_precmd
-
- # Display the VCS information in the right prompt.
- if [[ $ZSH_VERSION == (4.3.<9->|4.<4->*|<5->*) ]]; then
- RPROMPT='${vcs_info_msg_0_}'
- # There is a bug in Zsh below 4.3.9 which displays a wrong symbol when
- # ${vcs_info_msg_0_} is empty. Provide a workaround for those versions,
- # thanks to Frank Terbeck <ft@bewatermyfriend.org> for it.
+
+ # Must run vcs_info when changing directories.
+ prompt_chpwd() {
+ FORCE_RUN_VCS_INFO=1
+ }
+ add-zsh-hook chpwd prompt_chpwd
+
+ # Used by prompt code below to determine if vcs_info should be run.
+ RUN_VCS_INFO=1
+else
+ RUN_VCS_INFO=
+fi
+
+# Set the prompt. A two line prompt is used. On the top left the current
+# working directory is displayed, on the right vcs_info (if available). On the
+# bottom left current user name and host is shown, the exit code of the last
+# command if it wasn't 0, the number of running jobs if not 0.
+#
+# The prompt is in green and blue to make easily detectable, the error exit
+# code in red and bold and the job count in yellow.
+#
+# Thanks to Adam's prompt for the basic idea of this prompt.
+prompt_precmd() {
+ # Regex to remove elements which take no space. Used to calculate the
+ # width of the top prompt. Thanks to Bart's and Adam's prompt code in
+ # Functions/Prompts/prompt_*_setup.
+ local zero='%([BSUbfksu]|([FB]|){*})'
+
+ # Call vcs_info before every prompt.
+ if [[ -n $RUN_VCS_INFO ]]; then
+ vcs_info