git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2] git-prompt.sh: colorize ZSH prompt

From
Ramkumar Ramachandra <artagnon@gmail.com>
Date
May 11, 2013, 22:18 UTC
Message-ID
<1368310739-24099-1-git-send-email-artagnon@gmail.com>
In-Reply-To
<CAMP44s1pO+ytNWEV6ykRn671yf50+oMZQMnrcTN+s5ykPRpumg@mail.gmail.com>

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>
---
 You like this more?  I don't mind going either way.
 contrib/completion/git-prompt.sh | 67 ++++++++++++++++++++++++++++------------
 1 file changed, 47 insertions(+), 20 deletions(-)
diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh
index 08c9b22..26e5bc2 100644
--- a/contrib/completion/git-prompt.sh
+++ b/contrib/completion/git-prompt.sh
@@ -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.
@@ -363,10 +364,18 @@ __git_ps1 ()
 		if [ $pcmode = yes ]; then
 			local gitstring=
 			if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
-				local c_red='\e[31m'
-				local c_green='\e[32m'
-				local c_lblue='\e[1;34m'
-				local c_clear='\e[0m'
+				if [[ -n ${ZSH_VERSION-} ]]; then
+					local c_red='%F{red}'
+					local c_green='%F{green}'
+					local c_lblue='%F{blue}'
+					local c_clear='%f'
+				else
+					local c_red='\e[31m'
+					local c_green='\e[32m'
+					local c_lblue='\e[1;34m'
+					local c_clear='\e[0m'
+				fi
+
 				local bad_color=$c_red
 				local ok_color=$c_green
 				local branch_color="$c_clear"
@@ -379,23 +388,41 @@ __git_ps1 ()
 					branch_color="$bad_color"
 				fi
 
-				# Setting gitstring directly with \[ and \] around colors
-				# is necessary to prevent wrapping issues!
-				gitstring="\[$branch_color\]$branchstring\[$c_clear\]"
+				if [[ -n ${ZSH_VERSION-} ]]; then
+					gitstring="$branch_color$branchstring$c_clear"
 
-				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"
+					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"
+				else
+					# Setting gitstring directly with \[ and \] around colors
+					# is necessary to prevent wrapping issues!
+					gitstring="\[$branch_color\]$branchstring\[$c_clear\]"
+
+					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"
 				fi
-				gitstring="$gitstring\[$c_clear\]$r$p"
 			else
 				gitstring="$c${b##refs/heads/}${f:+$f}$r$p"
 			fi
-- 
1.8.3.rc1.46.gfc3cab0
Previous: Felipe ContrerasNext: Felipe Contreras
Message 13 of 16 in “Colored prompt for zsh”
  1. 0/2 Colored prompt for zshRamkumar Ramachandra, May 11, 2013
  2. 1/2 git-prompt.sh: strip unnecessary space in prompt stringRamkumar Ramachandra, May 11, 2013
  3. Junio C HamanoMay 13, 2013
  4. Ramkumar RamachandraMay 13, 2013
  5. SZEDER GáborMay 13, 2013
  6. Ramkumar RamachandraMay 13, 2013
  7. SZEDER GáborMay 13, 2013
  8. SZEDER GáborMay 13, 2013
  9. Junio C HamanoMay 13, 2013
  10. Ramkumar RamachandraMay 13, 2013
  11. 2/2 git-prompt.zsh: introduce thin ZSH wrapperRamkumar Ramachandra, May 11, 2013
  12. Felipe ContrerasMay 11, 2013
  13. git-prompt.sh: colorize ZSH promptRamkumar Ramachandra, May 11, 2013
  14. Felipe ContrerasMay 11, 2013
  15. Ramkumar RamachandraMay 11, 2013
  16. Felipe ContrerasMay 11, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.