Thread (14 messages) flat view 14 messages, 4 authors, 2016-06-15

Re: [PATCH 2/2] git-prompt.zsh: introduce thin ZSH wrapper

From: Felipe Contreras <hidden>
Date: 2016-06-15 22:57:13

On Sat, May 11, 2013 at 11:25 AM, Ramkumar Ramachandra
[off-list ref] wrote:
To facilitate a colored prompt in ZSH, write a thin wrapper around
git-prompt.sh, factoring out and overriding the coloring logic.  Since
ZSH lacks a PROMPT_COMMAND, instruct the user to execute __git_ps1
inside precmd().
I think this is two logical changes into one.
quoted hunk ↗ jump to hunk
--- /dev/null
+++ b/contrib/completion/git-prompt.zsh
@@ -0,0 +1,59 @@
+# git prompt support for zsh: wrapper around git-prompt.sh
+#
+# To enable:
+#
+#    1) Copy this file and git-prompt.sh to ~/.zsh/prompt
+#    2) Add the following lines to your .zshrc:
+#
+#          source ~/.zsh/prompt/git-prompt.zsh
+#          GIT_PS1_SHOWCOLORHINTS=true
+#          precmd () { __git_ps1 "%n|" ":%~$ " "%s" }
+#
+#    3) You can now add the following to ~/.zshrc and expect the
+#       characters to be displayed in color:
+#
+#          GIT_PS1_DESCRIBE_STYLE=branch
+#          GIT_PS1_SHOWUPSTREAM=auto
+#          GIT_PS1_SHOWDIRTYSTATE=true
+#          GIT_PS1_SHOWUNTRACKEDFILES=true
+
+test -z "$script" && script="$(dirname ${funcsourcetrace[1]%:*})"/git-prompt.sh
+ZSH_VERSION='' . "$script"
I've been thinking that this method of loading the script is not the
best; we should probably have a list of locations where distributions
usually put this file. So if we could avoid the creation of of a new
file, that would be great.
+autoload colors
+colors
+
+__git_ps1_colorize_gitstring ()
+{
+       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/}"
This is the only real difference with bash colors, no? I think it's
overkill to create a new file, and load the old one, only to override
part of a function. We should probably start with everything in the
same file, and only later if we find it's necessary, split.
+       if [ $detached = no ]; then
+               branch_color="$ok_color"
+       else
+               branch_color="$bad_color"
+       fi
+
+       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"
+}
--
-- 
Felipe Contreras
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help