[PATCH] completion: zsh: trivial improvement

Subsystems: the rest

STALE1890d

3 messages, 2 authors, 2021-06-08 · open the first message on its own page

[PATCH] completion: zsh: trivial improvement

From: Felipe Contreras <hidden>
Date: 2021-06-08 02:38:34

$words has basically all the words we need, except the first one: git.

Lets simply add that instead of passing the original, which contains
options we don't want to pass downstream (like --git-dir).

Signed-off-by: Felipe Contreras <redacted>
---
 contrib/completion/git-completion.zsh | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/contrib/completion/git-completion.zsh b/contrib/completion/git-completion.zsh
index cac6f61881..50f89145f3 100644
--- a/contrib/completion/git-completion.zsh
+++ b/contrib/completion/git-completion.zsh
@@ -219,9 +219,6 @@ __git_zsh_main ()
 {
 	local curcontext="$curcontext" state state_descr line
 	typeset -A opt_args
-	local -a orig_words
-
-	orig_words=( ${words[@]} )
 
 	_arguments -C \
 		'(-p --paginate --no-pager)'{-p,--paginate}'[pipe all output into ''less'']' \
@@ -261,7 +258,7 @@ __git_zsh_main ()
 
 		(( $+opt_args[--help] )) && command='help'
 
-		words=( ${orig_words[@]} )
+		words=( git ${words[@]} )
 
 		__git_zsh_bash_func $command
 		;;
-- 
2.32.0.2.g41be0a4e50

Re: [PATCH] completion: zsh: trivial improvement

From: SZEDER Gábor <hidden>
Date: 2021-06-08 05:02:35

On Mon, Jun 07, 2021 at 09:38:07PM -0500, Felipe Contreras wrote:
$words has basically all the words we need, except the first one: git.

Lets simply add that instead of passing the original, which contains
options we don't want to pass downstream (like --git-dir).
In our Bash completion script $words contains all words of the current
command on the command line, including 'git -C tmp -c foo.bar=baz'.

Why should zsh completion behave differently?
quoted hunk
Signed-off-by: Felipe Contreras <redacted>
---
 contrib/completion/git-completion.zsh | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/contrib/completion/git-completion.zsh b/contrib/completion/git-completion.zsh
index cac6f61881..50f89145f3 100644
--- a/contrib/completion/git-completion.zsh
+++ b/contrib/completion/git-completion.zsh
@@ -219,9 +219,6 @@ __git_zsh_main ()
 {
 	local curcontext="$curcontext" state state_descr line
 	typeset -A opt_args
-	local -a orig_words
-
-	orig_words=( ${words[@]} )
 
 	_arguments -C \
 		'(-p --paginate --no-pager)'{-p,--paginate}'[pipe all output into ''less'']' \
@@ -261,7 +258,7 @@ __git_zsh_main ()
 
 		(( $+opt_args[--help] )) && command='help'
 
-		words=( ${orig_words[@]} )
+		words=( git ${words[@]} )
 
 		__git_zsh_bash_func $command
 		;;
-- 
2.32.0.2.g41be0a4e50

Re: [PATCH] completion: zsh: trivial improvement

From: Felipe Contreras <hidden>
Date: 2021-06-08 05:37:41

SZEDER Gábor wrote:
On Mon, Jun 07, 2021 at 09:38:07PM -0500, Felipe Contreras wrote:
quoted
$words has basically all the words we need, except the first one: git.

Lets simply add that instead of passing the original, which contains
options we don't want to pass downstream (like --git-dir).
In our Bash completion script $words contains all words of the current
command on the command line, including 'git -C tmp -c foo.bar=baz'.

Why should zsh completion behave differently?
Because we use the _arguments function [1]. It changes the $words array
and removes all the arguments it was able to parse. All that remains is
that which it didn't understand.

If you do:

  git --git-dir=x show --<tab>

_arguments will remove 'git --git-dir=x'. And there is no point in
passing '--git-dir=x' to _git_show. It provides no useful information,
and it was already processed by __git_zsh_main and __git_dir is set.

__git_main doesn't need to change $words, but it does increase
__git_cmd_idx to match the position of the command.

But since in the zsh case _argments already modified $words, we can just
add 'git' to the start and always use __git_cmd_idx=1.

[1] https://zsh.sourceforge.io/Doc/Release/Completion-System.html#Completion-Functions

-- 
Felipe Contreras
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help