| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.237 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.3.237 |
| 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) |
| Files: src/ex_getln.c |
| |
| |
| |
| |
| |
| *** 110,116 **** |
| 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)); |
| # 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)); |
| --- 110,116 ---- |
| 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[])); |
| # 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,4548 **** |
| || 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"); |
| if (xp->xp_context == EXPAND_COMPILER) |
| ! return ExpandRTDir(pat, num_file, file, "compiler"); |
| if (xp->xp_context == EXPAND_OWNSYNTAX) |
| ! return ExpandRTDir(pat, num_file, file, "syntax"); |
| if (xp->xp_context == EXPAND_FILETYPE) |
| ! return ExpandRTDir(pat, num_file, file, "{syntax,indent,ftplugin}"); |
| # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL) |
| if (xp->xp_context == EXPAND_USER_LIST) |
| return ExpandUserList(xp, num_file, file); |
| --- 4536,4560 ---- |
| || xp->xp_context == EXPAND_TAGS_LISTFILES) |
| return expand_tags(xp->xp_context == EXPAND_TAGS, pat, num_file, file); |
| if (xp->xp_context == EXPAND_COLORS) |
| ! { |
| ! char *directories[] = {"colors", NULL}; |
| ! return ExpandRTDir(pat, num_file, file, directories); |
| ! } |
| if (xp->xp_context == EXPAND_COMPILER) |
| ! { |
| ! char *directories[] = {"colors", NULL}; |
| ! return ExpandRTDir(pat, num_file, file, directories); |
| ! } |
| if (xp->xp_context == EXPAND_OWNSYNTAX) |
| ! { |
| ! char *directories[] = {"syntax", NULL}; |
| ! return ExpandRTDir(pat, num_file, file, directories); |
| ! } |
| if (xp->xp_context == EXPAND_FILETYPE) |
| ! { |
| ! 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,5051 **** |
| /* |
| * 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}"). |
| */ |
| static int |
| ExpandRTDir(pat, num_file, file, dirnames) |
| char_u *pat; |
| int *num_file; |
| char_u ***file; |
| ! char *dirnames; |
| { |
| ! char_u *all; |
| char_u *s; |
| char_u *e; |
| garray_T ga; |
| |
| *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; |
| |
| ! ga_init2(&ga, (int)sizeof(char *), 3); |
| ! for (s = all; *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 > all; mb_ptr_back(all, 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; |
| } |
| ! if (*e != NUL) |
| ! ++e; |
| } |
| ! vim_free(all); |
| |
| /* Sort and remove duplicates which can happen when specifying multiple |
| ! * directories in dirnames such as "{syntax,ftplugin,indent}". */ |
| remove_duplicates(&ga); |
| |
| *file = ga.ga_data; |
| --- 5007,5074 ---- |
| /* |
| * Expand color scheme, compiler or filetype names: |
| * 'runtimepath'/{dirnames}/{pat}.vim |
| ! * "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_u *matches; |
| char_u *s; |
| char_u *e; |
| garray_T ga; |
| + int i; |
| + int pat_len; |
| |
| *num_file = 0; |
| *file = NULL; |
| ! pat_len = STRLEN(pat); |
| ! ga_init2(&ga, (int)sizeof(char *), 10); |
| |
| ! for (i = 0; dirnames[i] != NULL; ++i) |
| { |
| ! s = alloc((unsigned)(STRLEN(dirnames[i]) + pat_len + 7)); |
| ! if (s == NULL) |
| { |
| ! 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; |
| ! } |
| ! if (*e != NUL) |
| ! ++e; |
| } |
| ! vim_free(matches); |
| } |
| ! if (ga.ga_len == 0) |
| ! return FAIL; |
| |
| /* Sort and remove duplicates which can happen when specifying multiple |
| ! * directories in dirnames. */ |
| remove_duplicates(&ga); |
| |
| *file = ga.ga_data; |
| |
| |
| |
| *** 711,712 **** |
| --- 711,714 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 237, |
| /**/ |
| |
| -- |
| hundred-and-one symptoms of being an internet addict: |
| 230. You spend your Friday nights typing away at your keyboard |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ an exciting new programming language -- http://www.Zimbu.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |