changeset 9798:e34e4547f3d1 v7.4.2174

commit https://github.com/vim/vim/commit/c8ce615299b4d8c1b2e6cf83496f48cd497d8a37 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Aug 7 13:48:20 2016 +0200 patch 7.4.2174 Problem: Adding duplicate flags to 'whichwrap' leaves commas behind. Solution: Also remove the commas. (Naruhiko Nishino)
author Christian Brabandt <cb@256bit.org>
date Sun, 07 Aug 2016 14:00:06 +0200
parents ab17b539c1ba
children 1a0aaf938854
files src/Makefile src/option.c src/testdir/Make_all.mak src/testdir/test_alot.vim src/testdir/test_options.in src/testdir/test_options.ok src/testdir/test_options.vim src/version.c
diffstat 8 files changed, 66 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/src/Makefile
+++ b/src/Makefile
@@ -2031,7 +2031,6 @@ test1 \
 	test_mapping \
 	test_marks \
 	test_nested_function \
-	test_options \
 	test_search_mbyte \
 	test_signs \
 	test_tagcase \
@@ -2101,6 +2100,7 @@ test_arglist \
 	test_menu \
 	test_messages \
 	test_netbeans \
+	test_options \
 	test_packadd \
 	test_partial \
 	test_perl \
--- a/src/option.c
+++ b/src/option.c
@@ -4919,12 +4919,30 @@ do_set(
 			    {
 				/* Remove flags that appear twice. */
 				for (s = newval; *s; ++s)
-				    if ((!(flags & P_COMMA) || *s != ',')
-					    && vim_strchr(s + 1, *s) != NULL)
+				{
+				    /* if options have P_FLAGLIST and
+				     * P_ONECOMMA such as 'whichwrap' */
+				    if (flags & P_ONECOMMA)
 				    {
-					STRMOVE(s, s + 1);
-					--s;
+					if (*s != ',' && *(s + 1) == ','
+					      && vim_strchr(s + 2, *s) != NULL)
+					{
+					    /* Remove the duplicated value and
+					     * the next comma. */
+					    STRMOVE(s, s + 2);
+					    s -= 2;
+					}
 				    }
+				    else
+				    {
+					if ((!(flags & P_COMMA) || *s != ',')
+					      && vim_strchr(s + 1, *s) != NULL)
+					{
+					    STRMOVE(s, s + 1);
+					    --s;
+					}
+				    }
+				}
 			    }
 
 			    if (save_arg != NULL)   /* number for 'whichwrap' */
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -101,7 +101,6 @@ SCRIPTS_ALL = \
 	test_mapping.out \
 	test_marks.out \
 	test_nested_function.out \
-	test_options.out \
 	test_search_mbyte.out \
 	test_signs.out \
 	test_tagcase.out \
--- a/src/testdir/test_alot.vim
+++ b/src/testdir/test_alot.vim
@@ -38,3 +38,4 @@ source test_timers.vim
 source test_true_false.vim
 source test_unlet.vim
 source test_window_cmd.vim
+source test_options.vim
deleted file mode 100644
--- a/src/testdir/test_options.in
+++ /dev/null
@@ -1,23 +0,0 @@
-Test for ":options".
-
-STARTTEST
-:so small.vim
-:let caught = 'ok'
-:try
-  :options
-:catch 
-  :let caught = v:throwpoint . "\n" . v:exception
-:endtry
-:buf 1
-:$put =caught
-:"
-:" Test that changing 'path' keeps two commas.
-:set path=foo,,bar
-:set path-=bar
-:set path+=bar
-:$put =&path
-:/^result/,$w! test.out
-:qa!
-ENDTEST
-
-result
deleted file mode 100644
--- a/src/testdir/test_options.ok
+++ /dev/null
@@ -1,3 +0,0 @@
-result
-ok
-foo,,bar
new file mode 100644
--- /dev/null
+++ b/src/testdir/test_options.vim
@@ -0,0 +1,40 @@
+" Test for options
+
+function! Test_whichwrap()
+  set whichwrap=b,s
+  call assert_equal('b,s', &whichwrap)
+
+  set whichwrap+=h,l
+  call assert_equal('b,s,h,l', &whichwrap)
+
+  set whichwrap+=h,l
+  call assert_equal('b,s,h,l', &whichwrap)
+
+  set whichwrap+=h,l
+  call assert_equal('b,s,h,l', &whichwrap)
+
+  set whichwrap&
+endfunction
+
+function! Test_options()
+  let caught = 'ok'
+  try
+    options
+  catch
+    let caught = v:throwpoint . "\n" . v:exception
+  endtry
+  call assert_equal('ok', caught)
+
+  " close option-window
+  close
+endfunction
+
+function! Test_path_keep_commas()
+  " Test that changing 'path' keeps two commas.
+  set path=foo,,bar
+  set path-=bar
+  set path+=bar
+  call assert_equal('foo,,bar', &path)
+
+  set path&
+endfunction
--- a/src/version.c
+++ b/src/version.c
@@ -764,6 +764,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2174,
+/**/
     2173,
 /**/
     2172,