# HG changeset patch # User Bram Moolenaar # Date 1597749304 -7200 # Node ID 1f6dc5b953c41aefb3146286596cff25cfa4fa90 # Parent 9c11cd6eb4423f663fd02099f40ed54b61c64559 patch 8.2.1478: Vim9: cannot use "true" for some popup options Commit: https://github.com/vim/vim/commit/558813314d63dd0263a7a86c0496c1e89b5c8cba Author: Bram Moolenaar 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) diff --git a/src/dict.c b/src/dict.c --- 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. */ diff --git a/src/popupwin.c b/src/popupwin.c --- 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; diff --git a/src/proto/dict.pro b/src/proto/dict.pro --- 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); diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1478, +/**/ 1477, /**/ 1476,