summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-08-07 13:48:20 +0200
committerBram Moolenaar <Bram@vim.org>2016-08-07 13:48:20 +0200
commitc8ce615299b4d8c1b2e6cf83496f48cd497d8a37 (patch)
tree8999cef1f862e02a9c3fbf742c278e618502b16b
parent3321e9d8a36c91c62d8ba3d43430b5c213b87f8b (diff)
patch 7.4.2174v7.4.2174
Problem: Adding duplicate flags to 'whichwrap' leaves commas behind. Solution: Also remove the commas. (Naruhiko Nishino)
-rw-r--r--src/Makefile2
-rw-r--r--src/option.c26
-rw-r--r--src/testdir/Make_all.mak1
-rw-r--r--src/testdir/test_alot.vim1
-rw-r--r--src/testdir/test_options.in23
-rw-r--r--src/testdir/test_options.ok3
-rw-r--r--src/testdir/test_options.vim40
-rw-r--r--src/version.c2
8 files changed, 66 insertions, 32 deletions
diff --git a/src/Makefile b/src/Makefile
index 33d8b8c53c..ada714d279 100644
--- 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
index b9b59eefd0..ff7973fd40 100644
--- 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)
+ {
+ 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
{
- STRMOVE(s, s + 1);
- --s;
+ 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
index e7e4c680aa..02f2611086 100644
--- 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
index 0245fadb45..8dd698478d 100644
--- 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
index 6e56fa2427..0000000000
--- 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
index 07731526bc..0000000000
--- 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
index 0000000000..cceb180189
--- /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
index 9cf031bdff..f2d1c79e33 100644
--- 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,