summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-08-02 19:52:15 +0200
committerBram Moolenaar <Bram@vim.org>2019-08-02 19:52:15 +0200
commit50f91d22bd81819d5d946f6c38252c7922120ec6 (patch)
treed912f1df29edd7983c990f5a64049ba71a4be6b8
parent8750026a7f6b445c43adc990141a3fe92d680b62 (diff)
downloadvim-git-50f91d22bd81819d5d946f6c38252c7922120ec6.tar.gz
patch 8.1.1791: 'completeslash' also applies to globpath()v8.1.1791
Problem: 'completeslash' also applies to globpath(). Solution: Add the WILD_IGNORE_COMPLETESLASH flag. (test by Yasuhiro Matsumoto, closes #4760)
-rw-r--r--src/evalfunc.c6
-rw-r--r--src/ex_getln.c4
-rw-r--r--src/testdir/test_ins_complete.vim12
-rw-r--r--src/version.c2
-rw-r--r--src/vim.h21
5 files changed, 25 insertions, 20 deletions
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 7eff7ad35..54fc2f548 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -5878,15 +5878,15 @@ f_glob(typval_T *argvars, typval_T *rettv)
static void
f_globpath(typval_T *argvars, typval_T *rettv)
{
- int flags = 0;
+ int flags = WILD_IGNORE_COMPLETESLASH;
char_u buf1[NUMBUFLEN];
char_u *file = tv_get_string_buf_chk(&argvars[1], buf1);
int error = FALSE;
garray_T ga;
int i;
- /* When the optional second argument is non-zero, don't remove matches
- * for 'wildignore' and don't put matches for 'suffixes' at the end. */
+ // When the optional second argument is non-zero, don't remove matches
+ // for 'wildignore' and don't put matches for 'suffixes' at the end.
rettv->v_type = VAR_STRING;
if (argvars[2].v_type != VAR_UNKNOWN)
{
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 7ef304ddb..0e5d2baa6 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -5032,7 +5032,7 @@ ExpandFromContext(
char_u *pat,
int *num_file,
char_u ***file,
- int options) /* EW_ flags */
+ int options) // WILD_ flags
{
#ifdef FEAT_CMDL_COMPL
regmatch_T regmatch;
@@ -5096,7 +5096,7 @@ ExpandFromContext(
if (free_pat)
vim_free(pat);
#ifdef BACKSLASH_IN_FILENAME
- if (p_csl[0] != NUL)
+ if (p_csl[0] != NUL && (options & WILD_IGNORE_COMPLETESLASH) == 0)
{
int i;
diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim
index fedb38acb..e48a72c5d 100644
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -1,3 +1,4 @@
+source check.vim
" Test for insert expansion
func Test_ins_complete()
@@ -334,15 +335,11 @@ endfunc
" Test for insert path completion with completeslash option
func Test_ins_completeslash()
- if !has('win32')
- throw 'Skipped: only works on MS-Windows'
- endif
+ CheckMSWindows
call mkdir('Xdir')
-
let orig_shellslash = &shellslash
set cpt&
-
new
set noshellslash
@@ -375,6 +372,11 @@ func Test_ins_completeslash()
%bw!
call delete('Xdir', 'rf')
+ set noshellslash
+ set completeslash=slash
+ call assert_true(stridx(globpath(&rtp, 'syntax/*.vim', 1, 1)[0], '\') != -1)
+
let &shellslash = orig_shellslash
+ set completeslash=
endfunc
diff --git a/src/version.c b/src/version.c
index 81f59f944..e93ef430b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -774,6 +774,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1791,
+/**/
1790,
/**/
1789,
diff --git a/src/vim.h b/src/vim.h
index 99ffc10b7..6f7a11d63 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -785,16 +785,17 @@ extern int (*dyn_libintl_wputenv)(const wchar_t *envstring);
#define WILD_LONGEST 7
#define WILD_ALL_KEEP 8
-#define WILD_LIST_NOTFOUND 0x01
-#define WILD_HOME_REPLACE 0x02
-#define WILD_USE_NL 0x04
-#define WILD_NO_BEEP 0x08
-#define WILD_ADD_SLASH 0x10
-#define WILD_KEEP_ALL 0x20
-#define WILD_SILENT 0x40
-#define WILD_ESCAPE 0x80
-#define WILD_ICASE 0x100
-#define WILD_ALLLINKS 0x200
+#define WILD_LIST_NOTFOUND 0x01
+#define WILD_HOME_REPLACE 0x02
+#define WILD_USE_NL 0x04
+#define WILD_NO_BEEP 0x08
+#define WILD_ADD_SLASH 0x10
+#define WILD_KEEP_ALL 0x20
+#define WILD_SILENT 0x40
+#define WILD_ESCAPE 0x80
+#define WILD_ICASE 0x100
+#define WILD_ALLLINKS 0x200
+#define WILD_IGNORE_COMPLETESLASH 0x400
// Flags for expand_wildcards()
#define EW_DIR 0x01 // include directory names