changeset 20148:fadb7f84beff v8.2.0629

patch 8.2.0629: setting a boolean option to v:false does not work Commit: https://github.com/vim/vim/commit/65d032c779a43b767497e15e6a32d04a6a8fa65d Author: Bram Moolenaar <Bram@vim.org> Date: Fri Apr 24 20:57:01 2020 +0200 patch 8.2.0629: setting a boolean option to v:false does not work Problem: Setting a boolean option to v:false does not work. Solution: Do not use the string representation of the value. (Christian Brabandt, closes #5974)
author Bram Moolenaar <Bram@vim.org>
date Fri, 24 Apr 2020 21:00:04 +0200
parents fe776cc8b871
children 03548bf8e65a
files src/evalvars.c src/testdir/test_options.vim src/version.c
diffstat 3 files changed, 22 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -1251,13 +1251,15 @@ ex_let_one(
 	    int		opt_type;
 	    long	numval;
 	    char_u	*stringval = NULL;
-	    char_u	*s;
+	    char_u	*s = NULL;
 
 	    c1 = *p;
 	    *p = NUL;
 
 	    n = (long)tv_get_number(tv);
-	    s = tv_get_string_chk(tv);	    // != NULL if number or string
+	    // avoid setting a string option to the text "v:false" or similar.
+	    if (tv->v_type != VAR_BOOL && tv->v_type != VAR_SPECIAL)
+		s = tv_get_string_chk(tv);	// != NULL if number or string
 	    if (s != NULL && op != NULL && *op != '=')
 	    {
 		opt_type = get_option_value(arg, &numval,
@@ -1289,7 +1291,8 @@ ex_let_one(
 		    }
 		}
 	    }
-	    if (s != NULL)
+	    if (s != NULL || tv->v_type == VAR_BOOL
+						  || tv->v_type == VAR_SPECIAL)
 	    {
 		set_option_value(arg, n, s, opt_flags);
 		arg_end = p;
--- a/src/testdir/test_options.vim
+++ b/src/testdir/test_options.vim
@@ -899,4 +899,18 @@ func Test_opt_num_op()
   set shiftwidth&
 endfunc
 
+" Test for setting option values using v:false and v:true
+func Test_opt_boolean()
+  set number&
+  set number
+  call assert_equal(1, &nu)
+  set nonu
+  call assert_equal(0, &nu)
+  let &nu = v:true
+  call assert_equal(1, &nu)
+  let &nu = v:false
+  call assert_equal(0, &nu)
+  set number&
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    629,
+/**/
     628,
 /**/
     627,