summaryrefslogtreecommitdiff
path: root/plugins/gitfast
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/gitfast')
-rw-r--r--plugins/gitfast/_git129
-rw-r--r--plugins/gitfast/git-completion.bash73
-rwxr-xr-xplugins/gitfast/update2
3 files changed, 108 insertions, 96 deletions
diff --git a/plugins/gitfast/_git b/plugins/gitfast/_git
index aaea581d5..988f5b1c6 100644
--- a/plugins/gitfast/_git
+++ b/plugins/gitfast/_git
@@ -45,71 +45,49 @@ fi
local old_complete="$functions[complete]"
functions[complete]=:
+COMP_WORDBREAKS=':'
GIT_SOURCING_ZSH_COMPLETION=y . "$script"
functions[complete]="$old_complete"
+__gitcompadd ()
+{
+ compadd -Q -p "${2-}" -S "${3- }" ${@[4,-1]} -- ${=1} && _ret=0
+}
+
__gitcomp ()
{
emulate -L zsh
local cur_="${3-$cur}"
- case "$cur_" in
- --*=)
- ;;
- --no-*)
- local c IFS=$' \t\n'
- local -a array
- for c in ${=1}; do
- if [[ $c == "--" ]]; then
- continue
- fi
- c="$c${4-}"
- case $c in
- --*=|*.) ;;
- *) c="$c " ;;
- esac
- array+=("$c")
- done
- compset -P '*[=:]'
- compadd -Q -S '' -p "${2-}" -a -- array && _ret=0
- ;;
- *)
- local c IFS=$' \t\n'
- local -a array
- for c in ${=1}; do
- if [[ $c == "--" ]]; then
- c="--no-...${4-}"
- array+=("$c ")
- break
- fi
- c="$c${4-}"
- case $c in
- --*=|*.) ;;
- *) c="$c " ;;
- esac
- array+=("$c")
- done
- compset -P '*[=:]'
- compadd -Q -S '' -p "${2-}" -a -- array && _ret=0
- ;;
- esac
-}
+ [[ "$cur_" == *= ]] && return
-__gitcomp_direct ()
-{
- emulate -L zsh
+ local c IFS=$' \t\n' sfx
+ for c in ${=1}; do
+ if [[ $c == "--" ]]; then
+ [[ "$cur_" == --no-* ]] && continue
+ __gitcompadd "--no-..."
+ break
+ fi
- compset -P '*[=:]'
- compadd -Q -S '' -- ${(f)1} && _ret=0
+ if [[ -z "${4-}" ]]; then
+ case $c in
+ *=) c="${c%=}"; sfx="=" ;;
+ *.) sfx="" ;;
+ *) sfx=" " ;;
+ esac
+ else
+ sfx="$4"
+ fi
+ __gitcompadd "$c" "${2-}" "$sfx" -q
+ done
}
__gitcomp_nl ()
{
emulate -L zsh
- compset -P '*[=:]'
- compadd -Q -S "${4- }" -p "${2-}" -- ${(f)1} && _ret=0
+ IFS=$'\n' __gitcompadd "$1" "${2-}" "${4- }"
}
__gitcomp_file ()
@@ -119,9 +97,14 @@ __gitcomp_file ()
compadd -f -p "${2-}" -- ${(f)1} && _ret=0
}
-__gitcomp_direct_append ()
+__gitcomp_direct ()
{
- __gitcomp_direct "$@"
+ __gitcomp_nl "$1" "" "" ""
+}
+
+__gitcomp_file_direct ()
+{
+ __gitcomp_file "$1" ""
}
__gitcomp_nl_append ()
@@ -129,25 +112,30 @@ __gitcomp_nl_append ()
__gitcomp_nl "$@"
}
-__gitcomp_file_direct ()
+__gitcomp_direct_append ()
{
- __gitcomp_file "$1" ""
+ __gitcomp_direct "$@"
}
_git_zsh ()
{
- __gitcomp "v1.0"
+ __gitcomp "v1.2"
}
__git_complete_command ()
{
emulate -L zsh
+ compset -P '*[=:]'
+
local command="$1"
local completion_func="_git_${command//-/_}"
if (( $+functions[$completion_func] )); then
emulate ksh -c $completion_func
return 0
+ elif emulate ksh -c "__git_support_parseopt_helper $command"; then
+ emulate ksh -c "__git_complete_common $command"
+ return 0
else
return 1
fi
@@ -218,24 +206,27 @@ __git_zsh_main ()
{
local curcontext="$curcontext" state state_descr line
typeset -A opt_args
- local -a orig_words
+ local -a orig_words __git_C_args
orig_words=( ${words[@]} )
_arguments -C \
- '(-p --paginate --no-pager)'{-p,--paginate}'[pipe all output into ''less'']' \
- '(-p --paginate)--no-pager[do not pipe git output into a pager]' \
- '--git-dir=-[set the path to the repository]: :_directories' \
- '--bare[treat the repository as a bare repository]' \
+ '(-p --paginate -P --no-pager)'{-p,--paginate}'[pipe all output into ''less'']' \
+ '(-p --paginate -P --no-pager)'{-P,--no-pager}'[do not pipe git output into a pager]' \
+ '(--bare)--git-dir=[set the path to the repository]: :_directories' \
+ '(--git-dir)--bare[treat the repository as a bare repository]' \
'(- :)--version[prints the git suite version]' \
- '--exec-path=-[path to where your core git programs are installed]:: :_directories' \
- '--html-path[print the path where git''s HTML documentation is installed]' \
- '--info-path[print the path where the Info files are installed]' \
- '--man-path[print the manpath (see `man(1)`) for the man pages]' \
- '--work-tree=-[set the path to the working tree]: :_directories' \
- '--namespace=-[set the git namespace]' \
+ '--exec-path=[path to where your core git programs are installed]: :_directories' \
+ '(- :)--exec-path[print the path where your core git programs are installed]' \
+ '(- :)--html-path[print the path where git''s HTML documentation is installed]' \
+ '(- :)--info-path[print the path where the Info files are installed]' \
+ '(- :)--man-path[print the manpath (see `man(1)`) for the man pages]' \
+ '--work-tree=[set the path to the working tree]: :_directories' \
+ '--namespace=[set the git namespace]:' \
'--no-replace-objects[do not use replacement refs to replace git objects]' \
'(- :)--help[prints the synopsis and a list of the most commonly used commands]: :->arg' \
+ '*-C[run as if git was started in the given path]: :_directories' \
+ '*-c[pass a configuration parameter to the command]: :->config' \
'(-): :->command' \
'(-)*:: :->arg' && return
@@ -249,15 +240,23 @@ __git_zsh_main ()
let _ret || break
done
;;
+ (config)
+ compset -P '*[=:]'
+ emulate ksh -c __git_complete_config_variable_name_and_value
+ ;;
(arg)
local command="${words[1]}" __git_dir
if (( $+opt_args[--bare] )); then
__git_dir='.'
else
- __git_dir=${opt_args[--git-dir]}
+ __git_dir=${~opt_args[--git-dir]}
fi
+ for x in ${(s.:.)opt_args[-C]}; do
+ __git_C_args+=('-C' ${~x})
+ done
+
(( $+opt_args[--help] )) && command='help'
words=( ${orig_words[@]} )
diff --git a/plugins/gitfast/git-completion.bash b/plugins/gitfast/git-completion.bash
index b93706d17..4497a294f 100644
--- a/plugins/gitfast/git-completion.bash
+++ b/plugins/gitfast/git-completion.bash
@@ -45,11 +45,6 @@
# When set to "1" suggest all options, including options which are
# typically hidden (e.g. '--allow-empty' for 'git commit').
-case "$COMP_WORDBREAKS" in
-*:*) : great ;;
-*) COMP_WORDBREAKS="$COMP_WORDBREAKS:"
-esac
-
# Discovers the path to the git repository taking any '--git-dir=<path>' and
# '-C <path>' options into account and stores it in the $__git_repo_path
# variable.
@@ -347,7 +342,7 @@ __gitcomp ()
local cur_="${3-$cur}"
case "$cur_" in
- --*=)
+ *=)
;;
--no-*)
local c i=0 IFS=$' \t\n'
@@ -519,7 +514,7 @@ __gitcomp_builtin ()
local incl="${2-}"
local excl="${3-}"
- local var=__gitcomp_builtin_"${cmd/-/_}"
+ local var=__gitcomp_builtin_"${cmd//-/_}"
local options
eval "options=\${$var-}"
@@ -1231,26 +1226,44 @@ __git_pretty_aliases ()
# __git_aliased_command requires 1 argument
__git_aliased_command ()
{
- local word cmdline=$(__git config --get "alias.$1")
- for word in $cmdline; do
- case "$word" in
- \!gitk|gitk)
- echo "gitk"
- return
- ;;
- \!*) : shell command alias ;;
- -*) : option ;;
- *=*) : setting env ;;
- git) : git itself ;;
- \(\)) : skip parens of shell function definition ;;
- {) : skip start of shell helper function ;;
- :) : skip null command ;;
- \'*) : skip opening quote after sh -c ;;
- *)
- echo "$word"
+ local cur=$1 last list word cmdline
+
+ while [[ -n "$cur" ]]; do
+ if [[ "$list" == *" $cur "* ]]; then
+ # loop detected
return
- esac
+ fi
+
+ cmdline=$(__git config --get "alias.$cur")
+ list=" $cur $list"
+ last=$cur
+ cur=
+
+ for word in $cmdline; do
+ case "$word" in
+ \!gitk|gitk)
+ cur="gitk"
+ break
+ ;;
+ \!*) : shell command alias ;;
+ -*) : option ;;
+ *=*) : setting env ;;
+ git) : git itself ;;
+ \(\)) : skip parens of shell function definition ;;
+ {) : skip start of shell helper function ;;
+ :) : skip null command ;;
+ \'*) : skip opening quote after sh -c ;;
+ *)
+ cur="$word"
+ break
+ esac
+ done
done
+
+ cur=$last
+ if [[ "$cur" != "$1" ]]; then
+ echo "$cur"
+ fi
}
# Check whether one of the given words is present on the command line,
@@ -2723,10 +2736,10 @@ __git_complete_config_variable_name ()
return
;;
branch.*)
- local pfx="${cur%.*}."
- cur_="${cur#*.}"
+ local pfx="${cur_%.*}."
+ cur_="${cur_#*.}"
__gitcomp_direct "$(__git_heads "$pfx" "$cur_" ".")"
- __gitcomp_nl_append $'autoSetupMerge\nautoSetupRebase\n' "$pfx" "$cur_" "$sfx"
+ __gitcomp_nl_append $'autoSetupMerge\nautoSetupRebase\n' "$pfx" "$cur_" "${sfx:- }"
return
;;
guitool.*.*)
@@ -2760,7 +2773,7 @@ __git_complete_config_variable_name ()
local pfx="${cur_%.*}."
cur_="${cur_#*.}"
__git_compute_all_commands
- __gitcomp_nl "$__git_all_commands" "$pfx" "$cur_" "$sfx"
+ __gitcomp_nl "$__git_all_commands" "$pfx" "$cur_" "${sfx:- }"
return
;;
remote.*.*)
@@ -2776,7 +2789,7 @@ __git_complete_config_variable_name ()
local pfx="${cur_%.*}."
cur_="${cur_#*.}"
__gitcomp_nl "$(__git_remotes)" "$pfx" "$cur_" "."
- __gitcomp_nl_append "pushDefault" "$pfx" "$cur_" "$sfx"
+ __gitcomp_nl_append "pushDefault" "$pfx" "$cur_" "${sfx:- }"
return
;;
url.*.*)
diff --git a/plugins/gitfast/update b/plugins/gitfast/update
index d0947e7d8..5311065a1 100755
--- a/plugins/gitfast/update
+++ b/plugins/gitfast/update
@@ -1,7 +1,7 @@
#!/bin/sh
url="https://raw.githubusercontent.com/felipec/git-completion"
-version="1.0"
+version="1.2"
curl -s -o _git "${url}/v${version}/git-completion.zsh" &&
curl -s -o git-completion.bash "${url}/v${version}/git-completion.bash" &&