91 lines
2.5 KiB
Fish
91 lines
2.5 KiB
Fish
set -g fish_color_git_normal blue
|
|
|
|
set -g fish_color_git_ahead green
|
|
set -g fish_color_git_behind red
|
|
set -g fish_color_git_diverged magenta
|
|
set -g fish_color_git_staged green
|
|
set -g fish_color_git_unstaged yellow
|
|
set -g fish_color_git_untracked red
|
|
set -g fish_color_git_unmerged red
|
|
|
|
set -g fish_prompt_git_status_ahead '▲'
|
|
set -g fish_prompt_git_status_behind '▼'
|
|
set -g fish_prompt_git_status_diverged '⯁'
|
|
set -g fish_prompt_git_status_staged '●'
|
|
set -g fish_prompt_git_status_unstaged '●'
|
|
set -g fish_prompt_git_status_untracked '●'
|
|
set -g fish_prompt_git_status_unmerged 'M'
|
|
set -g fish_prompt_git_status_stashed 'S'
|
|
|
|
set -g fish_prompt_git_status_order ahead behind diverged staged unstaged untracked unmerged stashed
|
|
|
|
# Useful chars
|
|
# '✓'
|
|
# '⚡'
|
|
# '✚'
|
|
# '●'
|
|
# '▾'
|
|
# '✖'
|
|
# '➜'
|
|
# '⇒'
|
|
# '➤'
|
|
|
|
function __plaid_git_prompt --description 'Write out the git prompt'
|
|
# If git isn't installed, there's nothing we can do
|
|
# Return 1 so the calling prompt can deal with it
|
|
if not command -sq git
|
|
return 1
|
|
end
|
|
set -l branch (git rev-parse --abbrev-ref HEAD 2>/dev/null)
|
|
if test -z $branch
|
|
return
|
|
end
|
|
|
|
set -l index (git status --porcelain -b 2>/dev/null)
|
|
set -l rst (set_color normal)
|
|
|
|
if test -z "$index"
|
|
printf '%s[%s]%s' (set_color $fish_color_git_normal) $branch $rst
|
|
return
|
|
end
|
|
|
|
set -l gs
|
|
|
|
printf '%s[%s ' (set_color $fish_color_git_normal) $branch
|
|
for i in $index
|
|
if echo $i | grep '^[AMRCD]' >/dev/null
|
|
set -a gs staged
|
|
end
|
|
if echo $i | grep '^.\{1\}[AMRCD]' >/dev/null
|
|
set -a gs unstaged
|
|
end
|
|
if echo $i | grep '^??' >/dev/null
|
|
set -a gs untracked
|
|
end
|
|
if echo $i | grep '^[ADU*][ADU*]' >/dev/null
|
|
set -a gs unmerged
|
|
end
|
|
if echo $i | grep '^## .*ahead' >/dev/null
|
|
set -a gs ahead
|
|
end
|
|
if echo $i | grep '^## .*behind' >/dev/null
|
|
set -a gs behind
|
|
end
|
|
if echo $i | grep '^## .*diverged' >/dev/null
|
|
set -a gs diverged
|
|
end
|
|
if git rev-parse --verify refs/stash >/dev/null 2>&1
|
|
set -a gs stashed
|
|
end
|
|
end
|
|
|
|
for i in $fish_prompt_git_status_order
|
|
if contains $i in $gs
|
|
set -l color_name fish_color_git_$i
|
|
set -l status_name fish_prompt_git_status_$i
|
|
printf '%s%s' (set_color $$color_name) $$status_name
|
|
end
|
|
end
|
|
|
|
printf '%s]%s' (set_color $fish_color_git_normal) $rst
|
|
end
|