One minor change, in accordance with Junio's review. In part 1, I
use:
local z="${GIT_PS1_STATESEPARATOR-" "}"
Instead of the convoluted:
local z=" "
if [ -n "${GIT_PS1_STATESEPARATOR+set}" ]; then
z="${GIT_PS1_STATESEPARATOR}"
fi
Everything else is the same. I've rebased it on top of the latest
`master`.
Ramkumar Ramachandra (3):
prompt: introduce GIT_PS1_STATESEPARATOR
prompt: factor out gitstring coloring logic
prompt: colorize ZSH prompt
contrib/completion/git-prompt.sh | 124 +++++++++++++++++++++++++++------------
1 file changed, 85 insertions(+), 39 deletions(-)
--
1.8.1.2.432.g070c57d
A typical prompt looks like:
artagnon|master *=:~/src/git$
^
why do we have this space?
Nobody has branch names that end with +, *, =, < or > anyway, so it
doesn't serve the purpose of disambiguation.
Make this separator configurable via GIT_PS1_STATESEPARATOR. This means
that you can set it to "" and get this prompt:
artagnon|master*=:~/src/git$
Signed-off-by: Ramkumar Ramachandra <redacted>
---
contrib/completion/git-prompt.sh | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
@@ -400,13 +401,13 @@ __git_ps1 ()figitstring="$gitstring\[$c_clear\]$r$p"else-gitstring="$c${b##refs/heads/}${f:+ $f}$r$p"+gitstring="$c${b##refs/heads/}${f:+$z$f}$r$p"figitstring=$(printf--"$printf_format""$gitstring")PS1="$ps1pc_start$gitstring$ps1pc_end"else# NO color option unless in PROMPT_COMMAND mode-printf--"$printf_format""$c${b##refs/heads/}${f:+ $f}$r$p"+printf--"$printf_format""$c${b##refs/heads/}${f:+$z$f}$r$p"fifi}
So that we can extend it with ZSH-colors in a later patch.
Signed-off-by: Ramkumar Ramachandra <redacted>
---
contrib/completion/git-prompt.sh | 79 ++++++++++++++++++++++------------------
1 file changed, 43 insertions(+), 36 deletions(-)
@@ -222,6 +222,48 @@ __git_ps1_show_upstream ()}+# Helper function that is meant to be called from __git_ps1. It+# builds up a gitstring injecting color codes into the appropriate+# places.+__git_ps1_colorize_gitstring()+{+localc_red='\e[31m'+localc_green='\e[32m'+localc_lblue='\e[1;34m'+localc_clear='\e[0m'+localbad_color=$c_red+localok_color=$c_green+localbranch_color="$c_clear"+localflags_color="$c_lblue"+localbranchstring="$c${b##refs/heads/}"++if[$detached=no];then+branch_color="$ok_color"+else+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"$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"+}# __git_ps1 accepts 0 or 1 arguments (i.e., format string)# when called from PS1 using command substitution
@@ -364,42 +406,7 @@ __git_ps1 ()if[$pcmode=yes];thenlocalgitstring=if[-n"${GIT_PS1_SHOWCOLORHINTS-}"];then-localc_red='\e[31m'-localc_green='\e[32m'-localc_lblue='\e[1;34m'-localc_clear='\e[0m'-localbad_color=$c_red-localok_color=$c_green-localbranch_color="$c_clear"-localflags_color="$c_lblue"-localbranchstring="$c${b##refs/heads/}"--if[$detached=no];then-branch_color="$ok_color"-else-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"$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"+__git_ps1_colorize_gitstringelsegitstring="$c${b##refs/heads/}${f:+$z$f}$r$p"fi
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 <redacted>
---
contrib/completion/git-prompt.sh | 40 +++++++++++++++++++++++++++++++++++++++-
1 file changed, 39 insertions(+), 1 deletion(-)
@@ -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.