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

Re: device cannot be completed after "ip link show dev"

On Wed, 1 Apr 2015 18:07:19 +0800
Han Pingtian <hanpt@xxxxxxxxxxxxxxxxxx> wrote:
> What's going on when
> % ip link show dev <tab>
> , please? It looks like the old pattern
> /$'[[:alnum:][:punct:][:cntrl:][:digit:]]##\0'/ will match here, so the
> action ':interfaces:network interface:_net_interfaces' will be bypassed?
> But I think there is nothing at the position of <tab>, why the old
> pattern would match a empty string?

At that point it's not using the pattern, it's constructing a
completion.  It only uses the pattern to determine if a *previous* entry
on the line is of a particular type.

> > This is better.  There's still a possible glitch: if a device springs
> > into existence dynamically we won't accept it as a device already part
> > of the command line argument, though we will still complete it as that
> > calls _net_interfaces again.  I think that's fairly minor.
> > 
> I have tested (by set a fake net_intf_list) that if there is a interface 
> which named "dev", the completion will fail with this patch.

I certain wouldn't expect to support a device called "dev" in the
general case, that will screw up parsing horribly.

> And I have figured out this works:
> subcmd_dev=(
> /$'[[:alnum:][:punct:][:cntrl:][:digit:]]##\0'/ 
> -'if [[ $words[CURRENT-1] = dev ]];then false;else true;fi'
> ':interfaces:network interface:_net_interfaces'
> )

I didn't even know what format guards could take in general... that
seems a reasonable optimisation since after a "dev" you don't care what
the pattern is, it's automatically a device.  Except I don't really
understand what guards do, so this may need a bit more testing...


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