0
0
mirror of https://github.com/vim/vim.git synced 2025-09-27 04:14:06 -04:00

updated for version 7.4.654

Problem:    glob() and globpath() cannot include links to non-existing files.
            (Charles Campbell)
Solution:   Add an argument to include all links with glob(). (James McCoy)
            Also for globpath().
This commit is contained in:
Bram Moolenaar
2015-03-05 19:35:25 +01:00
parent e421450a5e
commit a245bc79b4
4 changed files with 35 additions and 19 deletions

View File

@@ -8141,8 +8141,8 @@ static struct fst
{"getwinposx", 0, 0, f_getwinposx}, {"getwinposx", 0, 0, f_getwinposx},
{"getwinposy", 0, 0, f_getwinposy}, {"getwinposy", 0, 0, f_getwinposy},
{"getwinvar", 2, 3, f_getwinvar}, {"getwinvar", 2, 3, f_getwinvar},
{"glob", 1, 3, f_glob}, {"glob", 1, 4, f_glob},
{"globpath", 2, 4, f_globpath}, {"globpath", 2, 5, f_globpath},
{"has", 1, 1, f_has}, {"has", 1, 1, f_has},
{"has_key", 2, 2, f_has_key}, {"has_key", 2, 2, f_has_key},
{"haslocaldir", 0, 0, f_haslocaldir}, {"haslocaldir", 0, 0, f_haslocaldir},
@@ -12412,12 +12412,17 @@ f_glob(argvars, rettv)
{ {
if (get_tv_number_chk(&argvars[1], &error)) if (get_tv_number_chk(&argvars[1], &error))
options |= WILD_KEEP_ALL; options |= WILD_KEEP_ALL;
if (argvars[2].v_type != VAR_UNKNOWN if (argvars[2].v_type != VAR_UNKNOWN)
&& get_tv_number_chk(&argvars[2], &error)) {
if (get_tv_number_chk(&argvars[2], &error))
{ {
rettv->v_type = VAR_LIST; rettv->v_type = VAR_LIST;
rettv->vval.v_list = NULL; rettv->vval.v_list = NULL;
} }
if (argvars[3].v_type != VAR_UNKNOWN
&& get_tv_number_chk(&argvars[3], &error))
options |= WILD_ALLLINKS;
}
} }
if (!error) if (!error)
{ {
@@ -12466,12 +12471,17 @@ f_globpath(argvars, rettv)
{ {
if (get_tv_number_chk(&argvars[2], &error)) if (get_tv_number_chk(&argvars[2], &error))
flags |= WILD_KEEP_ALL; flags |= WILD_KEEP_ALL;
if (argvars[3].v_type != VAR_UNKNOWN if (argvars[3].v_type != VAR_UNKNOWN)
&& get_tv_number_chk(&argvars[3], &error)) {
if (get_tv_number_chk(&argvars[3], &error))
{ {
rettv->v_type = VAR_LIST; rettv->v_type = VAR_LIST;
rettv->vval.v_list = NULL; rettv->vval.v_list = NULL;
} }
if (argvars[4].v_type != VAR_UNKNOWN
&& get_tv_number_chk(&argvars[4], &error))
flags |= WILD_ALLLINKS;
}
} }
if (file != NULL && !error) if (file != NULL && !error)
{ {

View File

@@ -4563,6 +4563,8 @@ ExpandFromContext(xp, pat, num_file, file, options)
flags |= EW_KEEPALL; flags |= EW_KEEPALL;
if (options & WILD_SILENT) if (options & WILD_SILENT)
flags |= EW_SILENT; flags |= EW_SILENT;
if (options & WILD_ALLLINKS)
flags |= EW_ALLLINKS;
if (xp->xp_context == EXPAND_FILES if (xp->xp_context == EXPAND_FILES
|| xp->xp_context == EXPAND_DIRECTORIES || xp->xp_context == EXPAND_DIRECTORIES

View File

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

View File

@@ -814,15 +814,16 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
#define WILD_LONGEST 7 #define WILD_LONGEST 7
#define WILD_ALL_KEEP 8 #define WILD_ALL_KEEP 8
#define WILD_LIST_NOTFOUND 1 #define WILD_LIST_NOTFOUND 0x01
#define WILD_HOME_REPLACE 2 #define WILD_HOME_REPLACE 0x02
#define WILD_USE_NL 4 #define WILD_USE_NL 0x04
#define WILD_NO_BEEP 8 #define WILD_NO_BEEP 0x08
#define WILD_ADD_SLASH 16 #define WILD_ADD_SLASH 0x10
#define WILD_KEEP_ALL 32 #define WILD_KEEP_ALL 0x20
#define WILD_SILENT 64 #define WILD_SILENT 0x40
#define WILD_ESCAPE 128 #define WILD_ESCAPE 0x80
#define WILD_ICASE 256 #define WILD_ICASE 0x100
#define WILD_ALLLINKS 0x200
/* Flags for expand_wildcards() */ /* Flags for expand_wildcards() */
#define EW_DIR 0x01 /* include directory names */ #define EW_DIR 0x01 /* include directory names */
@@ -839,6 +840,7 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
#define EW_KEEPDOLLAR 0x800 /* do not escape $, $var is expanded */ #define EW_KEEPDOLLAR 0x800 /* do not escape $, $var is expanded */
/* Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND /* Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND
* is used when executing commands and EW_SILENT for interactive expanding. */ * is used when executing commands and EW_SILENT for interactive expanding. */
#define EW_ALLLINKS 0x1000 /* also links not pointing to existing file */
/* Flags for find_file_*() functions. */ /* Flags for find_file_*() functions. */
#define FINDFILE_FILE 0 /* only files */ #define FINDFILE_FILE 0 /* only files */