mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-22 00:21:27 +01:00
users/12699: don't complete normal arguments where we're completing the
required argument to an option in the word following the option
This commit is contained in:
parent
318119bda7
commit
db717e3025
2 changed files with 47 additions and 4 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2008-03-07 Peter Stephenson <p.w.stephenson@ntlworld.com>
|
||||||
|
|
||||||
|
* users/12699: Src/Zle/computil.c: don't complete normal
|
||||||
|
arguments where we're completing the required argument
|
||||||
|
to an option in the word following the option.
|
||||||
|
|
||||||
2008-03-07 Peter Stephenson <pws@csr.com>
|
2008-03-07 Peter Stephenson <pws@csr.com>
|
||||||
|
|
||||||
* Richard Hartmann: 24631: Completion/Unix/Command/_gpg: update.
|
* Richard Hartmann: 24631: Completion/Unix/Command/_gpg: update.
|
||||||
|
|
|
@ -1612,7 +1612,16 @@ get_cadef(char *nam, char **args)
|
||||||
return new;
|
return new;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the option used in a word from the line, if any. */
|
/*
|
||||||
|
* Get the option used in a word from the line, if any.
|
||||||
|
*
|
||||||
|
* "d" is a complete set of argument/option definitions to scan.
|
||||||
|
* "line" is the word we are scanning.
|
||||||
|
* "full" indicates that the option must match a full word; otherwise
|
||||||
|
* we look for "=" arguments or prefixes.
|
||||||
|
* *"end" is set to point to the end of the option, in some cases
|
||||||
|
* leaving an option argument after it.
|
||||||
|
*/
|
||||||
|
|
||||||
static Caopt
|
static Caopt
|
||||||
ca_get_opt(Cadef d, char *line, int full, char **end)
|
ca_get_opt(Cadef d, char *line, int full, char **end)
|
||||||
|
@ -1785,6 +1794,12 @@ ca_inactive(Cadef d, char **xor, int cur, int opts, char *optname)
|
||||||
|
|
||||||
typedef struct castate *Castate;
|
typedef struct castate *Castate;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* **** DOCUMENT ME ****
|
||||||
|
*
|
||||||
|
* This structure and its use are a nightmare.
|
||||||
|
*/
|
||||||
|
|
||||||
struct castate {
|
struct castate {
|
||||||
Castate snext;
|
Castate snext;
|
||||||
Cadef d;
|
Cadef d;
|
||||||
|
@ -2244,9 +2259,18 @@ ca_colonlist(LinkList l)
|
||||||
return ztrdup("");
|
return ztrdup("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function adds the current set of descriptions, actions,
|
||||||
|
* and subcontext descriptions to the given linked list for passing
|
||||||
|
* up in comparguments -D and comparguments -L. opt is the
|
||||||
|
* option string (may be NULL if this isn't an option argument) and arg the
|
||||||
|
* argument structure (either an option argument or a normal argument
|
||||||
|
* as determined by arg->type).
|
||||||
|
*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ca_set_data(LinkList descr, LinkList act, LinkList subc,
|
ca_set_data(LinkList descr, LinkList act, LinkList subc,
|
||||||
char *opt, Caarg arg, int single)
|
char *opt, Caarg arg, Caopt optdef, int single)
|
||||||
{
|
{
|
||||||
LinkNode dnode, anode;
|
LinkNode dnode, anode;
|
||||||
char nbuf[40], *buf;
|
char nbuf[40], *buf;
|
||||||
|
@ -2297,6 +2321,19 @@ ca_set_data(LinkList descr, LinkList act, LinkList subc,
|
||||||
|
|
||||||
addlinknode(subc, buf);
|
addlinknode(subc, buf);
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* If this is an argument to an option, and the option definition says
|
||||||
|
* the argument to the option is required and in the following
|
||||||
|
* (i.e. this) word, then it must match what we've just told it to
|
||||||
|
* match---don't try to match normal arguments.
|
||||||
|
*
|
||||||
|
* This test may be too stringent for what we need, or it
|
||||||
|
* may be too loose; I've simply tweaked it until it gets
|
||||||
|
* the case above right.
|
||||||
|
*/
|
||||||
|
if (arg->type == CAA_NORMAL &&
|
||||||
|
opt && optdef && optdef->type == CAO_NEXT)
|
||||||
|
return;
|
||||||
if (single)
|
if (single)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -2467,7 +2504,7 @@ bin_comparguments(char *nam, char **args, UNUSED(Options ops), UNUSED(int func))
|
||||||
ignore_prefix(lstate->doff);
|
ignore_prefix(lstate->doff);
|
||||||
}
|
}
|
||||||
ca_set_data(descr, act, subc, arg->opt, arg,
|
ca_set_data(descr, act, subc, arg->opt, arg,
|
||||||
(lstate->doff > 0));
|
lstate->curopt, (lstate->doff > 0));
|
||||||
}
|
}
|
||||||
lstate = lstate->snext;
|
lstate = lstate->snext;
|
||||||
}
|
}
|
||||||
|
@ -2565,7 +2602,7 @@ bin_comparguments(char *nam, char **args, UNUSED(Options ops), UNUSED(int func))
|
||||||
|
|
||||||
if (opt && opt->args) {
|
if (opt && opt->args) {
|
||||||
ret = 0;
|
ret = 0;
|
||||||
ca_set_data(descr, act, subc, opt->name, opt->args, 1);
|
ca_set_data(descr, act, subc, opt->name, opt->args, opt, 1);
|
||||||
}
|
}
|
||||||
lstate = lstate->snext;
|
lstate = lstate->snext;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue