On Monday 15 June 2009, Chet Ramey wrote:
> Ville Skyttä wrote:
> > Hello,
> >
> > Apologies if this is not an appropriate list to post a question like this
> > (pointers elsewhere welcome), but here goes:
> >
> > I'm trying to figure out how to do the right thing with non-filename
> > completions containing slashes in a function that was passed to complete
> > along with -o filenames.

Thanks for the reply, Chet.

> I can't think, off the top of my head, how the completion function is
> supposed to distinguish between the two.  There's no real difference
> between a string with slashes and a filename -- they are identical.

I don't know if it helps, but in my scenario, when I want to complete on non-
filename things containing slashes, filename completion is not necessary nor 
wanted.  To illustrate:

_foo()
{
  if $something ; then
    # Non-filename completion with stuff containing slashes desirable,
    # no filename completion needed nor wanted
    COMPREPLY=( $( compgen -W 'a/b c/d e/f/g' -- ${COMP_WORDS[COMP_CWORD]} ) )
    return 0
  fi
  # Else filename completion as usual
}
complete -F _foo -o filenames foo

If you're interested in the actual case I'm asking this for, see _rpm_groups() 
in contrib/rpm at http://git.debian.org/?p=bash-completion/bash-
completion.git;a=tree

> You could, I suppose, stat the arguments to see which correspond to
> real pathnames, but that isn't guaranteed accurate. Since you don't
> have control over what is passed to the completion function, trying to
> quote the slashes in a non-pathname argument won't work, either.

I've tried quoting the slashes in various ways, and failed to get it to make 
any difference.  But because I know whenever I want to complete on non-
filename things containing slashes and not filenames, and given your stat 
thought above, do I understand correctly that there would at least 
theoretically be a way to accomplish what I want?


Reply via email to