From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5919 invoked from network); 9 Apr 2008 11:01:02 -0000 X-Spam-Checker-Version: SpamAssassin 3.2.4 (2008-01-01) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.2.4 Received: from news.dotsrc.org (HELO a.mx.sunsite.dk) (130.225.247.88) by ns1.primenet.com.au with SMTP; 9 Apr 2008 11:01:02 -0000 Received-SPF: none (ns1.primenet.com.au: domain at sunsite.dk does not designate permitted sender hosts) Received: (qmail 86655 invoked from network); 9 Apr 2008 11:00:57 -0000 Received: from sunsite.dk (130.225.247.90) by a.mx.sunsite.dk with SMTP; 9 Apr 2008 11:00:57 -0000 Received: (qmail 23396 invoked by alias); 9 Apr 2008 11:00:54 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 24803 Received: (qmail 23382 invoked from network); 9 Apr 2008 11:00:53 -0000 Received: from bifrost.dotsrc.org (130.225.254.106) by sunsite.dk with SMTP; 9 Apr 2008 11:00:53 -0000 Received: from cluster-g.mailcontrol.com (cluster-g.mailcontrol.com [85.115.41.190]) by bifrost.dotsrc.org (Postfix) with ESMTP id 1C3D5802A5F0 for ; Wed, 9 Apr 2008 13:00:46 +0200 (CEST) Received: from cameurexb01.EUROPE.ROOT.PRI ([62.189.241.200]) by rly20g.srv.mailcontrol.com (MailControl) with ESMTP id m39B0Q9v021369 for ; Wed, 9 Apr 2008 12:00:35 +0100 Received: from news01 ([10.103.143.38]) by cameurexb01.EUROPE.ROOT.PRI with Microsoft SMTPSVC(6.0.3790.3959); Wed, 9 Apr 2008 12:00:25 +0100 Date: Wed, 9 Apr 2008 12:00:25 +0100 From: Peter Stephenson To: zsh-workers Subject: Re: _subscript quotes too much Message-ID: <20080409120025.5c4fd6f4@news01> In-Reply-To: <200804090849.m398n4W2012023@news01.csr.com> References: <237967ef0804081708h72b87699n6235099044238a13@mail.gmail.com> <237967ef0804081711t6b4a9d88qa8b5367ba1ba8fb0@mail.gmail.com> <200804090849.m398n4W2012023@news01.csr.com> Organization: CSR X-Mailer: Claws Mail 3.3.1 (GTK+ 2.12.5; i386-redhat-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 09 Apr 2008 11:00:25.0144 (UTC) FILETIME=[E9C92380:01C89A30] X-Scanned-By: MailControl A-08-00-05 (www.mailcontrol.com) on 10.71.0.130 X-Virus-Scanned: ClamAV 0.91.2/6681/Wed Apr 9 11:50:19 2008 on bifrost X-Virus-Status: Clean On Wed, 09 Apr 2008 09:49:04 +0100 Peter Stephenson wrote: > > > % typeset -A foo > > > % foo[*.txt]=blue > > > % echo $foo[\*.txt] > > > > > > % echo $foo[*.txt] > > > blue > > I've a vague feeling that not handling \* the same as * is a bug, but > quoting in subscripts is a horrible can of worms. I would expect > backslash-quoting, at least, to be uniformly applied. Hmm... it isn't, and this appears to be deliberate at at least two points in the code: lex.c:dquote_parse() (where we carefully choose when to make backslashes active) and params.c:getarg() (where we put most of the active backslashes back to real backslashes anyway). So we're actually going to some lengths to make sure backslashes are *not* handled as quote characters in subscripts but are retained. This is documented in Subscript Parsing in the zshparam manual, in fact, where there's a long essay about why it's so difficult. The paradigm is double quotes, where only some backslashed characters are treated specially: % print -r "\*" \* The usual workaround is to use a parameter. As far as _subscript is concerned, it would have to be taught the rules for which characters can be backslashed, this applied with ${...//.../...}, and then the -Q flag passed to compadd. This shouldn't be too hard. -- Peter Stephenson Software Engineer CSR PLC, Churchill House, Cambridge Business Park, Cowley Road Cambridge, CB4 0WZ, UK Tel: +44 (0)1223 692070