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

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



And I actually didn’t realize this until you pointed me to the source, but darwinup *will not install* anything with an extension it doesn’t know about — it never tries to sniff the file contents.  So, I really do have a finite list to deal with, and can just list them all.  I’m still curious to know the answer to the zstyle question, though.

—Chris N.

> On Nov 4, 2019, at 12:41 PM, Chris Nebel <c.nebel@xxxxxxx> wrote:
> 
> Ok, fair.  I’ve been worried that while on the one hand I’d like to complete only supported archive files, on the other hand people use all sorts of mutant extensions for them, especially when compressed, hence just sniffing the file contents.  However, a not-terribly-complicated pattern will cover a lot of the cases.
> 
> 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?
> 
> 
> —Chris N.
> 
>> On Nov 3, 2019, at 10:56 PM, dana <dana@xxxxxxx> wrote:
>> 
>> On 4 Nov 2019, at 00:08, Chris Nebel <c.nebel@xxxxxxx> wrote:
>>> *(e:'file -bz $REPLY | grep -wq archive')
>> 
>> I'm not sure that's even a good idea. You'd be running an external process
>> against every single file the function encountered. On network drives or in
>> directories with many files that could take a while.
>> 
>> Also, i've never used darwinup, but it looks to me like it supports only a
>> select number of archive formats, which are guessed based on the file
>> extension and enumerated here:
>> 
>> https://github.com/macosforge/darwinbuild/blob/master/darwinup/Archive.cpp#L323
>> 
>> If that's the case, you should be able to just use '*.(tar|zip|whatever)',
>> which is much simpler and faster.
>> 
>> With that said, to answer your actual question, i think the reason it doesn't
>> work is that _files has an undocumented feature where if it detects unescaped
>> white space in the pattern it assumes that you're trying to supply *multiple*
>> patterns to be transformed into a brace expansion. Maybe there is some very
>> fancy quoting you can do to make that work, but at that point i think using
>> the + qualifier would be easier.
>> 
>> dana
>> 
> 



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