Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Use of (e:...:) glob qualifier with _files -g?

On Mon, Nov 4, 2019 at 2:42 PM Chris Nebel <c.nebel@xxxxxxx> wrote:
> My problem then becomes how to let people configure the completion so they can use any extensions I didn’t cover.  I’m guessing that the answer has something to do with zstyle and the “file-patterns” style, but I’m having trouble turning the examples in zshcompsys(1) into something that works.  To make this a bit more concrete, say my completion code looks something like this:
>         files -g '*.(cpio|tar|xar)'
> …and someone wants to also match “*.cpgz” files, what would they do?

Typically you would assign the pattern to a variable, and then use a
style to allow the user to substitute his own value for that variable.
You can name the style anything you like, but a usual approach would
be to choose a name that is already in use for similar purposes.  If
you call the existing _files completer it will handle the zstyle

You need to determine a context name for your completion and assign
that to a local variable named curcontext to inform other functions
that look for styles of the context in which they are being invoked.

To put this together, you'd simply do something like:

local curcontext="${curcontext%:*:*}:darwinup"
_files -g '*.(cpio|tar|xar)'

Then a user can write

zstyle ':completion:*:darwinup' file-patterns "%p *.cpgz”

where %p will be replaced by your defaults and *.cpgz will also be
tried (see previous remarks about why spaces are complicated).

Messages sorted by: Reverse Date, Date, Thread, Author