Improve the git prompt

- Fix branch for older git version (--short for symbolic-ref was not
  available on git 1.7.9.5)
- Use index (git status) for checking if staged
- Add status indication for copied
- Remove variables for statuses (less litter in the variables)
- Remove usage of eval to echo and set_color
- Replace printf where possible with echo -n
This commit is contained in:
Terje Larsen
2012-10-19 00:54:55 +02:00
committed by ridiculousfish
parent 8a63326411
commit 239d43dac4

View File

@@ -1,75 +1,79 @@
set -gx fish_color_git_clean green set -gx fish_color_git_clean green
set -gx fish_color_git_dirty red
set -gx fish_color_git_ahead red
set -gx fish_color_git_staged yellow set -gx fish_color_git_staged yellow
set -gx fish_color_git_dirty red
set -gx fish_color_git_added green set -gx fish_color_git_added green
set -gx fish_color_git_modified blue set -gx fish_color_git_modified blue
set -gx fish_color_git_renamed magenta set -gx fish_color_git_renamed magenta
set -gx fish_color_git_copied magenta
set -gx fish_color_git_deleted red set -gx fish_color_git_deleted red
set -gx fish_color_git_unmerged yellow set -gx fish_color_git_untracked yellow
set -gx fish_color_git_untracked cyan set -gx fish_color_git_unmerged red
set -gx fish_prompt_git_status_added '✚'
set -gx fish_prompt_git_status_modified '*'
set -gx fish_prompt_git_status_renamed '➜'
set -gx fish_prompt_git_status_deleted '✖'
set -gx fish_prompt_git_status_unmerged '═'
set -gx fish_prompt_git_status_untracked '.'
function __terlar_git_prompt --description 'Write out the git prompt' function __terlar_git_prompt --description 'Write out the git prompt'
set -l branch (git symbolic-ref --quiet --short HEAD 2>/dev/null) set -l branch (git rev-parse --abbrev-ref HEAD ^/dev/null)
if test -z $branch if test -z $branch
return return
end end
echo -n '|' echo -n '|'
set -l index (git status --porcelain 2>/dev/null) set -l index (git status --porcelain ^/dev/null|cut -c 1-2|uniq)
if test -z "$index" if test -z "$index"
set_color $fish_color_git_clean set_color $fish_color_git_clean
printf $branch'✓' echo -n $branch'✓'
set_color normal set_color normal
return return
end end
git diff-index --quiet --cached HEAD 2>/dev/null if printf '%s\n' $index|grep '^[ADRCM]' >/dev/null
set -l staged $status
if test $staged = 1
set_color $fish_color_git_staged set_color $fish_color_git_staged
else else
set_color $fish_color_git_dirty set_color $fish_color_git_dirty
end end
printf $branch'⚡' echo -n $branch'⚡'
set -l info
for i in $index for i in $index
switch $i switch $i
case 'A *' case 'A ' ; set added
set i added case 'M ' ' M' ; set modified
case 'M *' ' M *' case 'R ' ; set renamed
set i modified case 'C ' ; set copied
case 'R *' case 'D ' ' D' ; set deleted
set i renamed case '??' ; set untracked
case 'D *' ' D *' case 'U*' '*U' 'DD' 'AA'; set unmerged
set i deleted
case 'U *'
set i unmerged
case '?? *'
set i untracked
end
if not contains $i $info
set info $info $i
end end
end end
for i in added modified renamed deleted unmerged untracked if set -q added
if contains $i $info set_color $fish_color_git_added
eval 'set_color $fish_color_git_'$i echo -n '✚'
eval 'printf $fish_prompt_git_status_'$i end
end if set -q modified
set_color $fish_color_git_modified
echo -n '*'
end
if set -q renamed
set_color $fish_color_git_renamed
echo -n '➜'
end
if set -q copied
set_color $fish_color_git_copied
echo -n '⇒'
end
if set -q deleted
set_color $fish_color_git_deleted
echo -n '✖'
end
if set -q untracked
set_color $fish_color_git_untracked
echo -n '?'
end
if set -q unmerged
set_color $fish_color_git_unmerged
echo -n '!'
end end
set_color normal set_color normal