mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-12-14 09:53:42 +08:00
c2970f9618
This runs build_tools/style.fish, which runs clang-format on C++, fish_indent on fish and (new) black on python. If anything is wrong with the formatting, we should fix the tools, but automated formatting is worth it.
93 lines
2.4 KiB
Fish
93 lines
2.4 KiB
Fish
set -g fish_color_git_clean green
|
|
set -g fish_color_git_staged yellow
|
|
set -g fish_color_git_dirty red
|
|
|
|
set -g fish_color_git_added green
|
|
set -g fish_color_git_modified blue
|
|
set -g fish_color_git_renamed magenta
|
|
set -g fish_color_git_copied magenta
|
|
set -g fish_color_git_deleted red
|
|
set -g fish_color_git_untracked yellow
|
|
set -g fish_color_git_unmerged red
|
|
|
|
set -g fish_prompt_git_status_added '✚'
|
|
set -g fish_prompt_git_status_modified '*'
|
|
set -g fish_prompt_git_status_renamed '➜'
|
|
set -g fish_prompt_git_status_copied '⇒'
|
|
set -g fish_prompt_git_status_deleted '✖'
|
|
set -g fish_prompt_git_status_untracked '?'
|
|
set -g fish_prompt_git_status_unmerged !
|
|
|
|
set -g fish_prompt_git_status_order added modified renamed copied deleted untracked unmerged
|
|
|
|
function __terlar_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
|
|
|
|
echo -n '|'
|
|
|
|
set -l index (git status --porcelain 2>/dev/null|cut -c 1-2|sort -u)
|
|
|
|
if test -z "$index"
|
|
set_color $fish_color_git_clean
|
|
echo -n $branch'✓'
|
|
set_color normal
|
|
return
|
|
end
|
|
|
|
set -l gs
|
|
set -l staged
|
|
|
|
for i in $index
|
|
if string match -rq '^[AMRCD]' -- $i
|
|
set staged 1
|
|
end
|
|
|
|
# HACK: To allow matching a literal `??` both with and without `?` globs.
|
|
set -l dq '??'
|
|
switch $i
|
|
case 'A '
|
|
set -a gs added
|
|
case 'M ' ' M'
|
|
set -a gs modified
|
|
case 'R '
|
|
set -a gs renamed
|
|
case 'C '
|
|
set -a gs copied
|
|
case 'D ' ' D'
|
|
set -a gs deleted
|
|
case "$dq"
|
|
set -a gs untracked
|
|
case 'U*' '*U' 'DD' 'AA'
|
|
set -a gs unmerged
|
|
end
|
|
end
|
|
|
|
if set -q staged[1]
|
|
set_color $fish_color_git_staged
|
|
else
|
|
set_color $fish_color_git_dirty
|
|
end
|
|
|
|
echo -n $branch'⚡'
|
|
|
|
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
|
|
|
|
set_color $$color_name
|
|
echo -n $$status_name
|
|
end
|
|
end
|
|
|
|
set_color normal
|
|
end
|