Re: [PATCH] completion: zsh: support completion after "git -C <path>"
"Lutz Lengemann" <[email protected]>
| Newsgroups | org.kernel.vger.git |
|---|---|
| Message-ID | <[email protected]> |
Hi Ben (Resending, my earlier reply was rejected by the list for being HTML.) On Wed, Jul 15, 2026, at 00:34, D. Ben Knoble wrote: > Any progress here? I just found my local copy of this patch and was > briefly surprised to see it hadn't graduated anywhere (until I > realized conversation had stalled at this point). Sorry for the very late reply, I was on holiday and then other life things got in the way of answering :( I do have a v2 ready, which I have just pushed to my fork, and which follows this message. Junio C Hamano <[email protected]> writes: > Doesn't it want to do something similar to what __git_main in > git-completion.bash does at the beginning, namely, this part? It does, thanks. v2 no longer skips only leading -C options, but walks the words in front of the command and skips over the global options and, where they take one, their arguments, like __git_main does. That also makes "git -p checkout <TAB>" and "git --git-dir=<path> checkout <TAB>" complete the arguments of the command, which they did not before. Two related gaps are left alone, as they are bugs in the _arguments specification rather than in the command lookup: -c is not listed there at all, and --git-dir and friends are spelled "--git-dir=-", which accepts only "--git-dir=<path>", not the "--git-dir <path>" form. I can send patches for those separately. "D. Ben Knoble" <[email protected]> writes: > But we mark these local, so how do they propagate to the other > functions? zsh scoping is dynamic, not lexical, so a variable declared "local" in __git_zsh_main is visible in the functions that are called from it, the bash helpers included. That is how __git_dir and __git_cmd_idx are handed down already, and __git_C_args works the same way. > We should probably note in the log message that the _directories > completion will not account for previous -C I added a note about this in the log message. > I think we could do _slightly_ better by using a state "->dir" or > something, accumulating the current prefix, and passing that to > _directories as a prefix with -W I tried that and it works, but it changes what -C offers, which is more than fixing the completion after -C, so I left it out; happy to send it on top. Two things to watch out for there: the accumulated path has to be made absolute, as -W with ".." gave me the directories of "/", and the accumulation has to stop before the word that is being completed. > By the way, I've realized that "git -<tab>" has the same problem (a > giant list of files after the other option completions) That one is older than this patch: the file listing comes from the fallback at the end of _git, let _ret && _default && _ret=0 which is where the "use-compctl" and "globbed-files" tags in your _complete_help dump come from. I could not reproduce the repeated description block with "zsh -f" and only the _complete completer, so something in my setup or yours may differ there. Either way it wants its own topic. I hope that the change now looks good, and if there is anything I should still look at just tell me. Thank you very much Lutz