zsh-workers
 help / color / mirror / code / Atom feed
* bug in accept-exact-dirs style
@ 2009-01-27 23:54 Greg Klanderman
  2009-01-29 16:20 ` Bart Schaefer
  0 siblings, 1 reply; 3+ messages in thread
From: Greg Klanderman @ 2009-01-27 23:54 UTC (permalink / raw)
  To: Zsh list


[~] greg@lwm| zsh -f
lwm% mkdir foo
lwm% touch foo/bar
lwm% touch foo/baz
lwm% autoload -U compinit
lwm% compinit
lwm% zstyle ':completion:*' accept-exact-dirs yes

Now try completing each of the following:

ls foo/                # OK
ls ~/foo/              # doesn't work - no completions
ls /home/greg/foo/     # OK
ls $HOME/foo/          # doesn't work - no completions

Now,

lwm% cd /tmp

and try those again:

ls ~/foo/              # OK
ls /home/greg/foo/     # OK
ls $HOME/foo/          # OK

thanks,
Greg


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: bug in accept-exact-dirs style
  2009-01-27 23:54 bug in accept-exact-dirs style Greg Klanderman
@ 2009-01-29 16:20 ` Bart Schaefer
  2009-01-29 17:51   ` Peter Stephenson
  0 siblings, 1 reply; 3+ messages in thread
From: Bart Schaefer @ 2009-01-29 16:20 UTC (permalink / raw)
  To: Zsh list

On Jan 27,  6:54pm, Greg Klanderman wrote:
}
} [~] greg@lwm| zsh -f
} lwm% mkdir foo
} lwm% touch foo/bar
} lwm% touch foo/baz
} lwm% autoload -U compinit
} lwm% compinit
} lwm% zstyle ':completion:*' accept-exact-dirs yes
} 
} Now try completing each of the following:
} 
} ls foo/                # OK
} ls ~/foo/              # doesn't work - no completions
} ls /home/greg/foo/     # OK
} ls $HOME/foo/          # doesn't work - no completions

This isn't directly related to accept-exact-dirs ... a prefix that
needs expansion is removed by _path_files in the section between the
comments

# Now let's have a closer look at the string to complete.

  and

# Now we generate the matches. First we loop over all prefix paths given
# with the `-W' option.

The result after removing the prefix eventually ends up in $tmp1, so
when that is a string that will still pass the -d test in this loop:

    while true; do
      if [[ -d $donepath$tmp1 ]]; then
	donepath=$donepath$tmp1/
	pre=$tpre
	break
      elif [[ $tmp1 = (#b)(*)/([^/]#) ]]; then
	tmp1=$match[1]
	tpre=$match[2]/$tpre
      else
	break
      fi
    done

Then the code is fooled into thinking that the suffix is part of the
prefix, and on line 585 the PREFIX string is rebuilt in the wrong order,
becoming "tmp/~/" instead of "~/tmp/".

At that point I get lost, and I've already spent more time than I should
have looking at it.  PWS?  Anyone?


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: bug in accept-exact-dirs style
  2009-01-29 16:20 ` Bart Schaefer
@ 2009-01-29 17:51   ` Peter Stephenson
  0 siblings, 0 replies; 3+ messages in thread
From: Peter Stephenson @ 2009-01-29 17:51 UTC (permalink / raw)
  To: Zsh list

On Thu, 29 Jan 2009 08:20:25 -0800
Bart Schaefer <schaefer@brasslantern.com> wrote:
> On Jan 27,  6:54pm, Greg Klanderman wrote:
> }
> } [~] greg@lwm| zsh -f
> } lwm% mkdir foo
> } lwm% touch foo/bar
> } lwm% touch foo/baz
> } lwm% autoload -U compinit
> } lwm% compinit
> } lwm% zstyle ':completion:*' accept-exact-dirs yes
> } 
> } Now try completing each of the following:
> } 
> } ls foo/                # OK
> } ls ~/foo/              # doesn't work - no completions
> } ls /home/greg/foo/     # OK
> } ls $HOME/foo/          # doesn't work - no completions
>
> Then the code is fooled into thinking that the suffix is part of the
> prefix, and on line 585 the PREFIX string is rebuilt in the wrong order,
> becoming "tmp/~/" instead of "~/tmp/".

Ah, yes,  The bug is at this point, I think.  The ordering appears to be
OK for other uses of donepath (though, in _path_files, it's hard
to be sure).  Thanks for looking.

Index: Completion/Unix/Type/_path_files
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Unix/Type/_path_files,v
retrieving revision 1.41
diff -u -r1.41 _path_files
--- Completion/Unix/Type/_path_files	10 Nov 2008 15:28:41 -0000	1.41
+++ Completion/Unix/Type/_path_files	29 Jan 2009 17:49:41 -0000
@@ -578,11 +578,11 @@
 
     if [[ "$tpre" = */* ]]; then
       tmp2="${cpre}${tpre%%/*}"
-      PREFIX="${donepath}${linepath}${tmp2}"
+      PREFIX="${linepath}${donepath}${tmp2}"
       SUFFIX="/${tpre#*/}${tsuf#*/}"
     else
       tmp2="${cpre}${tpre}"
-      PREFIX="${donepath}${linepath}${tmp2}"
+      PREFIX="${linepath}${donepath}${tmp2}"
       SUFFIX="${tsuf}"
     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


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2009-01-29 17:51 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-01-27 23:54 bug in accept-exact-dirs style Greg Klanderman
2009-01-29 16:20 ` Bart Schaefer
2009-01-29 17:51   ` Peter Stephenson

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).