diff --git a/share/functions/__terlar_git_prompt.fish b/share/functions/__terlar_git_prompt.fish index 93df408f1..3c80e2cb3 100644 --- a/share/functions/__terlar_git_prompt.fish +++ b/share/functions/__terlar_git_prompt.fish @@ -1,75 +1,79 @@ 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_dirty red set -gx fish_color_git_added green set -gx fish_color_git_modified blue 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_unmerged yellow -set -gx fish_color_git_untracked cyan - -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 '.' +set -gx fish_color_git_untracked yellow +set -gx fish_color_git_unmerged red 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 return end 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" set_color $fish_color_git_clean - printf $branch'✓' + echo -n $branch'✓' set_color normal return end - git diff-index --quiet --cached HEAD 2>/dev/null - set -l staged $status - if test $staged = 1 + if printf '%s\n' $index|grep '^[ADRCM]' >/dev/null set_color $fish_color_git_staged else set_color $fish_color_git_dirty end - printf $branch'⚡' + echo -n $branch'⚡' - set -l info for i in $index switch $i - case 'A *' - set i added - case 'M *' ' M *' - set i modified - case 'R *' - set i renamed - case 'D *' ' D *' - set i deleted - case 'U *' - set i unmerged - case '?? *' - set i untracked - end - - if not contains $i $info - set info $info $i + case 'A ' ; set added + case 'M ' ' M' ; set modified + case 'R ' ; set renamed + case 'C ' ; set copied + case 'D ' ' D' ; set deleted + case '??' ; set untracked + case 'U*' '*U' 'DD' 'AA'; set unmerged end end - for i in added modified renamed deleted unmerged untracked - if contains $i $info - eval 'set_color $fish_color_git_'$i - eval 'printf $fish_prompt_git_status_'$i - end + if set -q added + set_color $fish_color_git_added + echo -n '✚' + 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 set_color normal