changeset 7426:779a7c14c795 v7.4.1017

commit https://github.com/vim/vim/commit/8f79acdf7ede2693fbda53c3c9693f16db4f193b Author: Bram Moolenaar <Bram@vim.org> Date: Fri Jan 1 14:48:20 2016 +0100 patch 7.4.1017 Problem: When there is a backslash in an option ":set -=" doesn't work. Solution: Handle a backslash better. (Jacob Niehus) Add a new test, merge in old test.
author Christian Brabandt <cb@256bit.org>
date Fri, 01 Jan 2016 15:00:04 +0100
parents 5066591daabe
children 87b3354dae70
files src/Makefile src/option.c src/testdir/test_alot.vim src/testdir/test_cdo.vim src/testdir/test_set.in src/testdir/test_set.ok src/testdir/test_set.vim src/version.c
diffstat 8 files changed, 40 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/src/Makefile
+++ b/src/Makefile
@@ -1958,7 +1958,6 @@ test1 \
 	test_qf_title \
 	test_ruby \
 	test_search_mbyte \
-	test_set \
 	test_signs \
 	test_tagcase \
 	test_textobjects \
@@ -1980,6 +1979,7 @@ test1 \
 test_assert \
 	test_cdo \
 	test_searchpos \
+	test_set \
 	test_sort \
 	test_undolevels \
 	test_viml \
--- a/src/option.c
+++ b/src/option.c
@@ -4839,9 +4839,15 @@ do_set(arg, opt_flags)
 						|| s[i] == NUL))
 					break;
 				    /* Count backslashes.  Only a comma with an
-				     * even number of backslashes before it is
-				     * recognized as a separator */
-				    if (s > origval && s[-1] == '\\')
+				     * even number of backslashes or a single
+				     * backslash preceded by a comma before it
+				     * is recognized as a separator */
+				    if ((s > origval + 1
+						&& s[-1] == '\\'
+						&& s[-2] != ',')
+					    || (s == origval + 1
+						&& s[-1] == '\\'))
+
 					++bs;
 				    else
 					bs = 0;
--- a/src/testdir/test_alot.vim
+++ b/src/testdir/test_alot.vim
@@ -3,5 +3,6 @@
 
 source test_lispwords.vim
 source test_searchpos.vim
+source test_set.vim
 source test_sort.vim
 source test_undolevels.vim
--- a/src/testdir/test_cdo.vim
+++ b/src/testdir/test_cdo.vim
@@ -1,6 +1,5 @@
 " Tests for the :cdo, :cfdo, :ldo and :lfdo commands
 
-lang mess C
 if !has('quickfix')
   finish
 endif
deleted file mode 100644
--- a/src/testdir/test_set.in
+++ /dev/null
@@ -1,12 +0,0 @@
-Tests for :set     vim: set ft=vim :
-
-STARTTEST
-:so small.vim
-:set wildignore=*.png,
-:set wildignore+=*.jpg
-:$put =&wildignore
-:/^Output goes here/+1,$w! test.out
-:qa!
-ENDTEST
-
-Output goes here
deleted file mode 100644
--- a/src/testdir/test_set.ok
+++ /dev/null
@@ -1,1 +0,0 @@
-*.png,*.jpg
new file mode 100644
--- /dev/null
+++ b/src/testdir/test_set.vim
@@ -0,0 +1,27 @@
+" Tests for the :set command
+
+function Test_set_backslash()
+  let isk_save = &isk
+
+  set isk=a,b,c
+  set isk+=d
+  call assert_equal('a,b,c,d', &isk)
+  set isk+=\\,e
+  call assert_equal('a,b,c,d,\,e', &isk)
+  set isk-=e
+  call assert_equal('a,b,c,d,\', &isk)
+  set isk-=\\
+  call assert_equal('a,b,c,d', &isk)
+
+  let &isk = isk_save
+endfunction
+
+function Test_set_add()
+  let wig_save = &wig
+
+  set wildignore=*.png,
+  set wildignore+=*.jpg
+  call assert_equal('*.png,*.jpg', &wig)
+
+  let &wig = wig_save
+endfunction
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1017,
+/**/
     1016,
 /**/
     1015,