Mercurial > vim
diff src/viminfo.c @ 19102:ba9f50bfda83 v8.2.0111
patch 8.2.0111: VAR_SPECIAL is also used for booleans
Commit: https://github.com/vim/vim/commit/9b4a15d5dba354d2e1e02871470bad103f34769a
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Jan 11 16:05:23 2020 +0100
patch 8.2.0111: VAR_SPECIAL is also used for booleans
Problem: VAR_SPECIAL is also used for booleans.
Solution: Add VAR_BOOL for better type checking.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 11 Jan 2020 16:15:04 +0100 |
parents | de2d1820215a |
children | 94eda51ba9ba |
line wrap: on
line diff
--- a/src/viminfo.c +++ b/src/viminfo.c @@ -1233,7 +1233,12 @@ read_viminfo_varlist(vir_T *virp, int wr (void)string2float(tab + 1, &tv.vval.v_float); #endif else + { tv.vval.v_number = atol((char *)tab + 1); + if (type == VAR_SPECIAL && (tv.vval.v_number == VVAL_FALSE + || tv.vval.v_number == VVAL_TRUE)) + tv.v_type = VAR_BOOL; + } if (type == VAR_DICT || type == VAR_LIST) { typval_T *etv = eval_expr(tv.vval.v_string, NULL); @@ -1312,12 +1317,13 @@ write_viminfo_varlist(FILE *fp) { switch (this_var->di_tv.v_type) { - case VAR_STRING: s = "STR"; break; - case VAR_NUMBER: s = "NUM"; break; - case VAR_FLOAT: s = "FLO"; break; - case VAR_DICT: s = "DIC"; break; - case VAR_LIST: s = "LIS"; break; - case VAR_BLOB: s = "BLO"; break; + case VAR_STRING: s = "STR"; break; + case VAR_NUMBER: s = "NUM"; break; + case VAR_FLOAT: s = "FLO"; break; + case VAR_DICT: s = "DIC"; break; + case VAR_LIST: s = "LIS"; break; + case VAR_BLOB: s = "BLO"; break; + case VAR_BOOL: s = "XPL"; break; // backwards compat. case VAR_SPECIAL: s = "XPL"; break; case VAR_UNKNOWN: @@ -1328,8 +1334,10 @@ write_viminfo_varlist(FILE *fp) continue; } fprintf(fp, "!%s\t%s\t", this_var->di_key, s); - if (this_var->di_tv.v_type == VAR_SPECIAL) + if (this_var->di_tv.v_type == VAR_BOOL + || this_var->di_tv.v_type == VAR_SPECIAL) { + // do not use "v:true" but "1" sprintf((char *)numbuf, "%ld", (long)this_var->di_tv.vval.v_number); p = numbuf;