diff --git a/functions/fish_prompt.fish b/functions/fish_prompt.fish index bb09021..34ae5f7 100644 --- a/functions/fish_prompt.fish +++ b/functions/fish_prompt.fish @@ -21,11 +21,11 @@ end if contains newline $_tide_left_items # two line prompt initialization set -l dirname (status dirname) - set -l left_prompt_items "$(cat $dirname/tide/items/_tide_item_{$tide_left_prompt_items}.fish)" - set -l right_prompt_items "$(cat $dirname/tide/items/_tide_item_{$tide_right_prompt_items}.fish)" + set -l leftPromptItemCode "$(cat $dirname/tide/items/_tide_item_{$_tide_left_items}.fish)" + set -l rightPromptItemCode "$(cat $dirname/tide/items/_tide_item_{$_tide_right_items}.fish)" cat $dirname/tide/functions/_tide_2_line_prompt.fish | - string replace "# @ left side goes here @" $left_prompt_items | - string replace "# @ right side goes here @" $right_prompt_items >$dirname/tide/prompt.fish + string replace "# @ left side goes here @" $leftPromptItemCode | + string replace "# @ right side goes here @" $rightPromptItemCode >$dirname/tide/prompt.fish test "$tide_prompt_add_newline_before" = true && set -l add_newline '\n' diff --git a/functions/tide/items/_tide_item_git.fish b/functions/tide/items/_tide_item_git.fish index 98826b2..4d8fc73 100644 --- a/functions/tide/items/_tide_item_git.fish +++ b/functions/tide/items/_tide_item_git.fish @@ -2,7 +2,6 @@ if git branch --show-current 2>/dev/null | string replace -r "(.{$tide_git_trunc git rev-parse --git-dir | read -f git_dir set location $_tide_location_color$location else if test $pipestatus[1] != 0 - return else if git tag --points-at HEAD | string replace -r "(.{$tide_git_truncation_length}).+" '$1…' | read location git rev-parse --git-dir | read -f git_dir set location '#'$_tide_location_color$location @@ -11,50 +10,51 @@ else set location @$_tide_location_color$location end -# Operation -if test -d $git_dir/rebase-merge - read -f step <$git_dir/rebase-merge/msgnum - read -f total_steps <$git_dir/rebase-merge/end - test -f $git_dir/rebase-merge/interactive && set -f operation rebase-i || set -f operation rebase-m -else if test -d $git_dir/rebase-apply - read -f step <$git_dir/rebase-apply/next - read -f total_steps <$git_dir/rebase-apply/last - if test -f $git_dir/rebase-apply/rebasing - set -f operation rebase - else if test -f $git_dir/rebase-apply/applying - set -f operation am - else - set -f operation am/rebase +if test -n "$location" + # Operation + if test -d $git_dir/rebase-merge + read -f step <$git_dir/rebase-merge/msgnum + read -f total_steps <$git_dir/rebase-merge/end + test -f $git_dir/rebase-merge/interactive && set -f operation rebase-i || set -f operation rebase-m + else if test -d $git_dir/rebase-apply + read -f step <$git_dir/rebase-apply/next + read -f total_steps <$git_dir/rebase-apply/last + if test -f $git_dir/rebase-apply/rebasing + set -f operation rebase + else if test -f $git_dir/rebase-apply/applying + set -f operation am + else + set -f operation am/rebase + end + else if test -f $git_dir/MERGE_HEAD + set -f operation merge + else if test -f $git_dir/CHERRY_PICK_HEAD + set -f operation cherry-pick + else if test -f $git_dir/REVERT_HEAD + set -f operation revert + else if test -f $git_dir/BISECT_LOG + set -f operation bisect end -else if test -f $git_dir/MERGE_HEAD - set -f operation merge -else if test -f $git_dir/CHERRY_PICK_HEAD - set -f operation cherry-pick -else if test -f $git_dir/REVERT_HEAD - set -f operation revert -else if test -f $git_dir/BISECT_LOG - set -f operation bisect -end -# Git status/stash + Upstream behind/ahead -# Suppress errors in case we are in a bare repo or there is no upstream -git_info=(git -C $git_dir/.. --no-optional-locks status --porcelain 2>/dev/null) \ - string match -qr '(0|(?.*))\n(0|(?.*))\n(0|(?.*)) + # Git status/stash + Upstream behind/ahead + # Suppress errors in case we are in a bare repo or there is no upstream + git_info=(git -C $git_dir/.. --no-optional-locks status --porcelain 2>/dev/null) \ + string match -qr '(0|(?.*))\n(0|(?.*))\n(0|(?.*)) (0|(?.*))\n(0|(?.*))(\n(0|(?.*))\t(0|(?.*)))?' \ - "$(git -C $git_dir/.. stash list 2>/dev/null | count + "$(git -C $git_dir/.. stash list 2>/dev/null | count string match -r ^UU $git_info | count string match -r ^[ADMR]. $git_info | count string match -r ^.[ADMR] $git_info | count string match -r '^\?\?' $git_info | count git rev-list --count --left-right @{upstream}...HEAD 2>/dev/null)" -if test -n "$operation$conflicted" - set -g tide_git_bg_color $tide_git_bg_color_urgent -else if test -n "$staged$dirty$untracked" - set -g tide_git_bg_color $tide_git_bg_color_unstable -end + if test -n "$operation$conflicted" + set -g tide_git_bg_color $tide_git_bg_color_urgent + else if test -n "$staged$dirty$untracked" + set -g tide_git_bg_color $tide_git_bg_color_unstable + end -_tide_print_item git $_tide_location_color$tide_git_icon' ' (set_color white; echo -ns $location + _tide_print_item git $_tide_location_color$tide_git_icon' ' (set_color white; echo -ns $location set_color $tide_git_color_operation; echo -ns ' '$operation ' '$step/$total_steps set_color $tide_git_color_upstream; echo -ns ' ⇣'$behind ' ⇡'$ahead set_color $tide_git_color_stash; echo -ns ' *'$stash @@ -62,3 +62,4 @@ _tide_print_item git $_tide_location_color$tide_git_icon' ' (set_color white; ec set_color $tide_git_color_staged; echo -ns ' +'$staged set_color $tide_git_color_dirty; echo -ns ' !'$dirty set_color $tide_git_color_untracked; echo -ns ' ?'$untracked) +end