Mercurial > vim
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