Re: [PATCH v3] completion: add new _GIT_complete helper
- From
SZEDER Gábor <szeder@ira.uka.de>
- Date
- May 6, 2012, 11:14 UTC
- Message-ID
- <20120506111425.GJ2164@goldbirke>
- In-Reply-To
- <1336231400-6878-1-git-send-email-felipe.contreras@gmail.com>
Hi,
On Sat, May 05, 2012 at 05:23:20PM +0200, Felipe Contreras wrote:
> This simplifies the completions, and makes it easier to define aliases: > > _GIT_complete gf git_fetch
So, 'gf' is an alias for 'git fetch', for which the user would like to use the completion for 'git fetch', right? But that completion function is caled _git_fetch(), so the underscore prefix is missing here.
Besides, this example won't work, because the completion for 'git fetch' uses __git_complete_remote_or_refspec(), which in turn relies on finding out the name of the git command from the word on the command line, and it won't be able to do that from 'gf'.
I remember we discussed this in an earlier round, and you even suggested a possible fix (passing the command name as argument to __git_complete_remote_or_refspec()). I think that's the right thing to do here.
> Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> > --- > > Since v3:
_This_ is v3 ;)
Show 15 quoted lines
> * Rename to _GIT_complete to follow bash completion "guidelines" > * Get rid of foo_wrap name > > Since v2: > > * Remove stuff related to aliases fixes; should work on top of master > > contrib/completion/git-completion.bash | 67 ++++++++++++++------------------ > t/t9902-completion.sh | 2 +- > 2 files changed, 31 insertions(+), 38 deletions(-) > > diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash > index 9f56ec7..f300b87 100755 > --- a/contrib/completion/git-completion.bash > +++ b/contrib/completion/git-completion.bash
> +__git_func_wrap ()
Good.
Show 16 quoted lines
> +{
> + if [[ -n ${ZSH_VERSION-} ]]; then
> + emulate -L bash
> + setopt KSH_TYPESET
> +
> + # workaround zsh's bug that leaves 'words' as a special
> + # variable in versions < 4.3.12
> + typeset -h words
> +
> + # workaround zsh's bug that quotes spaces in the COMPREPLY
> + # array if IFS doesn't contain spaces.
> + typeset -h IFS
> + fi
> + local cur words cword prev
> + _get_comp_words_by_ref -n =: cur words cword prev
> + __git_func "$@"What is this "$@" for and why? None of the _git_<cmd>() functions take any arguments, nor does _git() and _gitk(), and AFAICT Bash won't pass any either.
Show 6 quoted lines
> +}
> +
> +_GIT_complete ()
> +{
> + local name="${2-$1}"
> + eval "$(typeset -f __git_func_wrap | sed -e "s/__git_func/_$name/")"Still don't like the subshell and sed here ...
Show 6 quoted lines
> + complete -o bashdefault -o default -o nospace -F _${name}_wrap $1 2>/dev/null \
> + || complete -o default -o nospace -F _${name}_wrap $1
> +}
> +
> +_GIT_complete git
> +_GIT_complete gitk... because it adds delay when the completion script is loaded. But I still don't have ideas how to avoid them.