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