From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9627 invoked from network); 2 Jun 2008 16:40:56 -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.4 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; 2 Jun 2008 16:40:56 -0000 Received-SPF: none (ns1.primenet.com.au: domain at sunsite.dk does not designate permitted sender hosts) Received: (qmail 13268 invoked from network); 2 Jun 2008 16:40:46 -0000 Received: from sunsite.dk (130.225.247.90) by a.mx.sunsite.dk with SMTP; 2 Jun 2008 16:40:46 -0000 Received: (qmail 6699 invoked by alias); 2 Jun 2008 16:40:43 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 25128 Received: (qmail 6682 invoked from network); 2 Jun 2008 16:40:42 -0000 Received: from bifrost.dotsrc.org (130.225.254.106) by sunsite.dk with SMTP; 2 Jun 2008 16:40:42 -0000 Received: from cluster-g.mailcontrol.com (cluster-g.mailcontrol.com [85.115.41.190]) by bifrost.dotsrc.org (Postfix) with ESMTP id B2E7980589A4 for ; Mon, 2 Jun 2008 18:40:37 +0200 (CEST) Received: from cameurexb01.EUROPE.ROOT.PRI ([62.189.241.200]) by rly15g.srv.mailcontrol.com (MailControl) with ESMTP id m52GeVTj016450 for ; Mon, 2 Jun 2008 17:40:32 +0100 Received: from news01 ([10.103.143.38]) by cameurexb01.EUROPE.ROOT.PRI with Microsoft SMTPSVC(6.0.3790.3959); Mon, 2 Jun 2008 17:40:30 +0100 Date: Mon, 2 Jun 2008 17:40:30 +0100 From: Peter Stephenson To: zsh-workers@sunsite.dk Subject: Re: Completion/correction and _path_files Message-ID: <20080602174030.07a94732@news01> In-Reply-To: <080521073412.ZM11504@torch.brasslantern.com> References: <080521073412.ZM11504@torch.brasslantern.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: 02 Jun 2008 16:40:30.0648 (UTC) FILETIME=[5EB87380:01C8C4CF] X-Scanned-By: MailControl A-08-50-03 (www.mailcontrol.com) on 10.71.0.125 X-Virus-Scanned: ClamAV 0.91.2/7325/Mon Jun 2 15:45:22 2008 on bifrost X-Virus-Status: Clean On Wed, 21 May 2008 07:34:12 -0700 Bart Schaefer wrote: > However, if I start with this: > > schaefer<502> ls Scr/ > No matches for `files' or `corrections' This has been annoying me for ages, although if I made a list of things that had been annoying me for ages I'd be so busy I'd never get a chance to be annoyed by them. The problem in the cases I've tried is right at the last stage, when compadd is run to add the matches. The prefixes are added as "-p Src/ -W Src/" and compadd doesn't like those because it's more than it's job's worth to pass anything that doesn't begin with "Scr/". We can convince it by passing the -U option to compadd, and the following does the job in this case (thought whether *every* occurrence of compadd I've given it to needs it beats me---this isn't even the whole list, since I didn't add it to a number of occurrences of compadd that don't appear to be there to add file matches). However, there's a good chance this has got some side effect. (You might hope there wasn't, and that _path_files was smart enough only to add things it already knew matched, so -U was harmless, but things in the underworld aren't that easy, and I have a vague feeling I already tried this and found a problem once.) If we can find out what that is we might be able to work around it, and if it doesn't affect approximation we can make the -U only apply then (I haven't done that here because that would mask any side effects that I want to tease out). I will try it for a bit and see what happens. I've already noticed this doesn't play well with partial path completion, though that appears to be separate problem. Hence Sec/Zie/zle_main completes properly, but S/Zie/zle_main gives you options for S without properly matching the rest. You have to stop and restart the completion when it offers you Src. Index: Completion/Unix/Type/_path_files =================================================================== RCS file: /cvsroot/zsh/zsh/Completion/Unix/Type/_path_files,v retrieving revision 1.28 diff -u -r1.28 _path_files --- Completion/Unix/Type/_path_files 18 May 2008 20:51:48 -0000 1.28 +++ Completion/Unix/Type/_path_files 2 Jun 2008 16:32:27 -0000 @@ -595,7 +595,7 @@ # back up the path. tmp1=("${(@)tmp1%%/*}") _list_files tmp1 "$prepath$realpath$testpath" - compadd -Qf "$mopts[@]" -p "$linepath$tmp2" -s "/${tmp3#*/}" \ + compadd -U -Qf "$mopts[@]" -p "$linepath$tmp2" -s "/${tmp3#*/}" \ -W "$prepath$realpath$testpath" \ "$pfxsfx[@]" -M "r:|/=* r:|=*" \ $listopts \ @@ -604,7 +604,7 @@ # Same with a non-empty suffix tmp1=("${(@)^tmp1%%/*}/${tmp3#*/}") _list_files tmp1 "$prepath$realpath$testpath" - compadd -Qf "$mopts[@]" -p "$linepath$tmp2" \ + compadd -U -Qf "$mopts[@]" -p "$linepath$tmp2" \ -W "$prepath$realpath$testpath" \ "$pfxsfx[@]" -M "r:|/=* r:|=*" \ $listopts \ @@ -612,7 +612,7 @@ fi else _list_files tmp1 "$prepath$realpath$testpath" - compadd -Qf "$mopts[@]" -p "$linepath$tmp2" \ + compadd -U -Qf "$mopts[@]" -p "$linepath$tmp2" \ -W "$prepath$realpath$testpath" \ "$pfxsfx[@]" -M "r:|/=* r:|=*" \ $listopts \ @@ -621,7 +621,7 @@ else # We are inserting the match into the command line. if [[ "$tmp3" = */* ]]; then - tmp4=( -Qf "$mopts[@]" -p "$linepath$tmp2" + tmp4=( -U -Qf "$mopts[@]" -p "$linepath$tmp2" -W "$prepath$realpath$testpath" "$pfxsfx[@]" -M "r:|/=* r:|=*" ) if [[ -z "$listsfx" ]]; then @@ -640,7 +640,7 @@ fi else _list_files tmp1 "$prepath$realpath$testpath" - compadd -Qf "$mopts[@]" -p "$linepath$tmp2" \ + compadd -U -Qf "$mopts[@]" -p "$linepath$tmp2" \ -W "$prepath$realpath$testpath" \ "$pfxsfx[@]" -M "r:|/=* r:|=*" \ $listopts \ @@ -708,7 +708,7 @@ compquote tmp4 tmp2 tmp1 for i in "$tmp1[@]"; do _list_files tmp2 "$prepath$realpath${mid%/*/}" - compadd -Qf "$mopts[@]" -p "$linepath$tmp3/" -s "/$tmp4$i" \ + compadd -U -Qf "$mopts[@]" -p "$linepath$tmp3/" -s "/$tmp4$i" \ -W "$prepath$realpath${mid%/*/}/" \ "$pfxsfx[@]" -M "r:|/=* r:|=*" $listopts - "$tmp2" done @@ -733,12 +733,12 @@ "${PREFIX#\~}$SUFFIX" = (|*[^\\])[][*?#~^\|\<\>]* ]]; then tmp1=("$linepath$tmp4${(@)^tmp1}") _list_files tmp1 "$prepath$realpath" - compadd -Qf -W "$prepath$realpath" "$pfxsfx[@]" "$mopts[@]" \ + compadd -U -Qf -W "$prepath$realpath" "$pfxsfx[@]" "$mopts[@]" \ -M "r:|/=* r:|=*" $listopts -a tmp1 else # Not a pattern match _list_files tmp1 "$prepath$realpath$testpath" - compadd -Qf -p "$linepath$tmp4" -W "$prepath$realpath$testpath" \ + compadd -U -Qf -p "$linepath$tmp4" -W "$prepath$realpath$testpath" \ "$pfxsfx[@]" "$mopts[@]" -M "r:|/=* r:|=*" $listopts -a tmp1 fi fi -- Peter Stephenson Software Engineer CSR PLC, Churchill House, Cambridge Business Park, Cowley Road Cambridge, CB4 0WZ, UK Tel: +44 (0)1223 692070