zsh-workers
 help / color / mirror / code / Atom feed
From: Peter Stephenson <pws@csr.com>
To: zsh-workers@sunsite.dk
Subject: Re: Completion/correction and _path_files
Date: Mon, 2 Jun 2008 17:40:30 +0100	[thread overview]
Message-ID: <20080602174030.07a94732@news01> (raw)
In-Reply-To: <080521073412.ZM11504@torch.brasslantern.com>

On Wed, 21 May 2008 07:34:12 -0700
Bart Schaefer <schaefer@brasslantern.com> 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<TAB>
completes properly, but S/Zie/zle_main<TAB> 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 <pws@csr.com>                  Software Engineer
CSR PLC, Churchill House, Cambridge Business Park, Cowley Road
Cambridge, CB4 0WZ, UK                          Tel: +44 (0)1223 692070


  reply	other threads:[~2008-06-02 16:40 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-05-21 14:34 Bart Schaefer
2008-06-02 16:40 ` Peter Stephenson [this message]
2008-06-02 17:02   ` Peter Stephenson
2008-06-02 17:07     ` Peter Stephenson
2008-06-04  9:29       ` Peter Stephenson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080602174030.07a94732@news01 \
    --to=pws@csr.com \
    --cc=zsh-workers@sunsite.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).