# HG changeset patch # User Bram Moolenaar # Date 1609686003 -3600 # Node ID 198ad7ef2420ed4339515c3f50777bf3319270f0 # Parent bf49220e07b232759258ff078cfb6c53fb253ec9 patch 8.2.2285: Vim9: cannot set an option to a false Commit: https://github.com/vim/vim/commit/b0d8182fa39f2c9403f5f9a0663589fcab43a6c8 Author: Bram Moolenaar Date: Sun Jan 3 15:55:10 2021 +0100 patch 8.2.2285: Vim9: cannot set an option to a false Problem: Vim9: cannot set an option to a false. Solution: For VAR_BOOL use string "0". (closes https://github.com/vim/vim/issues/7603) diff --git a/src/evalvars.c b/src/evalvars.c --- a/src/evalvars.c +++ b/src/evalvars.c @@ -3509,10 +3509,16 @@ set_option_from_tv(char_u *varname, typv int error = FALSE; if (varp->v_type == VAR_BOOL) + { numval = (long)varp->vval.v_number; - else if (!in_vim9script() || varp->v_type != VAR_STRING) - numval = (long)tv_get_number_chk(varp, &error); - strval = tv_get_string_buf_chk(varp, nbuf); + strval = (char_u *)"0"; // avoid using "false" + } + else + { + if (!in_vim9script() || varp->v_type != VAR_STRING) + numval = (long)tv_get_number_chk(varp, &error); + strval = tv_get_string_buf_chk(varp, nbuf); + } if (!error && strval != NULL) set_option_value(varname, numval, strval, OPT_LOCAL); } diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim --- a/src/testdir/test_vim9_builtin.vim +++ b/src/testdir/test_vim9_builtin.vim @@ -662,6 +662,8 @@ def Test_setbufvar() settabwinvar(1, 1, '&ts', 15) &ts->assert_equal(15) setlocal ts=8 + settabwinvar(1, 1, '&list', false) + &list->assert_equal(false) settabwinvar(1, 1, '&list', true) &list->assert_equal(true) setlocal list& diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2285, +/**/ 2284, /**/ 2283,