aboutsummaryrefslogtreecommitdiffhomepage
path: root/share
diff options
context:
space:
mode:
authorGravatar Fabian Homborg <FHomborg@gmail.com>2016-05-29 14:10:10 +0200
committerGravatar Fabian Homborg <FHomborg@gmail.com>2016-05-29 14:10:10 +0200
commitf23464001f40a52f2a7aa84a9c16c0fed3e3c3ca (patch)
tree5cb72e122378e14fa11325ec91fadb14ee71b7f2 /share
parent0882e0cb9550e1f12c69f51032241158c6148e03 (diff)
Indent __fish_git_prompt
Diffstat (limited to 'share')
-rw-r--r--share/functions/__fish_git_prompt.fish1019
1 files changed, 512 insertions, 507 deletions
diff --git a/share/functions/__fish_git_prompt.fish b/share/functions/__fish_git_prompt.fish
index 909dd6bd..9591ef38 100644
--- a/share/functions/__fish_git_prompt.fish
+++ b/share/functions/__fish_git_prompt.fish
@@ -169,400 +169,405 @@
# flags Defaults to --bold blue
function __fish_git_prompt_show_upstream --description "Helper function for __fish_git_prompt"
- set -l show_upstream $__fish_git_prompt_showupstream
- set -l svn_prefix # For better SVN upstream information
- set -l informative
-
- set -l svn_url_pattern
- set -l count
- set -l upstream git
- set -l verbose
- set -l name
-
- # Default to informative if show_informative_status is set
- if test -n "$__fish_git_prompt_show_informative_status"
- set informative 1
- end
-
- set -l svn_remote
- # get some config options from git-config
- command git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' ^/dev/null | while read -lz key value
- switch $key
- case bash.showupstream
- set show_upstream $value
- test -n "$show_upstream"; or return
- case svn-remote.'*'.url
- set svn_remote $svn_remote $value
- # Avoid adding \| to the beginning to avoid needing #?? later
- if test -n "$svn_url_pattern"
- set svn_url_pattern $svn_url_pattern"|$value"
- else
- set svn_url_pattern $value
- end
- set upstream svn+git # default upstream is SVN if available, else git
-
- # Save the config key (without .url) for later use
- set -l remote_prefix (string replace -r '\.url$' '' -- $key)
- set svn_prefix $svn_prefix $remote_prefix
- end
- end
-
- # parse configuration variables
- # and clear informative default when needed
- for option in $show_upstream
- switch $option
- case git svn
- set upstream $option
- set -e informative
- case verbose
- set verbose 1
- set -e informative
- case informative
- set informative 1
- case name
- set name 1
- case none
- return
- end
- end
-
- # Find our upstream
- switch $upstream
- case git
- set upstream '@{upstream}'
- case svn\*
- # get the upstream from the 'git-svn-id: ...' in a commit message
- # (git-svn uses essentially the same procedure internally)
- set -l svn_upstream (git log --first-parent -1 --grep="^git-svn-id: \($svn_url_pattern\)" ^/dev/null)
- if test (count $svn_upstream) -ne 0
- echo $svn_upstream[-1] | read -l __ svn_upstream __
- set svn_upstream (string replace -r '@.*' '' -- $svn_upstream)
- set -l cur_prefix
- for i in (seq (count $svn_remote))
- set -l remote $svn_remote[$i]
- set -l mod_upstream (string replace "$remote" "" -- $svn_upstream)
- if test "$svn_upstream" != "$mod_upstream"
- # we found a valid remote
- set svn_upstream $mod_upstream
- set cur_prefix $svn_prefix[$i]
- break
- end
- end
-
- if test -z "$svn_upstream"
- # default branch name for checkouts with no layout:
- if test -n "$GIT_SVN_ID"
- set upstream $GIT_SVN_ID
- else
- set upstream git-svn
- end
- else
- set upstream (string replace '/branches' '' -- $svn_upstream | string replace -a '/' '')
-
- # Use fetch config to fix upstream
- set -l fetch_val (command git config "$cur_prefix".fetch)
- if test -n "$fetch_val"
- set -l IFS :
- echo "$fetch_val" | read -l trunk pattern
- set upstream (string replace -r -- "/$trunk\$" '' $pattern) /$upstream
- end
- end
- else if test $upstream = svn+git
- set upstream '@{upstream}'
- end
- end
-
- # Find how many commits we are ahead/behind our upstream
- set count (command git rev-list --count --left-right $upstream...HEAD ^/dev/null)
-
- # calculate the result
- if test -n "$verbose"
- # Verbose has a space by default
- set -l prefix "$___fish_git_prompt_char_upstream_prefix"
- # Using two underscore version to check if user explicitly set to nothing
- if not set -q __fish_git_prompt_char_upstream_prefix
- set -l prefix " "
- end
-
- echo $count | read -l behind ahead
- switch "$count"
- case '' # no upstream
- case "0 0" # equal to upstream
- echo "$prefix$___fish_git_prompt_char_upstream_equal"
- case "0 *" # ahead of upstream
- echo "$prefix$___fish_git_prompt_char_upstream_ahead$ahead"
- case "* 0" # behind upstream
- echo "$prefix$___fish_git_prompt_char_upstream_behind$behind"
- case '*' # diverged from upstream
- echo "$prefix$___fish_git_prompt_char_upstream_diverged$ahead-$behind"
- end
- if test -n "$count" -a -n "$name"
- echo " "(command git rev-parse --abbrev-ref "$upstream" ^/dev/null)
- end
- else if test -n "$informative"
- echo $count | read -l behind ahead
- switch "$count"
- case '' # no upstream
- case "0 0" # equal to upstream
- case "0 *" # ahead of upstream
- echo "$___fish_git_prompt_char_upstream_prefix$___fish_git_prompt_char_upstream_ahead$ahead"
- case "* 0" # behind upstream
- echo "$___fish_git_prompt_char_upstream_prefix$___fish_git_prompt_char_upstream_behind$behind"
- case '*' # diverged from upstream
- echo "$___fish_git_prompt_char_upstream_prefix$___fish_git_prompt_char_upstream_ahead$ahead$___fish_git_prompt_char_upstream_behind$behind"
- end
- else
- switch "$count"
- case '' # no upstream
- case "0 0" # equal to upstream
- echo "$___fish_git_prompt_char_upstream_prefix$___fish_git_prompt_char_upstream_equal"
- case "0 *" # ahead of upstream
- echo "$___fish_git_prompt_char_upstream_prefix$___fish_git_prompt_char_upstream_ahead"
- case "* 0" # behind upstream
- echo "$___fish_git_prompt_char_upstream_prefix$___fish_git_prompt_char_upstream_behind"
- case '*' # diverged from upstream
- echo "$___fish_git_prompt_char_upstream_prefix$___fish_git_prompt_char_upstream_diverged"
- end
- end
+ set -l show_upstream $__fish_git_prompt_showupstream
+ set -l svn_prefix # For better SVN upstream information
+ set -l informative
+
+ set -l svn_url_pattern
+ set -l count
+ set -l upstream git
+ set -l verbose
+ set -l name
+
+ # Default to informative if show_informative_status is set
+ if test -n "$__fish_git_prompt_show_informative_status"
+ set informative 1
+ end
+
+ set -l svn_remote
+ # get some config options from git-config
+ command git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' ^/dev/null | while read -lz key value
+ switch $key
+ case bash.showupstream
+ set show_upstream $value
+ test -n "$show_upstream"
+ or return
+ case svn-remote.'*'.url
+ set svn_remote $svn_remote $value
+ # Avoid adding \| to the beginning to avoid needing #?? later
+ if test -n "$svn_url_pattern"
+ set svn_url_pattern $svn_url_pattern"|$value"
+ else
+ set svn_url_pattern $value
+ end
+ set upstream svn+git # default upstream is SVN if available, else git
+
+ # Save the config key (without .url) for later use
+ set -l remote_prefix (string replace -r '\.url$' '' -- $key)
+ set svn_prefix $svn_prefix $remote_prefix
+ end
+ end
+
+ # parse configuration variables
+ # and clear informative default when needed
+ for option in $show_upstream
+ switch $option
+ case git svn
+ set upstream $option
+ set -e informative
+ case verbose
+ set verbose 1
+ set -e informative
+ case informative
+ set informative 1
+ case name
+ set name 1
+ case none
+ return
+ end
+ end
+
+ # Find our upstream
+ switch $upstream
+ case git
+ set upstream '@{upstream}'
+ case svn\*
+ # get the upstream from the 'git-svn-id: ...' in a commit message
+ # (git-svn uses essentially the same procedure internally)
+ set -l svn_upstream (git log --first-parent -1 --grep="^git-svn-id: \($svn_url_pattern\)" ^/dev/null)
+ if test (count $svn_upstream) -ne 0
+ echo $svn_upstream[-1] | read -l __ svn_upstream __
+ set svn_upstream (string replace -r '@.*' '' -- $svn_upstream)
+ set -l cur_prefix
+ for i in (seq (count $svn_remote))
+ set -l remote $svn_remote[$i]
+ set -l mod_upstream (string replace "$remote" "" -- $svn_upstream)
+ if test "$svn_upstream" != "$mod_upstream"
+ # we found a valid remote
+ set svn_upstream $mod_upstream
+ set cur_prefix $svn_prefix[$i]
+ break
+ end
+ end
+
+ if test -z "$svn_upstream"
+ # default branch name for checkouts with no layout:
+ if test -n "$GIT_SVN_ID"
+ set upstream $GIT_SVN_ID
+ else
+ set upstream git-svn
+ end
+ else
+ set upstream (string replace '/branches' '' -- $svn_upstream | string replace -a '/' '')
+
+ # Use fetch config to fix upstream
+ set -l fetch_val (command git config "$cur_prefix".fetch)
+ if test -n "$fetch_val"
+ set -l IFS :
+ echo "$fetch_val" | read -l trunk pattern
+ set upstream (string replace -r -- "/$trunk\$" '' $pattern) /$upstream
+ end
+ end
+ else if test $upstream = svn+git
+ set upstream '@{upstream}'
+ end
+ end
+
+ # Find how many commits we are ahead/behind our upstream
+ set count (command git rev-list --count --left-right $upstream...HEAD ^/dev/null)
+
+ # calculate the result
+ if test -n "$verbose"
+ # Verbose has a space by default
+ set -l prefix "$___fish_git_prompt_char_upstream_prefix"
+ # Using two underscore version to check if user explicitly set to nothing
+ if not set -q __fish_git_prompt_char_upstream_prefix
+ set -l prefix " "
+ end
+
+ echo $count | read -l behind ahead
+ switch "$count"
+ case '' # no upstream
+ case "0 0" # equal to upstream
+ echo "$prefix$___fish_git_prompt_char_upstream_equal"
+ case "0 *" # ahead of upstream
+ echo "$prefix$___fish_git_prompt_char_upstream_ahead$ahead"
+ case "* 0" # behind upstream
+ echo "$prefix$___fish_git_prompt_char_upstream_behind$behind"
+ case '*' # diverged from upstream
+ echo "$prefix$___fish_git_prompt_char_upstream_diverged$ahead-$behind"
+ end
+ if test -n "$count" -a -n "$name"
+ echo " "(command git rev-parse --abbrev-ref "$upstream" ^/dev/null)
+ end
+ else if test -n "$informative"
+ echo $count | read -l behind ahead
+ switch "$count"
+ case '' # no upstream
+ case "0 0" # equal to upstream
+ case "0 *" # ahead of upstream
+ echo "$___fish_git_prompt_char_upstream_prefix$___fish_git_prompt_char_upstream_ahead$ahead"
+ case "* 0" # behind upstream
+ echo "$___fish_git_prompt_char_upstream_prefix$___fish_git_prompt_char_upstream_behind$behind"
+ case '*' # diverged from upstream
+ echo "$___fish_git_prompt_char_upstream_prefix$___fish_git_prompt_char_upstream_ahead$ahead$___fish_git_prompt_char_upstream_behind$behind"
+ end
+ else
+ switch "$count"
+ case '' # no upstream
+ case "0 0" # equal to upstream
+ echo "$___fish_git_prompt_char_upstream_prefix$___fish_git_prompt_char_upstream_equal"
+ case "0 *" # ahead of upstream
+ echo "$___fish_git_prompt_char_upstream_prefix$___fish_git_prompt_char_upstream_ahead"
+ case "* 0" # behind upstream
+ echo "$___fish_git_prompt_char_upstream_prefix$___fish_git_prompt_char_upstream_behind"
+ case '*' # diverged from upstream
+ echo "$___fish_git_prompt_char_upstream_prefix$___fish_git_prompt_char_upstream_diverged"
+ end
+ end
end
function __fish_git_prompt --description "Prompt function for Git"
- # If git isn't installed, there's nothing we can do
- # Return 1 so the calling prompt can deal with it
- if not command -s git >/dev/null
- return 1
- end
- set -l repo_info (command git rev-parse --git-dir --is-inside-git-dir --is-bare-repository --is-inside-work-tree HEAD ^/dev/null)
- test -n "$repo_info"; or return
-
- set -l git_dir $repo_info[1]
- set -l inside_gitdir $repo_info[2]
- set -l bare_repo $repo_info[3]
- set -l inside_worktree $repo_info[4]
- set -q repo_info[5]; and set -l sha $repo_info[5]
-
- set -l rbc (__fish_git_prompt_operation_branch_bare $repo_info)
- set -l r $rbc[1] # current operation
- set -l b $rbc[2] # current branch
- set -l detached $rbc[3]
- set -l w #dirty working directory
- set -l i #staged changes
- set -l s #stashes
- set -l u #untracked
- set -l c $rbc[4] # bare repository
- set -l p #upstream
- set -l informative_status
-
- __fish_git_prompt_validate_chars
- __fish_git_prompt_validate_colors
-
- set -l space "$___fish_git_prompt_color$___fish_git_prompt_char_stateseparator$___fish_git_prompt_color_done"
-
- if test "true" = $inside_worktree
- if test -n "$__fish_git_prompt_show_informative_status"
- set informative_status "$space"(__fish_git_prompt_informative_status)
- else
- if test -n "$__fish_git_prompt_showdirtystate"
- set -l config (command git config --bool bash.showDirtyState)
- if test "$config" != "false"
- set w (__fish_git_prompt_dirty)
- set i (__fish_git_prompt_staged $sha)
- end
- end
-
- if test -n "$__fish_git_prompt_showstashstate" -a -r $git_dir/refs/stash
- set s $___fish_git_prompt_char_stashstate
- end
-
- if test -n "$__fish_git_prompt_showuntrackedfiles"
- set -l config (command git config --bool bash.showUntrackedFiles)
- if test "$config" != false
- if command git ls-files --others --exclude-standard --error-unmatch -- '*' >/dev/null ^/dev/null
- set u $___fish_git_prompt_char_untrackedfiles
- end
- end
- end
- end
-
- if test -n "$__fish_git_prompt_showupstream" -o "$__fish_git_prompt_show_informative_status"
- set p (__fish_git_prompt_show_upstream)
- end
- end
-
- 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"
- set w "$___fish_git_prompt_color_dirtystate$w$___fish_git_prompt_color_dirtystate_done"
- end
- if test -n "$i"
- set i "$___fish_git_prompt_color_stagedstate$i$___fish_git_prompt_color_stagedstate_done"
- end
- if test -n "$s"
- set s "$___fish_git_prompt_color_stashstate$s$___fish_git_prompt_color_stashstate_done"
- end
- if test -n "$u"
- set u "$___fish_git_prompt_color_untrackedfiles$u$___fish_git_prompt_color_untrackedfiles_done"
- end
- set b (string replace refs/heads/ '' -- $b)
- if test -n "$b"
- set b "$branch_color$b$branch_done"
- end
- if test -n "$c"
- set c "$___fish_git_prompt_color_bare$c$___fish_git_prompt_color_bare_done"
- end
- if test -n "$r"
- set r "$___fish_git_prompt_color_merging$r$___fish_git_prompt_color_merging_done"
- end
- if test -n "$p"
- set p "$___fish_git_prompt_color_upstream$p$___fish_git_prompt_color_upstream_done"
- end
-
- # Formatting
- set -l f "$w$i$s$u"
- if test -n "$f"
- set f "$space$f"
- end
- set -l format $argv[1]
- if test -z "$format"
- set format " (%s)"
- end
-
- printf "%s$format%s" "$___fish_git_prompt_color_prefix" "$___fish_git_prompt_color_prefix_done$c$b$f$r$p$informative_status$___fish_git_prompt_color_suffix" "$___git_ps_color_suffix_done"
+ # If git isn't installed, there's nothing we can do
+ # Return 1 so the calling prompt can deal with it
+ if not command -s git >/dev/null
+ return 1
+ end
+ set -l repo_info (command git rev-parse --git-dir --is-inside-git-dir --is-bare-repository --is-inside-work-tree HEAD ^/dev/null)
+ test -n "$repo_info"
+ or return
+
+ set -l git_dir $repo_info[1]
+ set -l inside_gitdir $repo_info[2]
+ set -l bare_repo $repo_info[3]
+ set -l inside_worktree $repo_info[4]
+ set -q repo_info[5]
+ and set -l sha $repo_info[5]
+
+ set -l rbc (__fish_git_prompt_operation_branch_bare $repo_info)
+ set -l r $rbc[1] # current operation
+ set -l b $rbc[2] # current branch
+ set -l detached $rbc[3]
+ set -l w #dirty working directory
+ set -l i #staged changes
+ set -l s #stashes
+ set -l u #untracked
+ set -l c $rbc[4] # bare repository
+ set -l p #upstream
+ set -l informative_status
+
+ __fish_git_prompt_validate_chars
+ __fish_git_prompt_validate_colors
+
+ set -l space "$___fish_git_prompt_color$___fish_git_prompt_char_stateseparator$___fish_git_prompt_color_done"
+
+ if test "true" = $inside_worktree
+ if test -n "$__fish_git_prompt_show_informative_status"
+ set informative_status "$space"(__fish_git_prompt_informative_status)
+ else
+ if test -n "$__fish_git_prompt_showdirtystate"
+ set -l config (command git config --bool bash.showDirtyState)
+ if test "$config" != "false"
+ set w (__fish_git_prompt_dirty)
+ set i (__fish_git_prompt_staged $sha)
+ end
+ end
+
+ if test -n "$__fish_git_prompt_showstashstate" -a -r $git_dir/refs/stash
+ set s $___fish_git_prompt_char_stashstate
+ end
+
+ if test -n "$__fish_git_prompt_showuntrackedfiles"
+ set -l config (command git config --bool bash.showUntrackedFiles)
+ if test "$config" != false
+ if command git ls-files --others --exclude-standard --error-unmatch -- '*' >/dev/null ^/dev/null
+ set u $___fish_git_prompt_char_untrackedfiles
+ end
+ end
+ end
+ end
+
+ if test -n "$__fish_git_prompt_showupstream" -o "$__fish_git_prompt_show_informative_status"
+ set p (__fish_git_prompt_show_upstream)
+ end
+ end
+
+ 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"
+ set w "$___fish_git_prompt_color_dirtystate$w$___fish_git_prompt_color_dirtystate_done"
+ end
+ if test -n "$i"
+ set i "$___fish_git_prompt_color_stagedstate$i$___fish_git_prompt_color_stagedstate_done"
+ end
+ if test -n "$s"
+ set s "$___fish_git_prompt_color_stashstate$s$___fish_git_prompt_color_stashstate_done"
+ end
+ if test -n "$u"
+ set u "$___fish_git_prompt_color_untrackedfiles$u$___fish_git_prompt_color_untrackedfiles_done"
+ end
+ set b (string replace refs/heads/ '' -- $b)
+ if test -n "$b"
+ set b "$branch_color$b$branch_done"
+ end
+ if test -n "$c"
+ set c "$___fish_git_prompt_color_bare$c$___fish_git_prompt_color_bare_done"
+ end
+ if test -n "$r"
+ set r "$___fish_git_prompt_color_merging$r$___fish_git_prompt_color_merging_done"
+ end
+ if test -n "$p"
+ set p "$___fish_git_prompt_color_upstream$p$___fish_git_prompt_color_upstream_done"
+ end
+
+ # Formatting
+ set -l f "$w$i$s$u"
+ if test -n "$f"
+ set f "$space$f"
+ end
+ set -l format $argv[1]
+ if test -z "$format"
+ set format " (%s)"
+ end
+
+ printf "%s$format%s" "$___fish_git_prompt_color_prefix" "$___fish_git_prompt_color_prefix_done$c$b$f$r$p$informative_status$___fish_git_prompt_color_suffix" "$___git_ps_color_suffix_done"
end
### helper functions
function __fish_git_prompt_staged --description "__fish_git_prompt helper, tells whether or not the current branch has staged files"
- set -l sha $argv[1]
+ set -l sha $argv[1]
- set -l staged
+ set -l staged
- if test -n "$sha"
- command git diff-index --cached --quiet HEAD --; or set staged $___fish_git_prompt_char_stagedstate
- else
- set staged $___fish_git_prompt_char_invalidstate
- end
- echo $staged
+ if test -n "$sha"
+ command git diff-index --cached --quiet HEAD --
+ or set staged $___fish_git_prompt_char_stagedstate
+ else
+ set staged $___fish_git_prompt_char_invalidstate
+ end
+ echo $staged
end
function __fish_git_prompt_dirty --description "__fish_git_prompt helper, tells whether or not the current branch has tracked, modified files"
- set -l dirty
-
- set -l os
- command git diff --no-ext-diff --quiet --exit-code
- set os $status
- if test $os -ne 0
- set dirty $___fish_git_prompt_char_dirtystate
- end
- echo $dirty
+ set -l dirty
+
+ set -l os
+ command git diff --no-ext-diff --quiet --exit-code
+ set os $status
+ if test $os -ne 0
+ set dirty $___fish_git_prompt_char_dirtystate
+ end
+ echo $dirty
end
set -g ___fish_git_prompt_status_order stagedstate invalidstate dirtystate untrackedfiles
-function __fish_git_prompt_informative_status
+function __fish_git_prompt_informative_status
- set -l changedFiles (command git diff --name-status | cut -c 1-2)
- set -l stagedFiles (command git diff --staged --name-status | cut -c 1-2)
+ set -l changedFiles (command git diff --name-status | cut -c 1-2)
+ set -l stagedFiles (command git diff --staged --name-status | cut -c 1-2)
- set -l dirtystate (math (count $changedFiles) - (count (echo $changedFiles | grep "U")))
- set -l invalidstate (count (echo $stagedFiles | grep "U"))
- set -l stagedstate (math (count $stagedFiles) - $invalidstate)
- set -l untrackedfiles (count (command git ls-files --others --exclude-standard))
+ set -l dirtystate (math (count $changedFiles) - (count (echo $changedFiles | grep "U")))
+ set -l invalidstate (count (echo $stagedFiles | grep "U"))
+ set -l stagedstate (math (count $stagedFiles) - $invalidstate)
+ set -l untrackedfiles (count (command git ls-files --others --exclude-standard))
- set -l info
+ set -l info
- if [ (math $dirtystate + $invalidstate + $stagedstate + $untrackedfiles) = 0 ]
- set info $___fish_git_prompt_color_cleanstate$___fish_git_prompt_char_cleanstate$___fish_git_prompt_color_cleanstate_done
- else
- for i in $___fish_git_prompt_status_order
- if [ $$i != "0" ]
- set -l color_var ___fish_git_prompt_color_$i
- set -l color_done_var ___fish_git_prompt_color_{$i}_done
- set -l symbol_var ___fish_git_prompt_char_$i
+ if [ (math $dirtystate + $invalidstate + $stagedstate + $untrackedfiles) = 0 ]
+ set info $___fish_git_prompt_color_cleanstate$___fish_git_prompt_char_cleanstate$___fish_git_prompt_color_cleanstate_done
+ else
+ for i in $___fish_git_prompt_status_order
+ if [ $$i != "0" ]
+ set -l color_var ___fish_git_prompt_color_$i
+ set -l color_done_var ___fish_git_prompt_color_{$i}_done
+ set -l symbol_var ___fish_git_prompt_char_$i
- set -l color $$color_var
- set -l color_done $$color_done_var
- set -l symbol $$symbol_var
+ set -l color $$color_var
+ set -l color_done $$color_done_var
+ set -l symbol $$symbol_var
- set -l count
+ set -l count
- if not set -q __fish_git_prompt_hide_$i
- set count $$i
- end
+ if not set -q __fish_git_prompt_hide_$i
+ set count $$i
+ end
- set info "$info$color$symbol$count$color_done"
- end
- end
- end
+ set info "$info$color$symbol$count$color_done"
+ end
+ end
+ end
- echo $info
+ echo $info
end
# Keeping these together avoids many duplicated checks
function __fish_git_prompt_operation_branch_bare --description "__fish_git_prompt helper, returns the current Git operation and branch"
- # This function is passed the full repo_info array
- set -l git_dir $argv[1]
- set -l inside_gitdir $argv[2]
- set -l bare_repo $argv[3]
- set -q argv[5]; and set -l sha $argv[5]
-
- set -l branch
- set -l operation
- set -l detached no
- set -l bare
- set -l step
- set -l total
- set -l os
-
- if test -d $git_dir/rebase-merge
- set branch (cat $git_dir/rebase-merge/head-name ^/dev/null)
- set step (cat $git_dir/rebase-merge/msgnum ^/dev/null)
- set total (cat $git_dir/rebase-merge/end ^/dev/null)
- if test -f $git_dir/rebase-merge/interactive
- set operation "|REBASE-i"
- else
- set operation "|REBASE-m"
- end
- else
- if test -d $git_dir/rebase-apply
- set step (cat $git_dir/rebase-apply/next ^/dev/null)
- set total (cat $git_dir/rebase-apply/last ^/dev/null)
- if test -f $git_dir/rebase-apply/rebasing
- set branch (cat $git_dir/rebase-apply/head-name ^/dev/null)
- set operation "|REBASE"
- else if test -f $git_dir/rebase-apply/applying
- set operation "|AM"
- else
- set operation "|AM/REBASE"
- end
- else if test -f $git_dir/MERGE_HEAD
- set operation "|MERGING"
- else if test -f $git_dir/CHERRY_PICK_HEAD
- set operation "|CHERRY-PICKING"
- else if test -f $git_dir/REVERT_HEAD
- set operation "|REVERTING"
- else if test -f $git_dir/BISECT_LOG
- set operation "|BISECTING"
- end
- end
-
- if test -n "$step" -a -n "$total"
- set operation "$operation $step/$total"
- end
-
- if test -z "$branch"
- set branch (command git symbolic-ref HEAD ^/dev/null; set os $status)
- if test $os -ne 0
- set detached yes
- set branch (switch "$__fish_git_prompt_describe_style"
+ # This function is passed the full repo_info array
+ set -l git_dir $argv[1]
+ set -l inside_gitdir $argv[2]
+ set -l bare_repo $argv[3]
+ set -q argv[5]
+ and set -l sha $argv[5]
+
+ set -l branch
+ set -l operation
+ set -l detached no
+ set -l bare
+ set -l step
+ set -l total
+ set -l os
+
+ if test -d $git_dir/rebase-merge
+ set branch (cat $git_dir/rebase-merge/head-name ^/dev/null)
+ set step (cat $git_dir/rebase-merge/msgnum ^/dev/null)
+ set total (cat $git_dir/rebase-merge/end ^/dev/null)
+ if test -f $git_dir/rebase-merge/interactive
+ set operation "|REBASE-i"
+ else
+ set operation "|REBASE-m"
+ end
+ else
+ if test -d $git_dir/rebase-apply
+ set step (cat $git_dir/rebase-apply/next ^/dev/null)
+ set total (cat $git_dir/rebase-apply/last ^/dev/null)
+ if test -f $git_dir/rebase-apply/rebasing
+ set branch (cat $git_dir/rebase-apply/head-name ^/dev/null)
+ set operation "|REBASE"
+ else if test -f $git_dir/rebase-apply/applying
+ set operation "|AM"
+ else
+ set operation "|AM/REBASE"
+ end
+ else if test -f $git_dir/MERGE_HEAD
+ set operation "|MERGING"
+ else if test -f $git_dir/CHERRY_PICK_HEAD
+ set operation "|CHERRY-PICKING"
+ else if test -f $git_dir/REVERT_HEAD
+ set operation "|REVERTING"
+ else if test -f $git_dir/BISECT_LOG
+ set operation "|BISECTING"
+ end
+ end
+
+ if test -n "$step" -a -n "$total"
+ set operation "$operation $step/$total"
+ end
+
+ if test -z "$branch"
+ set branch (command git symbolic-ref HEAD ^/dev/null; set os $status)
+ if test $os -ne 0
+ set detached yes
+ set branch (switch "$__fish_git_prompt_describe_style"
case contains
command git describe --contains HEAD
case branch
@@ -572,185 +577,185 @@ function __fish_git_prompt_operation_branch_bare --description "__fish_git_promp
case default '*'
command git describe --tags --exact-match HEAD
end ^/dev/null; set os $status)
- if test $os -ne 0
- # Shorten the sha ourselves to 8 characters - this should be good for most repositories,
- # and even for large ones it should be good for most commits
- if set -q sha
- set branch (string match -r '^.{8}' -- $sha)...
- else
- set branch unknown
- end
- end
- set branch "($branch)"
- end
- end
-
- if test "true" = $inside_gitdir
- if test "true" = $bare_repo
- set bare "BARE:"
- else
- # Let user know they're inside the git dir of a non-bare repo
- set branch "GIT_DIR!"
- end
- end
-
- echo $operation
- echo $branch
- echo $detached
- echo $bare
+ if test $os -ne 0
+ # Shorten the sha ourselves to 8 characters - this should be good for most repositories,
+ # and even for large ones it should be good for most commits
+ if set -q sha
+ set branch (string match -r '^.{8}' -- $sha)...
+ else
+ set branch unknown
+ end
+ end
+ set branch "($branch)"
+ end
+ end
+
+ if test "true" = $inside_gitdir
+ if test "true" = $bare_repo
+ set bare "BARE:"
+ else
+ # Let user know they're inside the git dir of a non-bare repo
+ set branch "GIT_DIR!"
+ end
+ end
+
+ echo $operation
+ echo $branch
+ echo $detached
+ echo $bare
end
function __fish_git_prompt_set_char
- set -l user_variable_name "$argv[1]"
- set -l char $argv[2]
- set -l user_variable $$user_variable_name
-
- if test (count $argv) -ge 3
- if test -n "$__fish_git_prompt_show_informative_status"
- set char $argv[3]
- end
- end
-
- set -l variable _$user_variable_name
- set -l variable_done "$variable"_done
-
- if not set -q $variable
- set -g $variable (set -q $user_variable_name; and echo $user_variable; or echo $char)
- end
+ set -l user_variable_name "$argv[1]"
+ set -l char $argv[2]
+ set -l user_variable $$user_variable_name
+
+ if test (count $argv) -ge 3
+ if test -n "$__fish_git_prompt_show_informative_status"
+ set char $argv[3]
+ end
+ end
+
+ set -l variable _$user_variable_name
+ set -l variable_done "$variable"_done
+
+ if not set -q $variable
+ set -g $variable (set -q $user_variable_name; and echo $user_variable; or echo $char)
+ end
end
function __fish_git_prompt_validate_chars --description "__fish_git_prompt helper, checks char variables"
- __fish_git_prompt_set_char __fish_git_prompt_char_cleanstate '✔'
- __fish_git_prompt_set_char __fish_git_prompt_char_dirtystate '*' '✚'
- __fish_git_prompt_set_char __fish_git_prompt_char_invalidstate '#' '✖'
- __fish_git_prompt_set_char __fish_git_prompt_char_stagedstate '+' '●'
- __fish_git_prompt_set_char __fish_git_prompt_char_stashstate '$'
- __fish_git_prompt_set_char __fish_git_prompt_char_stateseparator ' ' '|'
- __fish_git_prompt_set_char __fish_git_prompt_char_untrackedfiles '%' '…'
- __fish_git_prompt_set_char __fish_git_prompt_char_upstream_ahead '>' '↑'
- __fish_git_prompt_set_char __fish_git_prompt_char_upstream_behind '<' '↓'
- __fish_git_prompt_set_char __fish_git_prompt_char_upstream_diverged '<>'
- __fish_git_prompt_set_char __fish_git_prompt_char_upstream_equal '='
- __fish_git_prompt_set_char __fish_git_prompt_char_upstream_prefix ''
+ __fish_git_prompt_set_char __fish_git_prompt_char_cleanstate '✔'
+ __fish_git_prompt_set_char __fish_git_prompt_char_dirtystate '*' '✚'
+ __fish_git_prompt_set_char __fish_git_prompt_char_invalidstate '#' '✖'
+ __fish_git_prompt_set_char __fish_git_prompt_char_stagedstate '+' '●'
+ __fish_git_prompt_set_char __fish_git_prompt_char_stashstate '$'
+ __fish_git_prompt_set_char __fish_git_prompt_char_stateseparator ' ' '|'
+ __fish_git_prompt_set_char __fish_git_prompt_char_untrackedfiles '%' '…'
+ __fish_git_prompt_set_char __fish_git_prompt_char_upstream_ahead '>' '↑'
+ __fish_git_prompt_set_char __fish_git_prompt_char_upstream_behind '<' '↓'
+ __fish_git_prompt_set_char __fish_git_prompt_char_upstream_diverged '<>'
+ __fish_git_prompt_set_char __fish_git_prompt_char_upstream_equal '='
+ __fish_git_prompt_set_char __fish_git_prompt_char_upstream_prefix ''
end
function __fish_git_prompt_set_color
- set -l user_variable_name "$argv[1]"
- set -l user_variable $$user_variable_name
- set -l user_variable_bright
-
- set -l default default_done
- switch (count $argv)
- case 1 # No defaults given, use prompt color
- set default $___fish_git_prompt_color
- set default_done $___fish_git_prompt_color_done
- case 2 # One default given, use normal for done
- set default "$argv[2]"
- set default_done (set_color normal)
- case 3 # Both defaults given
- set default "$argv[2]"
- set default_done "$argv[3]"
- end
-
- set -l variable _$user_variable_name
- set -l variable_done "$variable"_done
-
- if not set -q $variable
- if test -n "$user_variable"
- set -g $variable (set_color $user_variable)
- set -g $variable_done (set_color normal)
- else
- set -g $variable $default
- set -g $variable_done $default_done
- end
- end
+ set -l user_variable_name "$argv[1]"
+ set -l user_variable $$user_variable_name
+ set -l user_variable_bright
+
+ set -l default default_done
+ switch (count $argv)
+ case 1 # No defaults given, use prompt color
+ set default $___fish_git_prompt_color
+ set default_done $___fish_git_prompt_color_done
+ case 2 # One default given, use normal for done
+ set default "$argv[2]"
+ set default_done (set_color normal)
+ case 3 # Both defaults given
+ set default "$argv[2]"
+ set default_done "$argv[3]"
+ end
+
+ set -l variable _$user_variable_name
+ set -l variable_done "$variable"_done
+
+ if not set -q $variable
+ if test -n "$user_variable"
+ set -g $variable (set_color $user_variable)
+ set -g $variable_done (set_color normal)
+ else
+ set -g $variable $default
+ set -g $variable_done $default_done
+ end
+ end
end
function __fish_git_prompt_validate_colors --description "__fish_git_prompt helper, checks color variables"
- # Base color defaults to nothing (must be done first)
- __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_suffix
- __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_cleanstate
- __fish_git_prompt_set_color __fish_git_prompt_color_invalidstate
- __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
+ # Base color defaults to nothing (must be done first)
+ __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_suffix
+ __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_cleanstate
+ __fish_git_prompt_set_color __fish_git_prompt_color_invalidstate
+ __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
set -l varargs
for var in repaint describe_style show_informative_status showdirtystate showstashstate showuntrackedfiles showupstream
- set varargs $varargs --on-variable __fish_git_prompt_$var
+ set varargs $varargs --on-variable __fish_git_prompt_$var
end
function __fish_git_prompt_repaint $varargs --description "Event handler, repaints prompt when functionality changes"
- if status --is-interactive
- if test $argv[3] = __fish_git_prompt_show_informative_status
- # Clear characters that have different defaults with/without informative status
- for name in cleanstate dirtystate invalidstate stagedstate stateseparator untrackedfiles upstream_ahead upstream_behind
- set -e ___fish_git_prompt_char_$name
- end
- end
-
- commandline -f repaint ^/dev/null
- end
+ if status --is-interactive
+ if test $argv[3] = __fish_git_prompt_show_informative_status
+ # Clear characters that have different defaults with/without informative status
+ for name in cleanstate dirtystate invalidstate stagedstate stateseparator untrackedfiles upstream_ahead upstream_behind
+ set -e ___fish_git_prompt_char_$name
+ end
+ end
+
+ commandline -f repaint ^/dev/null
+ end
end
set -l varargs
for var in '' _prefix _suffix _bare _merging _cleanstate _invalidstate _upstream _flags _branch _dirtystate _stagedstate _branch_detached _stashstate _untrackedfiles
- set varargs $varargs --on-variable __fish_git_prompt_color$var
+ set varargs $varargs --on-variable __fish_git_prompt_color$var
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"
- if status --is-interactive
- set -l var $argv[3]
- set -e _$var
- set -e _{$var}_done
- 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
- 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}_done
- end
- end
- commandline -f repaint ^/dev/null
- end
+ if status --is-interactive
+ set -l var $argv[3]
+ set -e _$var
+ set -e _{$var}_done
+ 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
+ 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}_done
+ end
+ end
+ commandline -f repaint ^/dev/null
+ end
end
set -l varargs
for var in cleanstate dirtystate invalidstate stagedstate stashstate stateseparator untrackedfiles upstream_ahead upstream_behind upstream_diverged upstream_equal upstream_prefix
- set varargs $varargs --on-variable __fish_git_prompt_char_$var
+ set varargs $varargs --on-variable __fish_git_prompt_char_$var
end
function __fish_git_prompt_repaint_char $varargs --description "Event handler, repaints prompt when any char changes"
- if status --is-interactive
- set -e _$argv[3]
- commandline -f repaint ^/dev/null
- end
+ if status --is-interactive
+ set -e _$argv[3]
+ commandline -f repaint ^/dev/null
+ end
end