1
0
forked from aniani/vim

updated for version 7.1-162

This commit is contained in:
Bram Moolenaar
2007-11-24 20:50:24 +00:00
parent e0ca7b2b04
commit ed53fb9a48
4 changed files with 66 additions and 27 deletions

View File

@@ -2963,6 +2963,57 @@ find_ucmd(eap, p, full, xp, compl)
#endif
#if defined(FEAT_EVAL) || defined(PROTO)
static struct cmdmod
{
char *name;
int minlen;
int has_count; /* :123verbose :3tab */
} cmdmods[] = {
{"aboveleft", 3, FALSE},
{"belowright", 3, FALSE},
{"botright", 2, FALSE},
{"browse", 3, FALSE},
{"confirm", 4, FALSE},
{"hide", 3, FALSE},
{"keepalt", 5, FALSE},
{"keepjumps", 5, FALSE},
{"keepmarks", 3, FALSE},
{"leftabove", 5, FALSE},
{"lockmarks", 3, FALSE},
{"rightbelow", 6, FALSE},
{"sandbox", 3, FALSE},
{"silent", 3, FALSE},
{"tab", 3, TRUE},
{"topleft", 2, FALSE},
{"verbose", 4, TRUE},
{"vertical", 4, FALSE},
};
/*
* Return length of a command modifier (including optional count).
* Return zero when it's not a modifier.
*/
int
modifier_len(cmd)
char_u *cmd;
{
int i, j;
char_u *p = cmd;
if (VIM_ISDIGIT(*cmd))
p = skipwhite(skipdigits(cmd));
for (i = 0; i < sizeof(cmdmods) / sizeof(struct cmdmod); ++i)
{
for (j = 0; p[j] != NUL; ++j)
if (p[j] != cmdmods[i].name[j])
break;
if (!isalpha(p[j]) && j >= cmdmods[i].minlen
&& (p == cmd || cmdmods[i].has_count))
return j + (p - cmd);
}
return 0;
}
/*
* Return > 0 if an Ex command "name" exists.
* Return 2 if there is an exact match.
@@ -2977,30 +3028,6 @@ cmd_exists(name)
int i;
int j;
char_u *p;
static struct cmdmod
{
char *name;
int minlen;
} cmdmods[] = {
{"aboveleft", 3},
{"belowright", 3},
{"botright", 2},
{"browse", 3},
{"confirm", 4},
{"hide", 3},
{"keepalt", 5},
{"keepjumps", 5},
{"keepmarks", 3},
{"leftabove", 5},
{"lockmarks", 3},
{"rightbelow", 6},
{"sandbox", 3},
{"silent", 3},
{"tab", 3},
{"topleft", 2},
{"verbose", 4},
{"vertical", 4},
};
/* Check command modifiers. */
for (i = 0; i < sizeof(cmdmods) / sizeof(struct cmdmod); ++i)

View File

@@ -2269,9 +2269,18 @@ ex_endfunction(eap)
has_loop_cmd(p)
char_u *p;
{
p = skipwhite(p);
while (*p == ':')
p = skipwhite(p + 1);
int len;
/* skip modifiers, white space and ':' */
for (;;)
{
while (*p == ' ' || *p == '\t' || *p == ':')
++p;
len = modifier_len(p);
if (len == 0)
break;
p += len;
}
if ((p[0] == 'w' && p[1] == 'h')
|| (p[0] == 'f' && p[1] == 'o' && p[2] == 'r'))
return TRUE;

View File

@@ -5,6 +5,7 @@ int do_cmdline __ARGS((char_u *cmdline, char_u *(*getline)(int, void *, int), vo
int getline_equal __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie, char_u *(*func)(int, void *, int)));
void *getline_cookie __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie));
int checkforcmd __ARGS((char_u **pp, char *cmd, int len));
int modifier_len __ARGS((char_u *cmd));
int cmd_exists __ARGS((char_u *name));
char_u *set_one_cmd_context __ARGS((expand_T *xp, char_u *buff));
char_u *skip_range __ARGS((char_u *cmd, int *ctx));

View File

@@ -666,6 +666,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
162,
/**/
161,
/**/