mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-27 13:23:09 +00:00
git_prompt: __fish_git_prompt_showcolorhints
Based on GIT_PS1_SHOW_COLORHINTS, it introduces more color by default and also changes the color of the branch name based on if it is a real branch or detached. Based on the following commits from git.git: 9b7e776: show color hints based on state of the git tree 9b3aaf8: Fix up colored git-prompt 76c36c0: coloured git-prompt: paint detached HEAD marker in red
This commit is contained in:
parent
5b39d1819f
commit
db969dc85a
1 changed files with 57 additions and 11 deletions
|
@ -67,6 +67,10 @@
|
||||||
# describe relative to older annotated tag (v1.6.3.1-13-gdd42c2f)
|
# describe relative to older annotated tag (v1.6.3.1-13-gdd42c2f)
|
||||||
# default exactly matching tag
|
# default exactly matching tag
|
||||||
#
|
#
|
||||||
|
# If you would like a colored hint about the current dirty state, set
|
||||||
|
# __fish_git_prompt_showcolorhints to a nonempty value. The default colors are
|
||||||
|
# based on the colored output of "git status -sb"
|
||||||
|
#
|
||||||
# This fish-compatible version of __fish_git_prompt includes some additional
|
# This fish-compatible version of __fish_git_prompt includes some additional
|
||||||
# features on top of the above-documented bash-compatible features:
|
# features on top of the above-documented bash-compatible features:
|
||||||
#
|
#
|
||||||
|
@ -81,11 +85,13 @@
|
||||||
# bare Marker for a bare repository
|
# bare Marker for a bare repository
|
||||||
# merging Current operation (|MERGING, |REBASE, etc.)
|
# merging Current operation (|MERGING, |REBASE, etc.)
|
||||||
# branch Branch name
|
# branch Branch name
|
||||||
|
# flags Optional flags (see below)
|
||||||
# upstream Upstream name and flags (with showupstream)
|
# upstream Upstream name and flags (with showupstream)
|
||||||
#
|
#
|
||||||
# The following optional flags have both colors, as above, and custom
|
# The following optional flags have both colors, as above, and custom
|
||||||
# characters via __fish_git_prompt_char_<name>. The default character is
|
# characters via __fish_git_prompt_char_<name>. The default character is
|
||||||
# shown in parenthesis.
|
# shown in parenthesis. The default color for these flags can be also be set
|
||||||
|
# via the __fish_git_prompt_color_flags variable.
|
||||||
#
|
#
|
||||||
# __fish_git_prompt_showdirtystate
|
# __fish_git_prompt_showdirtystate
|
||||||
# dirtystate unstaged changes (*)
|
# dirtystate unstaged changes (*)
|
||||||
|
@ -103,6 +109,16 @@
|
||||||
# upstream_behind Upstream has more commits (<)
|
# upstream_behind Upstream has more commits (<)
|
||||||
# upstream_ahead Branch has more commits (>)
|
# upstream_ahead Branch has more commits (>)
|
||||||
# upstream_diverged Upstream and branch have new commits (<>)
|
# upstream_diverged Upstream and branch have new commits (<>)
|
||||||
|
#
|
||||||
|
# Turning on __fish_git_prompt_showcolorhints changes the colors as follows to
|
||||||
|
# more closely match the behavior in bash. Note that setting any of these
|
||||||
|
# colors manually will override these defaults.
|
||||||
|
#
|
||||||
|
# branch Defaults to green
|
||||||
|
# branch_detached New color, when head is detached, default red
|
||||||
|
# dirtystate Defaults to red
|
||||||
|
# stagedstate Defaults to green
|
||||||
|
# flags Defaults to --bold blue
|
||||||
|
|
||||||
set -g ___fish_git_prompt_status_order stagedstate invalidstate dirtystate untrackedfiles
|
set -g ___fish_git_prompt_status_order stagedstate invalidstate dirtystate untrackedfiles
|
||||||
|
|
||||||
|
@ -264,11 +280,12 @@ function __fish_git_prompt --description "Prompt function for Git"
|
||||||
set -l rbc (__fish_git_prompt_operation_branch_bare $git_dir)
|
set -l rbc (__fish_git_prompt_operation_branch_bare $git_dir)
|
||||||
set -l r $rbc[1] # current operation
|
set -l r $rbc[1] # current operation
|
||||||
set -l b $rbc[2] # current branch
|
set -l b $rbc[2] # current branch
|
||||||
|
set -l detached $rbc[3]
|
||||||
set -l w #dirty working directory
|
set -l w #dirty working directory
|
||||||
set -l i #staged changes
|
set -l i #staged changes
|
||||||
set -l s #stashes
|
set -l s #stashes
|
||||||
set -l u #untracked
|
set -l u #untracked
|
||||||
set -l c $rbc[3] # bare repository
|
set -l c $rbc[4] # bare repository
|
||||||
set -l p #upstream
|
set -l p #upstream
|
||||||
set -l informative_status
|
set -l informative_status
|
||||||
|
|
||||||
|
@ -305,6 +322,15 @@ function __fish_git_prompt --description "Prompt function for Git"
|
||||||
|
|
||||||
__fish_git_prompt_validate_colors
|
__fish_git_prompt_validate_colors
|
||||||
|
|
||||||
|
set -l branch_color $___fish_git_prompt_color_branch
|
||||||
|
set -l branch_done $___fish_git_prompt_color_branch_done
|
||||||
|
if test -n "$__fish_git_prompt_showcolorhints"
|
||||||
|
if test $detached = yes
|
||||||
|
set branch_color $___fish_git_prompt_color_branch_detached
|
||||||
|
set branch_done $___fish_git_prompt_color_branch_detached_done
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if test -n "$w"
|
if test -n "$w"
|
||||||
set w "$___fish_git_prompt_color_dirtystate$w$___fish_git_prompt_color_dirtystate_done"
|
set w "$___fish_git_prompt_color_dirtystate$w$___fish_git_prompt_color_dirtystate_done"
|
||||||
end
|
end
|
||||||
|
@ -319,7 +345,7 @@ function __fish_git_prompt --description "Prompt function for Git"
|
||||||
end
|
end
|
||||||
set b (/bin/sh -c 'echo "${1#refs/heads/}"' -- $b)
|
set b (/bin/sh -c 'echo "${1#refs/heads/}"' -- $b)
|
||||||
if test -n "$b"
|
if test -n "$b"
|
||||||
set b "$___fish_git_prompt_color_branch$b$___fish_git_prompt_color_branch_done"
|
set b "$branch_color$b$branch_done"
|
||||||
end
|
end
|
||||||
if test -n "$c"
|
if test -n "$c"
|
||||||
set c "$___fish_git_prompt_color_bare$c$___fish_git_prompt_color_bare_done"
|
set c "$___fish_git_prompt_color_bare$c$___fish_git_prompt_color_bare_done"
|
||||||
|
@ -414,6 +440,7 @@ function __fish_git_prompt_operation_branch_bare --description "__fish_git_promp
|
||||||
set -l git_dir $argv[1]
|
set -l git_dir $argv[1]
|
||||||
set -l branch
|
set -l branch
|
||||||
set -l operation
|
set -l operation
|
||||||
|
set -l detached no
|
||||||
set -l bare
|
set -l bare
|
||||||
set -l os
|
set -l os
|
||||||
|
|
||||||
|
@ -476,6 +503,7 @@ function __fish_git_prompt_operation_branch_bare --description "__fish_git_promp
|
||||||
|
|
||||||
echo $operation
|
echo $operation
|
||||||
echo $branch
|
echo $branch
|
||||||
|
echo $detached
|
||||||
echo $bare
|
echo $bare
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -555,24 +583,41 @@ function __fish_git_prompt_set_color
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function __fish_git_prompt_validate_colors --description "__fish_git_prompt helper, checks color variables"
|
function __fish_git_prompt_validate_colors --description "__fish_git_prompt helper, checks color variables"
|
||||||
|
|
||||||
# Base color defaults to nothing (must be done first)
|
# Base color defaults to nothing (must be done first)
|
||||||
__fish_git_prompt_set_color __fish_git_prompt_color '' ''
|
__fish_git_prompt_set_color __fish_git_prompt_color '' ''
|
||||||
|
|
||||||
|
# Normal colors
|
||||||
__fish_git_prompt_set_color __fish_git_prompt_color_prefix
|
__fish_git_prompt_set_color __fish_git_prompt_color_prefix
|
||||||
__fish_git_prompt_set_color __fish_git_prompt_color_suffix
|
__fish_git_prompt_set_color __fish_git_prompt_color_suffix
|
||||||
__fish_git_prompt_set_color __fish_git_prompt_color_bare
|
__fish_git_prompt_set_color __fish_git_prompt_color_bare
|
||||||
__fish_git_prompt_set_color __fish_git_prompt_color_merging
|
__fish_git_prompt_set_color __fish_git_prompt_color_merging
|
||||||
__fish_git_prompt_set_color __fish_git_prompt_color_branch
|
|
||||||
__fish_git_prompt_set_color __fish_git_prompt_color_cleanstate
|
__fish_git_prompt_set_color __fish_git_prompt_color_cleanstate
|
||||||
__fish_git_prompt_set_color __fish_git_prompt_color_dirtystate
|
|
||||||
__fish_git_prompt_set_color __fish_git_prompt_color_stagedstate
|
|
||||||
__fish_git_prompt_set_color __fish_git_prompt_color_invalidstate
|
__fish_git_prompt_set_color __fish_git_prompt_color_invalidstate
|
||||||
__fish_git_prompt_set_color __fish_git_prompt_color_stashstate
|
|
||||||
__fish_git_prompt_set_color __fish_git_prompt_color_untrackedfiles
|
|
||||||
__fish_git_prompt_set_color __fish_git_prompt_color_upstream
|
__fish_git_prompt_set_color __fish_git_prompt_color_upstream
|
||||||
|
|
||||||
|
# Colors with defaults with showcolorhints
|
||||||
|
if test -n "$__fish_git_prompt_showcolorhints"
|
||||||
|
__fish_git_prompt_set_color __fish_git_prompt_color_flags (set_color --bold blue)
|
||||||
|
__fish_git_prompt_set_color __fish_git_prompt_color_branch (set_color green)
|
||||||
|
__fish_git_prompt_set_color __fish_git_prompt_color_dirtystate (set_color red)
|
||||||
|
__fish_git_prompt_set_color __fish_git_prompt_color_stagedstate (set_color green)
|
||||||
|
else
|
||||||
|
__fish_git_prompt_set_color __fish_git_prompt_color_flags
|
||||||
|
__fish_git_prompt_set_color __fish_git_prompt_color_branch
|
||||||
|
__fish_git_prompt_set_color __fish_git_prompt_color_dirtystate $___fish_git_prompt_color_flags $___fish_git_prompt_color_flags_done
|
||||||
|
__fish_git_prompt_set_color __fish_git_prompt_color_stagedstate $___fish_git_prompt_color_flags $___fish_git_prompt_color_flags_done
|
||||||
|
end
|
||||||
|
|
||||||
|
# Branch_detached has a default, but is only used with showcolorhints
|
||||||
|
__fish_git_prompt_set_color __fish_git_prompt_color_branch_detached (set_color red)
|
||||||
|
|
||||||
|
# Colors that depend on flags color
|
||||||
|
__fish_git_prompt_set_color __fish_git_prompt_color_stashstate $___fish_git_prompt_color_flags $___fish_git_prompt_color_flags_done
|
||||||
|
__fish_git_prompt_set_color __fish_git_prompt_color_untrackedfiles $___fish_git_prompt_color_flags $___fish_git_prompt_color_flags_done
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
set -l varargs
|
set -l varargs
|
||||||
|
@ -586,17 +631,18 @@ function __fish_git_prompt_repaint $varargs --description "Event handler, repain
|
||||||
end
|
end
|
||||||
|
|
||||||
set -l varargs
|
set -l varargs
|
||||||
for var in '' _prefix _suffix _bare _merging _branch _dirtystate _stagedstate _invalidstate _stashstate _untrackedfiles _upstream
|
for var in '' _prefix _suffix _bare _merging _branch _dirtystate _stagedstate _invalidstate _stashstate _untrackedfiles _upstream _flags
|
||||||
set varargs $varargs --on-variable __fish_git_prompt_color$var
|
set varargs $varargs --on-variable __fish_git_prompt_color$var
|
||||||
end
|
end
|
||||||
|
set varargs $varargs --on-variable __fish_git_prompt_showcolorhints
|
||||||
function __fish_git_prompt_repaint_color $varargs --description "Event handler, repaints prompt when any color changes"
|
function __fish_git_prompt_repaint_color $varargs --description "Event handler, repaints prompt when any color changes"
|
||||||
if status --is-interactive
|
if status --is-interactive
|
||||||
set -l var $argv[3]
|
set -l var $argv[3]
|
||||||
set -e _$var
|
set -e _$var
|
||||||
set -e _{$var}_done
|
set -e _{$var}_done
|
||||||
if test $var = __fish_git_prompt_color
|
if test $var = __fish_git_prompt_color -o $var = __fish_git_prompt_color_flags -o $var = __fish_git_prompt_showcolorhints
|
||||||
# reset all the other colors too
|
# reset all the other colors too
|
||||||
for name in prefix suffix bare merging branch dirtystate stagedstate invalidstate stashstate untrackedfiles upstream
|
for name in prefix suffix bare merging branch dirtystate stagedstate invalidstate stashstate untrackedfiles upstream flags
|
||||||
set -e ___fish_git_prompt_color_$name
|
set -e ___fish_git_prompt_color_$name
|
||||||
set -e ___fish_git_prompt_color_{$name}_done
|
set -e ___fish_git_prompt_color_{$name}_done
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue