All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] completion: exclude previous file arguments in Zsh
@ 2026-10-03 11:22 Fionn via GitGitGadget
  2026-10-04  8:07 ` SZEDER Gábor
  0 siblings, 1 reply; 5+ messages in thread
From: Fionn via GitGitGadget @ 2026-10-03 11:22 UTC (permalink / raw)
  To: git; +Cc: Felipe Contreras, Fionn, Fionn Fitzmaurice

From: Fionn Fitzmaurice <git@fionn.email>

When using the _git completion function bundled with Zsh
(https://sf.net/p/zsh/code/ci/master/tree/Completion/Unix/Command/_git),
duplicate files in an argument list will not be offered as completion
candidates.

For example, suppose we have untracked files aa and ab (only). Then with
the Zsh completion,

    git add aa a<tab>

would not offer both aa and ab as completion candidates, rather it would
complete ab only.

This behaviour is not present in git-completion.zsh shipped with Git,
which does not deduplicate arguments.

We can get this with minor changes, however. Here we introduce an array
__git_file_exclude which we populate with existing arguments and then
tell compadd to exclude them, which closely matches the Zsh _git
completion behaviour (as well as common programs such as rm).

Signed-off-by: Fionn Fitzmaurice <git@fionn.email>
---
    completion: exclude previous file arguments in Zsh

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2216%2Ffionn%2Fzsh-completion-exclude-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2216/fionn/zsh-completion-exclude-v1
Pull-Request: https://github.com/git/git/pull/2216

 contrib/completion/git-completion.zsh | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/contrib/completion/git-completion.zsh b/contrib/completion/git-completion.zsh
index d5c526665b..26444923c1 100644
--- a/contrib/completion/git-completion.zsh
+++ b/contrib/completion/git-completion.zsh
@@ -117,7 +117,7 @@ __gitcomp_file ()
 	emulate -L zsh
 
 	compset -P '*[=:]'
-	compadd -f -p "${2-}" -- ${(f)1} && _ret=0
+	compadd -f -p "${2-}" -F __git_file_exclude -- ${(f)1} && _ret=0
 }
 
 __gitcomp_direct_append ()
@@ -284,6 +284,8 @@ __git_zsh_main ()
 
 		(( $+opt_args[--help] )) && command='help'
 
+		__git_file_exclude=(${words[2,-1]:#${words[CURRENT]}})
+
 		words=( ${orig_words[@]} )
 
 		__git_zsh_bash_func $command
@@ -296,6 +298,7 @@ _git ()
 	local _ret=1
 	local cur cword prev
 	local __git_repo_path
+	local -a __git_file_exclude
 
 	cur=${words[CURRENT]}
 	prev=${words[CURRENT-1]}

base-commit: c46c1e37724f0478939de636ab8ea5a89086d532
-- 
gitgitgadget

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-10-05  1:45 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-03 11:22 [PATCH] completion: exclude previous file arguments in Zsh Fionn via GitGitGadget
2026-10-04  8:07 ` SZEDER Gábor
2026-10-04 16:17   ` Fionn
2026-10-04 21:13   ` Junio C Hamano
2026-10-05  1:44     ` Fionn

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.