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@xxxxxxxxx> > --- > > Since v3: _This_ is v3 ;) > * 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. > +{ > + 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. > +} > + > +_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 ... > + 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. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html