We don't need PROMPT_COMMAND in Zsh; we are already using %F{color} %f,
which in turn use %{ and %}, which are the equivalent of Bash's
\[ and \].

We can use as many colors as we want and output directly into PS1
(or RPS1) without the risk of buffer wrapping issues.

Signed-off-by: Felipe Contreras <felipe.contre...@gmail.com>
---
 contrib/completion/git-prompt.sh | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh
index 983e419d2b..b57a9c96cb 100644
--- a/contrib/completion/git-prompt.sh
+++ b/contrib/completion/git-prompt.sh
@@ -88,7 +88,7 @@
 # If you would like a colored hint about the current dirty state, set
 # GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on
 # the colored output of "git status -sb" and are available only when
-# using __git_ps1 for PROMPT_COMMAND or precmd.
+# using __git_ps1 for PROMPT_COMMAND in Bash, but always available in Zsh.
 #
 # If you would like __git_ps1 to do nothing in the case when the current
 # directory is set up to be ignored by git, then set
@@ -506,9 +506,11 @@ __git_ps1 ()
 
        local z="${GIT_PS1_STATESEPARATOR-" "}"
 
-       # NO color option unless in PROMPT_COMMAND mode
-       if [ $pcmode = yes ] && [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
-               __git_ps1_colorize_gitstring
+       # NO color option unless in PROMPT_COMMAND mode or it's Zsh
+       if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
+               if [ $pcmode = yes ] || [ -n "${ZSH_VERSION-}" ]; then
+                       __git_ps1_colorize_gitstring
+               fi
        fi
 
        b=${b##refs/heads/}
-- 
2.22.0.rc2.dirty

Reply via email to