]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.237 v7.3.237
authorBram Moolenaar <Bram@vim.org>
Sun, 26 Jun 2011 17:40:23 +0000 (19:40 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 26 Jun 2011 17:40:23 +0000 (19:40 +0200)
Problem:    "filetype" completion doesn't work on Windows. (Yue Wu)
Solution:   Don't use a glob pattern for the directories, use a list of
            directories. (Dominique Pelle)

src/ex_getln.c
src/version.c

index d3ac8593f2e44ffb30d97129619d5f76c880507b..85f8cfac101c815638656bb344ae06423024b747 100644 (file)
@@ -110,7 +110,7 @@ static int  ExpandFromContext __ARGS((expand_T *xp, char_u *, int *, char_u ***,
 static int     expand_showtail __ARGS((expand_T *xp));
 #ifdef FEAT_CMDL_COMPL
 static int     expand_shellcmd __ARGS((char_u *filepat, int *num_file, char_u ***file, int flagsarg));
-static int     ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname));
+static int     ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname[]));
 # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
 static int     ExpandUserDefined __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file));
 static int     ExpandUserList __ARGS((expand_T *xp, int *num_file, char_u ***file));
@@ -4536,13 +4536,25 @@ ExpandFromContext(xp, pat, num_file, file, options)
            || xp->xp_context == EXPAND_TAGS_LISTFILES)
        return expand_tags(xp->xp_context == EXPAND_TAGS, pat, num_file, file);
     if (xp->xp_context == EXPAND_COLORS)
-       return ExpandRTDir(pat, num_file, file, "colors");
+    {
+       char *directories[] = {"colors", NULL};
+       return ExpandRTDir(pat, num_file, file, directories);
+    }
     if (xp->xp_context == EXPAND_COMPILER)
-       return ExpandRTDir(pat, num_file, file, "compiler");
+    {
+       char *directories[] = {"colors", NULL};
+       return ExpandRTDir(pat, num_file, file, directories);
+    }
     if (xp->xp_context == EXPAND_OWNSYNTAX)
-       return ExpandRTDir(pat, num_file, file, "syntax");
+    {
+       char *directories[] = {"syntax", NULL};
+       return ExpandRTDir(pat, num_file, file, directories);
+    }
     if (xp->xp_context == EXPAND_FILETYPE)
-       return ExpandRTDir(pat, num_file, file, "{syntax,indent,ftplugin}");
+    {
+       char *directories[] = {"syntax", "indent", "ftplugin", NULL};
+       return ExpandRTDir(pat, num_file, file, directories);
+    }
 # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
     if (xp->xp_context == EXPAND_USER_LIST)
        return ExpandUserList(xp, num_file, file);
@@ -4995,57 +5007,68 @@ ExpandUserList(xp, num_file, file)
 /*
  * Expand color scheme, compiler or filetype names:
  * 'runtimepath'/{dirnames}/{pat}.vim
- * dirnames may contain one directory (ex: "colorscheme") or can be a glob
- * expression matching multiple directories (ex: "{syntax,ftplugin,indent}").
+ * "dirnames" is an array with one or more directory names.
  */
     static int
 ExpandRTDir(pat, num_file, file, dirnames)
     char_u     *pat;
     int                *num_file;
     char_u     ***file;
-    char       *dirnames;
+    char       *dirnames[];
 {
-    char_u     *all;
+    char_u     *matches;
     char_u     *s;
     char_u     *e;
     garray_T   ga;
+    int                i;
+    int                pat_len;
 
     *num_file = 0;
     *file = NULL;
-    s = alloc((unsigned)(STRLEN(pat) + STRLEN(dirnames) + 7));
-    if (s == NULL)
-       return FAIL;
-    sprintf((char *)s, "%s/%s*.vim", dirnames, pat);
-    all = globpath(p_rtp, s, 0);
-    vim_free(s);
-    if (all == NULL)
-       return FAIL;
+    pat_len = STRLEN(pat);
+    ga_init2(&ga, (int)sizeof(char *), 10);
 
-    ga_init2(&ga, (int)sizeof(char *), 3);
-    for (s = all; *s != NUL; s = e)
+    for (i = 0; dirnames[i] != NULL; ++i)
     {
-       e = vim_strchr(s, '\n');
-       if (e == NULL)
-           e = s + STRLEN(s);
-       if (ga_grow(&ga, 1) == FAIL)
-           break;
-       if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0)
+       s = alloc((unsigned)(STRLEN(dirnames[i]) + pat_len + 7));
+       if (s == NULL)
        {
-           for (s = e - 4; s > all; mb_ptr_back(all, s))
-               if (*s == '\n' || vim_ispathsep(*s))
-                   break;
-           ++s;
-           ((char_u **)ga.ga_data)[ga.ga_len] =
+           ga_clear_strings(&ga);
+           return FAIL;
+       }
+       sprintf((char *)s, "%s/%s*.vim", dirnames[i], pat);
+       matches = globpath(p_rtp, s, 0);
+       vim_free(s);
+       if (matches == NULL)
+           continue;
+
+       for (s = matches; *s != NUL; s = e)
+       {
+           e = vim_strchr(s, '\n');
+           if (e == NULL)
+               e = s + STRLEN(s);
+           if (ga_grow(&ga, 1) == FAIL)
+               break;
+           if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0)
+           {
+               for (s = e - 4; s > matches; mb_ptr_back(matches, s))
+                   if (*s == '\n' || vim_ispathsep(*s))
+                       break;
+               ++s;
+               ((char_u **)ga.ga_data)[ga.ga_len] =
                                            vim_strnsave(s, (int)(e - s - 4));
-           ++ga.ga_len;
+               ++ga.ga_len;
+           }
+           if (*e != NUL)
+               ++e;
        }
-       if (*e != NUL)
-           ++e;
+       vim_free(matches);
     }
-    vim_free(all);
+    if (ga.ga_len == 0)
+        return FAIL;
 
     /* Sort and remove duplicates which can happen when specifying multiple
-     * directories in dirnames such as "{syntax,ftplugin,indent}". */
+     * directories in dirnames. */
     remove_duplicates(&ga);
 
     *file = ga.ga_data;
index a022ccde4cef6a585e5cedf9d4764677528ee384..731a46dd393852327626f88d0d81e2df3db0921c 100644 (file)
@@ -709,6 +709,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    237,
 /**/
     236,
 /**/