Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
comparguments (was Re: minor niggle with svn completion of sub-commands)
- X-seq: zsh-workers 27415
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxx
- Subject: comparguments (was Re: minor niggle with svn completion of sub-commands)
- Date: Tue, 17 Nov 2009 07:55:05 -0800
- In-reply-to: <091116200143.ZM31202@xxxxxxxxxxxxxxxxxxxxxx>
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
- References: <19192.17676.966894.118536@xxxxxxxxxxxxxxxxxx> <m3fx8nmkwc.fsf@xxxxxxxxxxxxxx> <m3ws1v634w.fsf@xxxxxxxxxxxxxx> <20091112192553.2d76ce1d@pws-pc> <m3eio0x479.fsf@xxxxxxxxxxxxxx> <m3639cw7oc.fsf@xxxxxxxxxxxxxx> <091115161750.ZM29484@xxxxxxxxxxxxxxxxxxxxxx> <m3zl6muucg.fsf@xxxxxxxxxxxxxx> <091116200143.ZM31202@xxxxxxxxxxxxxxxxxxxxxx>
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