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

comparguments (was Re: minor niggle with svn completion of sub-commands)



On Nov 16,  8:01pm, Bart Schaefer wrote:
}
} I begin to think the test really belongs in the "for" statement loop
} conditions at the top.  "line && !ca_laststate.def" rather than just
} "line".

So it turns out that breaks :*PATTERN:::MESSAGE:ACTION in optspecs.
Fortunately there's a check for that one in the test suite.

Here's a patch I think is worth committing.

--- computil.c.~1.116.~	2009-08-31 07:24:38.000000000 -0700
+++ computil.c	2009-11-17 07:53:43.000000000 -0800
@@ -2133,6 +2133,23 @@
 	    if ((adef = state.def = ca_get_arg(d, state.nth)) &&
 		(state.def->type == CAA_RREST ||
 		 state.def->type == CAA_RARGS)) {
+
+		/* Bart 2009/11/17:
+		 * We've reached the "rest" definition.  If at this point
+		 * we already found another definition that describes the
+		 * current word, use that instead.  If not, prep for the
+		 * "narrowing" of scope to only the remaining words.
+		 *
+		 * We can't test ca_laststate.def in the loop conditions
+		 * at the top because this same loop also handles the
+		 * ':*PATTERN:MESSAGE:ACTION' form for multiple arguments
+		 * after an option, which may need to continue scanning.
+		 * There might be an earlier point at which this test can
+		 * be made but tracking it down is not worth the effort.
+		 */
+		if (ca_laststate.def)
+		    break;
+
 		state.inrest = 0;
 		state.opt = (cur == state.nargbeg + 1 &&
 			     (!multi || !*line || 



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