diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-08-18 13:04:15 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-08-18 13:04:15 +0200 |
commit | 558813314d63dd0263a7a86c0496c1e89b5c8cba (patch) | |
tree | 7ebfbe1f61edc2bfb5fc82f354bf6f7cae5391ec | |
parent | f39397e515067d5a314be99778e63fe0acf93c51 (diff) | |
download | vim-git-558813314d63dd0263a7a86c0496c1e89b5c8cba.tar.gz |
patch 8.2.1478: Vim9: cannot use "true" for some popup optionsv8.2.1478
Problem: Vim9: cannot use "true" for some popup options.
Solution: Add dict_get_bool(). (closes #6725)
-rw-r--r-- | src/dict.c | 15 | ||||
-rw-r--r-- | src/popupwin.c | 36 | ||||
-rw-r--r-- | src/proto/dict.pro | 1 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 33 insertions, 21 deletions
diff --git a/src/dict.c b/src/dict.c index b3517309a..01a2edaa2 100644 --- a/src/dict.c +++ b/src/dict.c @@ -703,6 +703,21 @@ dict_get_number_check(dict_T *d, char_u *key) } /* + * 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 index ff9e81004..4b85fec19 100644 --- 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 *dict) 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 *dict) 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 index 093139f42..3b6638440 100644 --- a/src/proto/dict.pro +++ b/src/proto/dict.pro @@ -31,6 +31,7 @@ char_u *dict_get_string(dict_T *d, char_u *key, int save); 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 index e332c011e..b17bcd2f3 100644 --- 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, |