summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvimboss <devnull@localhost>2007-11-24 20:50:24 +0000
committervimboss <devnull@localhost>2007-11-24 20:50:24 +0000
commitba07e50fd6429887a37546992c0e55b3e844932b (patch)
tree3e599e7af4b35de77f73fcac11422bf2794e23e8
parentbcbfdf607230f9f332b3988828cf3ee940d23bf7 (diff)
downloadvim-ba07e50fd6429887a37546992c0e55b3e844932b.tar.gz
updated for version 7.1-162v7.1.162v7-1-162
-rw-r--r--src/ex_docmd.c75
-rw-r--r--src/ex_eval.c15
-rw-r--r--src/proto/ex_docmd.pro1
-rw-r--r--src/version.c2
4 files changed, 66 insertions, 27 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index a6186f4d..140fdca3 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -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)
diff --git a/src/ex_eval.c b/src/ex_eval.c
index 1523d8f1..a821ef85 100644
--- a/src/ex_eval.c
+++ b/src/ex_eval.c
@@ -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;
diff --git a/src/proto/ex_docmd.pro b/src/proto/ex_docmd.pro
index 22a0f103..5835db09 100644
--- a/src/proto/ex_docmd.pro
+++ b/src/proto/ex_docmd.pro
@@ -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));
diff --git a/src/version.c b/src/version.c
index 846eb451..a60feae0 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 162,
+/**/
161,
/**/
160,