* [PATCH] _git: Complete options and values for -c.
@ 2016-11-11 9:59 Daniel Shahaf
2016-11-13 0:06 ` Daniel Shahaf
0 siblings, 1 reply; 2+ messages in thread
From: Daniel Shahaf @ 2016-11-11 9:59 UTC (permalink / raw)
To: zsh-workers
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>
Cheers,
Daniel
Completion/Unix/Command/_git | 45 +++++++++++++++++++++++++++++++++++++++++---
1 file changed, 42 insertions(+), 3 deletions(-)
diff --git a/Completion/Unix/Command/_git b/Completion/Unix/Command/_git
index 5b9ecb9..5f4dd18 100644
--- a/Completion/Unix/Command/_git
+++ b/Completion/Unix/Command/_git
@@ -2028,7 +2028,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
@@ -2084,6 +2084,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)).
@@ -2840,7 +2872,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
@@ -7473,7 +7505,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]' \
@@ -7504,6 +7536,13 @@ _git() {
fi
fi
;;
+ (configuration)
+ if compset -P 1 '*='; then
+ __git_config_value
+ else
+ __git_config_option -S =
+ fi
+ ;;
esac
else
_call_function ret _$service
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] _git: Complete options and values for -c.
2016-11-11 9:59 [PATCH] _git: Complete options and values for -c Daniel Shahaf
@ 2016-11-13 0:06 ` Daniel Shahaf
0 siblings, 0 replies; 2+ messages in thread
From: Daniel Shahaf @ 2016-11-13 0:06 UTC (permalink / raw)
To: zsh-workers
Daniel Shahaf wrote on Fri, Nov 11, 2016 at 09:59:14 +0000:
> This bifurcates _git-config() in order to provide completion for
>
> % git -c <TAB>
> % git -c foo=<TAB>
Interdiff after feedback by Oliver:
diff --git a/Completion/Unix/Command/_git b/Completion/Unix/Command/_git
index 8e4b6e6..d5a3cfd 100644
--- a/Completion/Unix/Command/_git
+++ b/Completion/Unix/Command/_git
@@ -7527,9 +7527,14 @@ _git() {
;;
(configuration)
if compset -P 1 '*='; then
- __git_config_value
+ __git_config_value && ret=0
else
- __git_config_option -S =
+ if compset -S '=*'; then
+ __git_config_option
+ compstate[to_end]='' && ret=0 # don't move cursor if we completed just the "foo." in "foo.bar.baz=value"
+ else
+ __git_config_option -S '=' && ret=0
+ fi
fi
;;
esac
Known issue: completing «git -c user.em<CURSOR>=foo» inserts "ail."
(properly) but puts cursor to the right of the dot, rather than to its
left.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-11-13 0:08 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-11-11 9:59 [PATCH] _git: Complete options and values for -c Daniel Shahaf
2016-11-13 0:06 ` Daniel Shahaf
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).