Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
[PATCH] _git: Complete options and values for -c.
- X-seq: zsh-workers 39916
- From: Daniel Shahaf <d.s@xxxxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxx
- Subject: [PATCH] _git: Complete options and values for -c.
- Date: Fri, 11 Nov 2016 09:59:14 +0000
- Dkim-signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= daniel.shahaf.name; h=date:from:message-id:subject:to :x-me-sender:x-me-sender:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=KlZ DTLUlFObiwhobnjwZi3i1xrI=; b=pZRNGn/VX2wJKUdkipl/2Dj0p8Z8ri/Eep1 Fu23B56eP/dLZWyvZusC9MkaxZPryVcBZhiKACsuvaB1NbG6bYHSDs0IWF+SN2Ik BwFAJLJGgdEInZqSrvrFZaowA7gTBXgCsi45tXhJ0yPBDuaRRMcPHq07bU9CpI4E 62laOnGI=
- Dkim-signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=date:from:message-id:subject:to :x-me-sender:x-me-sender:x-sasl-enc:x-sasl-enc; s=smtpout; bh=Kl ZDTLUlFObiwhobnjwZi3i1xrI=; b=OBpYP/cYs1XBxALFWPh6wF+XZyEn8vKRK6 uZLPbCMsrW7fsprbnD0+zm/sypr9rJ73nZ5iMe4kqcIS0ZgeMc8d+pUKgnWr60Af 3j7JFScWF2gDzcuyNvvPjZOIGg4IAUjtdlIKxb28iyRBn3fecsAGMILed0ebob/D wNo1n/wQ4=
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
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
Messages sorted by:
Reverse Date,
Date,
Thread,
Author