0
0
mirror of https://github.com/vim/vim.git synced 2025-07-04 23:07:33 -04:00

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)
This commit is contained in:
Bram Moolenaar 2020-04-24 20:57:01 +02:00
parent e71ebb46a2
commit 65d032c779
3 changed files with 22 additions and 3 deletions

View File

@ -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;

View File

@ -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

View File

@ -746,6 +746,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
629,
/**/
628,
/**/