1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-01-17 10:20:55 +01:00

39916 + 39930 + tweak: _git: Complete options and values for -c.

The "$@" in the option-names call is added in order to propagate the new (-S =) arguments.

This bifurcates _git-config() in order to provide completion for

    % git -c <TAB>
    % git -c foo=<TAB>
This commit is contained in:
Daniel Shahaf 2016-11-11 09:59:14 +00:00
parent a62e1640bc
commit df8d219da3
2 changed files with 52 additions and 3 deletions

View file

@ -1,3 +1,8 @@
2016-11-18 Daniel Shahaf <d.s@daniel.shahaf.name>
* 39916 + 39930 + tweak: Completion/Unix/Command/_git: Complete
options and values for -c.
2016-11-17 Peter Stephenson <p.w.stephenson@ntlworld.com>
* 39958: Src/Zle/compctl.c, Src/builtin.c, Src/compat.c,

View file

@ -2031,7 +2031,7 @@ _tig () {
(( $+functions[_git-config] )) ||
_git-config () {
local name_arg value_arg
local curcontext=$curcontext state line expl ret=1
local curcontext=$curcontext state line ret=1
declare -A opt_args
if (( words[(I)--get-regexp] )); then
@ -2087,6 +2087,38 @@ _git-config () {
'(-e --edit --bool --int --bool-or-int --path -z --null --name-only --show-origin)'{-e,--edit}'[open config file for editing]' \
'(2 3 --bool --int --bool-or-int --path -z --null --name-only --show-origin)--get-color[find color setting]: :->gettable-color-option' \
'(2 3 --bool --int --bool-or-int --path -z --null --name-only --show-origin)--get-colorbool[check if color should be used]: :->gettable-colorbool-option' && ret=0
__git_config_option-or-value "$@" && ret=0
return ret
}
(( $+functions[__git_config_option] )) ||
__git_config_option () {
local -A opt_args=()
local -a line=( ${words[CURRENT]%%=*} )
local state=option
__git_config_option-or-value "$@"
}
(( $+functions[__git_config_value] )) ||
__git_config_value () {
local -A opt_args=()
local -a line=( ${words[CURRENT]%%=*} ${words[CURRENT]#*=} )
local state=value
__git_config_option-or-value "$@"
}
# Helper to _git-config(). May be called by other functions, too, provided
# that The caller has set $line, $state, and $opt_args as _git-config() would
# set them:
#
# - set $line[1] to the option name being completed (even if completing an
# option value).
# - set $opt_args to git-config(1) options, as set by _arguments in
# _git-config().
# - set $state as _arguments in _git-config() would set it.
(( $+functions[__git_config_option-or-value] )) ||
__git_config_option-or-value () {
local expl ret
# TODO: Add support for merge.*. (merge driver), diff.*. (diff driver), and filter.*. (filter driver) options
# (see gitattributes(5)).
@ -2843,7 +2875,7 @@ _git-config () {
_describe -t option-names $label \
sections -M 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' -S . -- \
sections_and_options -M 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' -qS . -- \
options -M 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' && ret=0
options -M 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' "$@" && ret=0
;;
(gettable-option)
_wanted git-options expl option compadd -M 'r:|.=* r:|=*' -a - git_present_options && ret=0
@ -7459,7 +7491,7 @@ _git() {
'(- :)--version[display version information]' \
'(- :)--help[display help message]' \
'-C[run as if git was started in given path]: :_directories' \
'*-c[pass configuration parameter to command]:parameter' \
'*-c[pass configuration parameter to command]: :->configuration' \
'--exec-path=-[path containing core git-programs]:: :_directories' \
'(: -)--man-path[print the manpath for the man pages for this version of Git and exit]' \
'(: -)--info-path[print the path where the info files are installed and exit]' \
@ -7490,6 +7522,18 @@ _git() {
fi
fi
;;
(configuration)
if compset -P 1 '*='; then
__git_config_value && ret=0
else
if compset -S '=*'; then
__git_config_option && ret=0 # don't move cursor if we completed just the "foo." in "foo.bar.baz=value"
compstate[to_end]=''
else
__git_config_option -S '=' && ret=0
fi
fi
;;
esac
else
_call_function ret _$service