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);
--- 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,