From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5655 invoked by alias); 4 Feb 2010 11:37:54 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 27658 Received: (qmail 1046 invoked from network); 4 Feb 2010 11:37:52 -0000 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-3.0 required=5.0 tests=AWL,BAYES_00, RCVD_IN_DNSWL_LOW,SPF_HELO_PASS autolearn=ham version=3.2.5 Received-SPF: none (ns1.primenet.com.au: domain at csr.com does not designate permitted sender hosts) Date: Thu, 4 Feb 2010 11:37:45 +0000 From: Peter Stephenson To: zsh workers Subject: Re: Quoting problems with _zip (unzip) completer Message-ID: <20100204113745.0a9a8234@news01> In-Reply-To: <20100203220958.26bc25fe@pws-pc> References: <237967ef0908031315u72fa3661i17ff7f0107b85b9c@mail.gmail.com> <200908040850.n748oxlc011862@news01.csr.com> <20090817215819.796e9416@pws-pc> <237967ef1002021716l101c98b7obc758fb200a117e8@mail.gmail.com> <20100203220958.26bc25fe@pws-pc> Organization: CSR X-Mailer: Claws Mail 3.5.0 (GTK+ 2.12.8; i386-redhat-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 04 Feb 2010 11:37:45.0738 (UTC) FILETIME=[786626A0:01CAA58E] X-Scanned-By: MailControl A-09-22-10 (www.mailcontrol.com) on 10.71.0.132 On Wed, 3 Feb 2010 22:09:58 +0000 Peter Stephenson wrote: > On Wed, 3 Feb 2010 02:16:15 +0100 > Mikael Magnusson wrote: > > On 17 August 2009 21:58, Peter Stephenson wrote: > > > On Tue, 04 Aug 2009 09:50:59 +0100 > > > Peter Stephenson wrote: > > >> Mikael Magnusson wrote: > > >> > % unzip test\[.zip > > >> > _zip:117: bad pattern: test[.zip(|.zip|.ZIP) > > >> > _zip:117: bad pattern: test[.zip(|.zip|.ZIP) > > >> > _zip:117: bad pattern: test[.zip(|.zip|.ZIP) > > The exact test above is currently working for me, with my default > completion setup. It's working starting from zsh -f just loading compinit, too. I tried another vanilla version of zsh just to make sure. If the other part of the thread doesn't yield anything, could you see if you can find what's breaking it, in terms of shell settings or environment? (To be quite clear: I'm not going to be doing this myself without some indication of what to do.) Ben wrote: > Breaks for me w/ latest git. Changing _zip line 117: > from zipfile=( $~line[1](|.zip|.ZIP) ) > to zipfile=( $line[1](|.zip|.ZIP) ) > > fixes the 'test[.zip' case This isn't a proper fix. If you want to play along, read and digest the description with my first patch. The key point is to keep ~-expansion working. However, this form does certainly have the globbing problems you pointed out. $~ is doing multiple things not all of which we want; I wonder if this might be causing other problems, too. It's annoyingly hard to get the effect of file expansion and removal of quotes without the effect of globbing, but a scalar assignment with $~ and an explicit unquote seems to do the trick. Does changing it along the lines of this patch fix the original problem? Index: Completion/Unix/Command/_zip =================================================================== RCS file: /cvsroot/zsh/zsh/Completion/Unix/Command/_zip,v retrieving revision 1.9 diff -u -r1.9 _zip --- Completion/Unix/Command/_zip 7 Nov 2006 10:38:54 -0000 1.9 +++ Completion/Unix/Command/_zip 4 Feb 2010 11:30:48 -0000 @@ -1,6 +1,6 @@ #compdef zip unzip zipinfo -local suffixes suf zipfile uzi +local suffixes suf zipfile uzi testfile local expl curcontext="$curcontext" state line ret=1 typeset -A opt_args @@ -114,10 +114,18 @@ if [[ $service = zip ]] && (( ! ${+opt_args[-d]} )); then _wanted files expl zfile _files -g '^(#i)*.(zip|xpi|[ejw]ar)(-.)' && return else - zipfile=( $~line[1](|.zip|.ZIP) ) - [[ -z $zipfile[1] ]] && return 1 - if [[ $zipfile[1] != $_zip_cache_list ]]; then - _zip_cache_name="$zipfile[1]" + testfile=${~${(Q)line[1]}} + if [[ -f $testfile ]]; then + zipfile=$testfile + elif [[ -f $testfile.zip ]]; then + zipfile=$testfile.zip + elif [[ -f $testfile.ZIP ]]; then + zipfile=$testfile.ZIP + else + return 1 + fi + if [[ $zipfile != $_zip_cache_list ]]; then + _zip_cache_name="$zipfile" _zip_cache_list=( ${(f)"$(zipinfo -1 $_zip_cache_name)"} ) fi _wanted files expl 'file from archive' \ -- Peter Stephenson Software Engineer Tel: +44 (0)1223 692070 Cambridge Silicon Radio Limited Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, UK Member of the CSR plc group of companies. CSR plc registered in England and Wales, registered number 4187346, registered office Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, United Kingdom