Skip to content

pr-2155/mobilutz/zsh-complete-global-C-v2

tagged this 19 Aug 13:07
From: Lutz Lengemann <lutz@lengemann.net>

The zsh completion wrapper does not handle the global -C option, so

	git -C <path> <command> <TAB>

offers nothing.  -C is not part of the _arguments specification, and the
wrapper hard-codes __git_cmd_idx=1, i.e. it assumes that the command is
the first argument, so the bash helpers look at the wrong word.  The
latter is not specific to -C; the assumption breaks after any global
option, e.g. "git -p checkout <TAB>" does not complete branch names.

Add -C to the specification, and find the command by skipping over the
global options and, where they take one, their arguments, as __git_main
in git-completion.bash does.  The index is one less than zsh's, as the
helpers count the words from zero.  Collect the paths given to -C into
__git_C_args, or else the helpers run git in the current directory and
fail to resolve the aliases and refs of the repository the command runs
in.

The argument of a -C is still completed without regard for the -C
options before it, i.e. "git -C dir -C <TAB>" offers the directories in
".", not the ones in "dir".

Signed-off-by: Lutz Lengemann <lutz@lengemann.net>

Submitted-As: https://lore.kernel.org/git/pull.2155.v2.git.1787144872870.gitgitgadget@gmail.com
In-Reply-To: https://lore.kernel.org/git/pull.2155.git.1781710256081.gitgitgadget@gmail.com
Assets 2
Loading