From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 56 invoked by alias); 1 Apr 2015 11:03:18 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: X-Seq: 20060 Received: (qmail 20799 invoked from network); 1 Apr 2015 11:03:15 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.2 Date: Wed, 1 Apr 2015 18:07:19 +0800 From: Han Pingtian To: zsh-users@zsh.org Subject: Re: device cannot be completed after "ip link show dev" Message-ID: <20150401100718.GB2805@localhost.localdomain> Mail-Followup-To: zsh-users@zsh.org References: <20150330033930.GB2856@localhost.localdomain> <20150331195701.4bc78e7c@ntlworld.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150331195701.4bc78e7c@ntlworld.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 15040110-0013-0000-0000-000009C3921A On Tue, Mar 31, 2015 at 07:57:01PM +0100, Peter Stephenson wrote: > On Mon, 30 Mar 2015 11:39:30 +0800 > Han Pingtian wrote: > > Although in _ip() the "link_show_cmds" is defined to > > > > 188 local -a link_show_cmds > > 189 _regex_words link-show-commands 'link show commands' \ > > 190 'dev:specify device:$subcmd_dev' \ > > 191 'up:limit display to running devices' > > 192 link_show_cmds=("(" $subcmd_dev "|" ")" "$reply[@]" "#" ) > > 193 > > > > but the device cannot be completed after "ip link show dev": > > I see the problem: we're matching way too much where we think there > might be a dev already on the command line. > What's going on when % ip link show dev , 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 , why the old pattern would match a empty string? > 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. 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' )