summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dict.c15
-rw-r--r--src/popupwin.c36
-rw-r--r--src/proto/dict.pro1
-rw-r--r--src/version.c2
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,