# HG changeset patch # User Christian Brabandt # Date 1470571206 -7200 # Node ID e34e4547f3d1af36261e2decf49563aa1c7b5a29 # Parent ab17b539c1bafb6809eb5641fe84a67331c581e4 commit https://github.com/vim/vim/commit/c8ce615299b4d8c1b2e6cf83496f48cd497d8a37 Author: Bram Moolenaar 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) diff --git a/src/Makefile b/src/Makefile --- 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 \ diff --git a/src/option.c b/src/option.c --- 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' */ diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak --- 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 \ diff --git a/src/testdir/test_alot.vim b/src/testdir/test_alot.vim --- 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 diff --git a/src/testdir/test_options.in b/src/testdir/test_options.in 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 diff --git a/src/testdir/test_options.ok b/src/testdir/test_options.ok deleted file mode 100644 --- a/src/testdir/test_options.ok +++ /dev/null @@ -1,3 +0,0 @@ -result -ok -foo,,bar diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim 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 diff --git a/src/version.c b/src/version.c --- 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,