mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-05-31 03:51:14 -03:00
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:
committed by
ridiculousfish
parent
8a63326411
commit
239d43dac4
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user