* [PATCH v3 0/3] Colored prompt for ZSH
@ 2013-05-17 8:55 Ramkumar Ramachandra
2013-05-17 8:55 ` [PATCH 1/3] prompt: introduce GIT_PS1_STATESEPARATOR Ramkumar Ramachandra
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Ramkumar Ramachandra @ 2013-05-17 8:55 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Git List
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
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/3] prompt: introduce GIT_PS1_STATESEPARATOR
2013-05-17 8:55 [PATCH v3 0/3] Colored prompt for ZSH Ramkumar Ramachandra
@ 2013-05-17 8:55 ` Ramkumar Ramachandra
2013-05-17 8:55 ` [PATCH 2/3] prompt: factor out gitstring coloring logic Ramkumar Ramachandra
2013-05-17 8:55 ` [PATCH 3/3] prompt: colorize ZSH prompt Ramkumar Ramachandra
2 siblings, 0 replies; 8+ messages in thread
From: Ramkumar Ramachandra @ 2013-05-17 8:55 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Git List
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 <artagnon@gmail.com>
---
contrib/completion/git-prompt.sh | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh
index eaf5c36..fb9296b 100644
--- a/contrib/completion/git-prompt.sh
+++ b/contrib/completion/git-prompt.sh
@@ -359,6 +359,7 @@ __git_ps1 ()
fi
fi
+ local z="${GIT_PS1_STATESEPARATOR-" "}"
local f="$w$i$s$u"
if [ $pcmode = yes ]; then
local gitstring=
@@ -384,7 +385,7 @@ __git_ps1 ()
gitstring="\[$branch_color\]$branchstring\[$c_clear\]"
if [ -n "$w$i$s$u$r$p" ]; then
- gitstring="$gitstring "
+ gitstring="$gitstring$z"
fi
if [ "$w" = "*" ]; then
gitstring="$gitstring\[$bad_color\]$w"
@@ -400,13 +401,13 @@ __git_ps1 ()
fi
gitstring="$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"
fi
gitstring=$(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"
fi
fi
}
--
1.8.1.2.432.g070c57d
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/3] prompt: factor out gitstring coloring logic
2013-05-17 8:55 [PATCH v3 0/3] Colored prompt for ZSH Ramkumar Ramachandra
2013-05-17 8:55 ` [PATCH 1/3] prompt: introduce GIT_PS1_STATESEPARATOR Ramkumar Ramachandra
@ 2013-05-17 8:55 ` Ramkumar Ramachandra
2013-05-17 17:00 ` Junio C Hamano
2013-05-17 8:55 ` [PATCH 3/3] prompt: colorize ZSH prompt Ramkumar Ramachandra
2 siblings, 1 reply; 8+ messages in thread
From: Ramkumar Ramachandra @ 2013-05-17 8:55 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Git List
So that we can extend it with ZSH-colors in a later patch.
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
---
contrib/completion/git-prompt.sh | 79 ++++++++++++++++++++++------------------
1 file changed, 43 insertions(+), 36 deletions(-)
diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh
index fb9296b..263d2d7 100644
--- a/contrib/completion/git-prompt.sh
+++ b/contrib/completion/git-prompt.sh
@@ -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 ()
+{
+ local c_red='\e[31m'
+ local c_green='\e[32m'
+ local c_lblue='\e[1;34m'
+ local c_clear='\e[0m'
+ 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
+
+ # 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 ]; 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'
- 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
-
- # 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_gitstring
else
gitstring="$c${b##refs/heads/}${f:+$z$f}$r$p"
fi
--
1.8.1.2.432.g070c57d
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/3] prompt: colorize ZSH prompt
2013-05-17 8:55 [PATCH v3 0/3] Colored prompt for ZSH Ramkumar Ramachandra
2013-05-17 8:55 ` [PATCH 1/3] prompt: introduce GIT_PS1_STATESEPARATOR Ramkumar Ramachandra
2013-05-17 8:55 ` [PATCH 2/3] prompt: factor out gitstring coloring logic Ramkumar Ramachandra
@ 2013-05-17 8:55 ` Ramkumar Ramachandra
2 siblings, 0 replies; 8+ messages in thread
From: Ramkumar Ramachandra @ 2013-05-17 8:55 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Git List
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>
---
contrib/completion/git-prompt.sh | 40 +++++++++++++++++++++++++++++++++++++++-
1 file changed, 39 insertions(+), 1 deletion(-)
diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh
index 263d2d7..92f2770 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.
@@ -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'
--
1.8.1.2.432.g070c57d
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/3] prompt: factor out gitstring coloring logic
2013-05-17 8:55 ` [PATCH 2/3] prompt: factor out gitstring coloring logic Ramkumar Ramachandra
@ 2013-05-17 17:00 ` Junio C Hamano
0 siblings, 0 replies; 8+ messages in thread
From: Junio C Hamano @ 2013-05-17 17:00 UTC (permalink / raw)
To: Ramkumar Ramachandra; +Cc: Git List
Ramkumar Ramachandra <artagnon@gmail.com> writes:
> So that we can extend it with ZSH-colors in a later patch.
>
> Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
> ---
> contrib/completion/git-prompt.sh | 79 ++++++++++++++++++++++------------------
> 1 file changed, 43 insertions(+), 36 deletions(-)
>
> diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh
> index fb9296b..263d2d7 100644
> --- a/contrib/completion/git-prompt.sh
> +++ b/contrib/completion/git-prompt.sh
> @@ -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 ()
> +{
> + local c_red='\e[31m'
> + local c_green='\e[32m'
> + local c_lblue='\e[1;34m'
> + local c_clear='\e[0m'
> + 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
> +
> + # 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
This is somewhat offtopic, but does anybody remember why $w (and
only $w) has to be checked against '*', instead of [ -n "$w" ]?
The primary reason I ask is because from time to time I hear people
who forget what these *#$% line noises mean and have been wondering
if we can add a GIT_PS1_SHOW_STATE_MNEMONIC option that shows these
with mnemonic letter sequences (e.g. "wsu" for dirty working tree,
unmodified index, with stash and untracked files).
> + 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 ]; 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'
> - 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
> -
> - # 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_gitstring
> else
> gitstring="$c${b##refs/heads/}${f:+$z$f}$r$p"
> fi
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] prompt: introduce GIT_PS1_STATESEPARATOR
2013-05-13 15:10 ` Junio C Hamano
@ 2013-05-16 12:12 ` Ramkumar Ramachandra
0 siblings, 0 replies; 8+ messages in thread
From: Ramkumar Ramachandra @ 2013-05-16 12:12 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Git List, Felipe Contreras, SZEDER Gábor
Junio C Hamano wrote:
> It is simpler to use 'default values', no?
>
> local z=${GIT_PS1_STATESEPARATOR-" "}
There don't seem to be any more comments. If there are no issues,
could you fix this up locally before queueing?
Thanks.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] prompt: introduce GIT_PS1_STATESEPARATOR
2013-05-13 13:49 ` [PATCH 1/3] prompt: introduce GIT_PS1_STATESEPARATOR Ramkumar Ramachandra
@ 2013-05-13 15:10 ` Junio C Hamano
2013-05-16 12:12 ` Ramkumar Ramachandra
0 siblings, 1 reply; 8+ messages in thread
From: Junio C Hamano @ 2013-05-13 15:10 UTC (permalink / raw)
To: Ramkumar Ramachandra; +Cc: Git List, Felipe Contreras, SZEDER Gábor
Ramkumar Ramachandra <artagnon@gmail.com> writes:
> 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 <artagnon@gmail.com>
> ---
> contrib/completion/git-prompt.sh | 11 ++++++++---
> 1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh
> index eaf5c36..5d8b745 100644
> --- a/contrib/completion/git-prompt.sh
> +++ b/contrib/completion/git-prompt.sh
> @@ -359,6 +359,11 @@ __git_ps1 ()
> fi
> fi
>
> + local z=" "
> + if [ -n "${GIT_PS1_STATESEPARATOR+set}" ]; then
> + z="${GIT_PS1_STATESEPARATOR}"
> + fi
It is simpler to use 'default values', no?
local z=${GIT_PS1_STATESEPARATOR-" "}
> @@ -384,7 +389,7 @@ __git_ps1 ()
> gitstring="\[$branch_color\]$branchstring\[$c_clear\]"
>
> if [ -n "$w$i$s$u$r$p" ]; then
> - gitstring="$gitstring "
> + gitstring="$gitstring$z"
Perhaps not even a nit, but you do not have to concatenate when $z
is set to empty, so it may be worth doing
if [ -n "$w$i$s$u$r$p" ] && [ -n "$z" ]; then
gitstring="$gitstring$z"
fi
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/3] prompt: introduce GIT_PS1_STATESEPARATOR
2013-05-13 13:49 [PATCH v2 0/3] Colored prompt for ZSH Ramkumar Ramachandra
@ 2013-05-13 13:49 ` Ramkumar Ramachandra
2013-05-13 15:10 ` Junio C Hamano
0 siblings, 1 reply; 8+ messages in thread
From: Ramkumar Ramachandra @ 2013-05-13 13:49 UTC (permalink / raw)
To: Git List; +Cc: Felipe Contreras, SZEDER Gábor, Junio C Hamano
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 <artagnon@gmail.com>
---
contrib/completion/git-prompt.sh | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh
index eaf5c36..5d8b745 100644
--- a/contrib/completion/git-prompt.sh
+++ b/contrib/completion/git-prompt.sh
@@ -359,6 +359,11 @@ __git_ps1 ()
fi
fi
+ local z=" "
+ if [ -n "${GIT_PS1_STATESEPARATOR+set}" ]; then
+ z="${GIT_PS1_STATESEPARATOR}"
+ fi
+
local f="$w$i$s$u"
if [ $pcmode = yes ]; then
local gitstring=
@@ -384,7 +389,7 @@ __git_ps1 ()
gitstring="\[$branch_color\]$branchstring\[$c_clear\]"
if [ -n "$w$i$s$u$r$p" ]; then
- gitstring="$gitstring "
+ gitstring="$gitstring$z"
fi
if [ "$w" = "*" ]; then
gitstring="$gitstring\[$bad_color\]$w"
@@ -400,13 +405,13 @@ __git_ps1 ()
fi
gitstring="$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"
fi
gitstring=$(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"
fi
fi
}
--
1.8.3.rc1.57.g4ac1522
^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2013-05-17 17:01 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-05-17 8:55 [PATCH v3 0/3] Colored prompt for ZSH Ramkumar Ramachandra
2013-05-17 8:55 ` [PATCH 1/3] prompt: introduce GIT_PS1_STATESEPARATOR Ramkumar Ramachandra
2013-05-17 8:55 ` [PATCH 2/3] prompt: factor out gitstring coloring logic Ramkumar Ramachandra
2013-05-17 17:00 ` Junio C Hamano
2013-05-17 8:55 ` [PATCH 3/3] prompt: colorize ZSH prompt Ramkumar Ramachandra
-- strict thread matches above, loose matches on Subject: below --
2013-05-13 13:49 [PATCH v2 0/3] Colored prompt for ZSH Ramkumar Ramachandra
2013-05-13 13:49 ` [PATCH 1/3] prompt: introduce GIT_PS1_STATESEPARATOR Ramkumar Ramachandra
2013-05-13 15:10 ` Junio C Hamano
2013-05-16 12:12 ` Ramkumar Ramachandra
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.