Mercurial > vim
changeset 21857:1f6dc5b953c4 v8.2.1478
patch 8.2.1478: Vim9: cannot use "true" for some popup options
Commit: https://github.com/vim/vim/commit/558813314d63dd0263a7a86c0496c1e89b5c8cba
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Aug 18 13:04:15 2020 +0200
patch 8.2.1478: Vim9: cannot use "true" for some popup options
Problem: Vim9: cannot use "true" for some popup options.
Solution: Add dict_get_bool(). (closes https://github.com/vim/vim/issues/6725)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 18 Aug 2020 13:15:04 +0200 |
parents | 9c11cd6eb442 |
children | 10d05fa7d7a9 |
files | src/dict.c src/popupwin.c src/proto/dict.pro src/version.c |
diffstat | 4 files changed, 34 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/src/dict.c +++ b/src/dict.c @@ -703,6 +703,21 @@ dict_get_number_check(dict_T *d, char_u } /* + * Get a bool item (number or true/false) from a dictionary. + * Returns "def" if the entry doesn't exist. + */ + varnumber_T +dict_get_bool(dict_T *d, char_u *key, int def) +{ + dictitem_T *di; + + di = dict_find(d, key, -1); + if (di == NULL) + return def; + return tv_get_bool(&di->di_tv); +} + +/* * Return an allocated string with the string representation of a Dictionary. * May return NULL. */
--- a/src/popupwin.c +++ b/src/popupwin.c @@ -438,9 +438,10 @@ apply_move_options(win_T *wp, dict_T *d) if (nr != MAXCOL) wp->w_wantcol = nr; - di = dict_find(d, (char_u *)"fixed", -1); - if (di != NULL) - wp->w_popup_fixed = dict_get_number(d, (char_u *)"fixed") != 0; + + nr = dict_get_bool(d, (char_u *)"fixed", -1); + if (nr != -1) + wp->w_popup_fixed = nr != 0; { poppos_T ppt = get_pos_entry(d, TRUE); @@ -674,37 +675,31 @@ apply_general_options(win_T *wp, dict_T wp->w_popup_title = vim_strsave(str); } - di = dict_find(dict, (char_u *)"wrap", -1); - if (di != NULL) - { - nr = dict_get_number(dict, (char_u *)"wrap"); + nr = dict_get_bool(dict, (char_u *)"wrap", -1); + if (nr != -1) wp->w_p_wrap = nr != 0; - } - - di = dict_find(dict, (char_u *)"drag", -1); - if (di != NULL) + + nr = dict_get_bool(dict, (char_u *)"drag", -1); + if (nr != -1) { - nr = dict_get_number(dict, (char_u *)"drag"); if (nr) wp->w_popup_flags |= POPF_DRAG; else wp->w_popup_flags &= ~POPF_DRAG; } - di = dict_find(dict, (char_u *)"posinvert", -1); - if (di != NULL) + nr = dict_get_bool(dict, (char_u *)"posinvert", -1); + if (nr != -1) { - nr = dict_get_number(dict, (char_u *)"posinvert"); if (nr) wp->w_popup_flags |= POPF_POSINVERT; else wp->w_popup_flags &= ~POPF_POSINVERT; } - di = dict_find(dict, (char_u *)"resize", -1); - if (di != NULL) + nr = dict_get_bool(dict, (char_u *)"resize", -1); + if (nr != -1) { - nr = dict_get_number(dict, (char_u *)"resize"); if (nr) wp->w_popup_flags |= POPF_RESIZE; else @@ -902,10 +897,9 @@ apply_general_options(win_T *wp, dict_T set_callback(&wp->w_filter_cb, &callback); } } - di = dict_find(dict, (char_u *)"mapping", -1); - if (di != NULL) + nr = dict_get_bool(dict, (char_u *)"mapping", -1); + if (nr != -1) { - nr = dict_get_number(dict, (char_u *)"mapping"); if (nr) wp->w_popup_flags |= POPF_MAPPING; else @@ -950,7 +944,7 @@ apply_options(win_T *wp, dict_T *dict) apply_general_options(wp, dict); - nr = dict_get_number(dict, (char_u *)"hidden"); + nr = dict_get_bool(dict, (char_u *)"hidden", FALSE); if (nr > 0) wp->w_popup_flags |= POPF_HIDDEN;
--- a/src/proto/dict.pro +++ b/src/proto/dict.pro @@ -31,6 +31,7 @@ char_u *dict_get_string(dict_T *d, char_ varnumber_T dict_get_number(dict_T *d, char_u *key); varnumber_T dict_get_number_def(dict_T *d, char_u *key, int def); varnumber_T dict_get_number_check(dict_T *d, char_u *key); +varnumber_T dict_get_bool(dict_T *d, char_u *key, int def); char_u *dict2string(typval_T *tv, int copyID, int restore_copyID); int eval_dict(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int literal); void dict_extend(dict_T *d1, dict_T *d2, char_u *action);