|
@@ -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[@]} )
|