Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

PATCH: Re: _find or _users broken?



Bart Schaefer wrote:

> On Apr 29,  1:58pm, Adam Spiers wrote:
> } Subject: _find or _users broken?
> }
> } $ find -user <TAB>
> } ---- user
> } ---- directory
> } <list of directories and users together>
> } $ find ! -user <TAB>
> } ---- directory
> } <list of directories>
> } 
> } Why is it completing directories at all?  And when it completes users
> } and directories, why are the users listed under the directory group?
> 
> That part must have something to do with your settings.  The final clause
> of the _arguments call in _find is to complete directories when nothing
> else matches.

Right. Maybe a not-fully up-to-date version? We had some changes to
_arguments lately. And they were also causing this:

> There is something going wrong, though:
> 
> zagzig[103] find -user <TAB>
> Completing user
> (list of users only)
> zagzig[103] find /tmp -user <TAB>
> (feep, no completions)
> 
> This (and your case with `!') appears to happen because comparguments
> believes the list of options to have been finished when /tmp was put
> on the line, i.e., it doesn't deal well with commands whose options
> follow a list of non-option arguments.

That was just a bug in the function that collects the actions to
report. It incorrectly tested the argument numbers even for arguments
of options.

And it should always complete options and their arguments after all
normal arguments, right? It always did (or should have done) that.

And of course, for `find' there is no `last' argument because we
complete any number of directories.

Bye
 Sven

Index: Src/Zle/computil.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/computil.c,v
retrieving revision 1.10
diff -u -r1.10 computil.c
--- Src/Zle/computil.c	2000/04/28 11:16:52	1.10
+++ Src/Zle/computil.c	2000/05/02 08:52:11
@@ -1396,9 +1396,9 @@
 
     addopt = (opt ? 0 : ca_laststate.oopt);
 
-    for (; arg && (arg->num < 0 ||
-		   (arg->min <= ca_laststate.nth + addopt &&
-		    arg->num >= ca_laststate.nth));) {
+    for (; arg && (opt || (arg->num < 0 ||
+			   (arg->min <= ca_laststate.nth + addopt &&
+			    arg->num >= ca_laststate.nth)));) {
 	lopt = (arg->type == CAA_OPT);
 	if (!opt && !lopt && oopt > 0)
 	    oopt = 0;

--
Sven Wischnowsky                         wischnow@xxxxxxxxxxxxxxxxxxxxxxx



Messages sorted by: Reverse Date, Date, Thread, Author