prompt: colorize ZSH prompt
authorRamkumar Ramachandra <artagnon@gmail.com>
Fri, 17 May 2013 08:55:48 +0000 (14:25 +0530)
committerJunio C Hamano <gitster@pobox.com>
Fri, 17 May 2013 17:01:28 +0000 (10:01 -0700)
Add colors suitable for use in the ZSH prompt. Having learnt that the
ZSH equivalent of PROMPT_COMMAND is precmd (), you can now use
GIT_PS1_SHOWCOLORHINTS with ZSH.

Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
contrib/completion/git-prompt.sh
index 263d2d709969413e3590ef2788be7a415218f7b6..92f2770769799a8b9695788d95a521bb39a47dba 100644 (file)
@@ -20,7 +20,8 @@
 #        <post>, which are strings you would put in $PS1 before
 #        and after the status string generated by the git-prompt
 #        machinery.  e.g.
-#           PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "'
+#        Bash: PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "'
+#        ZSH:  precmd () { __git_ps1 "%n" ":%~$ " "|%s" }
 #        will show username, at-sign, host, colon, cwd, then
 #        various status string, followed by dollar and SP, as
 #        your prompt.
@@ -227,6 +228,43 @@ __git_ps1_show_upstream ()
 # places.
 __git_ps1_colorize_gitstring ()
 {
+       if [[ -n ${ZSH_VERSION-} ]]; then
+               local c_red='%F{red}'
+               local c_green='%F{green}'
+               local c_lblue='%F{blue}'
+               local c_clear='%f'
+               local bad_color=$c_red
+               local ok_color=$c_green
+               local branch_color="$c_clear"
+               local flags_color="$c_lblue"
+               local branchstring="$c${b##refs/heads/}"
+
+               if [ $detached = no ]; then
+                       branch_color="$ok_color"
+               else
+                       branch_color="$bad_color"
+               fi
+
+               gitstring="$branch_color$branchstring$c_clear"
+
+               if [ -n "$w$i$s$u$r$p" ]; then
+                       gitstring="$gitstring$z"
+               fi
+               if [ "$w" = "*" ]; then
+                       gitstring="$gitstring$bad_color$w"
+               fi
+               if [ -n "$i" ]; then
+                       gitstring="$gitstring$ok_color$i"
+               fi
+               if [ -n "$s" ]; then
+                       gitstring="$gitstring$flags_color$s"
+               fi
+               if [ -n "$u" ]; then
+                       gitstring="$gitstring$bad_color$u"
+               fi
+               gitstring="$gitstring$c_clear$r$p"
+               return
+       fi
        local c_red='\e[31m'
        local c_green='\e[32m'
        local c_lblue='\e[1;34m'