diff src/popupwin.c @ 16888:ec61b6b79865 v8.1.1445

patch 8.1.1445: popup window border highlight not implemented yet commit https://github.com/vim/vim/commit/790498b509443f96f39431d2bc87b777efbe250f Author: Bram Moolenaar <Bram@vim.org> Date: Sat Jun 1 22:15:29 2019 +0200 patch 8.1.1445: popup window border highlight not implemented yet Problem: Popup window border highlight not implemented yet. Solution: Implement the "borderhighlight" option.
author Bram Moolenaar <Bram@vim.org>
date Sat, 01 Jun 2019 22:30:05 +0200
parents 59e4148c0c73
children 5131023c5728
line wrap: on
line diff
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -144,6 +144,7 @@ apply_options(win_T *wp, buf_T *buf UNUS
     int		nr;
     char_u	*str;
     dictitem_T	*di;
+    int		i;
 
     wp->w_minwidth = dict_get_number(dict, (char_u *)"minwidth");
     wp->w_minheight = dict_get_number(dict, (char_u *)"minheight");
@@ -211,6 +212,66 @@ apply_options(win_T *wp, buf_T *buf UNUS
 
     get_padding_border(dict, wp->w_popup_padding, "padding", 999);
     get_padding_border(dict, wp->w_popup_border, "border", 1);
+
+    for (i = 0; i < 4; ++i)
+	VIM_CLEAR(wp->w_border_highlight[i]);
+    di = dict_find(dict, (char_u *)"borderhighlight", -1);
+    if (di != NULL)
+    {
+	if (di->di_tv.v_type != VAR_LIST)
+	    emsg(_(e_listreq));
+	else
+	{
+	    list_T	*list = di->di_tv.vval.v_list;
+	    listitem_T	*li;
+
+	    if (list != NULL)
+		for (i = 0, li = list->lv_first; i < 4 && i < list->lv_len;
+							 ++i, li = li->li_next)
+		{
+		    str = tv_get_string(&li->li_tv);
+		    if (*str != NUL)
+			wp->w_border_highlight[i] = vim_strsave(str);
+		}
+	    if (list->lv_len == 1 && wp->w_border_highlight[0] != NULL)
+		for (i = 1; i < 4; ++i)
+			wp->w_border_highlight[i] =
+					vim_strsave(wp->w_border_highlight[0]);
+	}
+    }
+
+    for (i = 0; i < 8; ++i)
+	wp->w_border_char[i] = 0;
+    di = dict_find(dict, (char_u *)"borderchars", -1);
+    if (di != NULL)
+    {
+	if (di->di_tv.v_type != VAR_LIST)
+	    emsg(_(e_listreq));
+	else
+	{
+	    list_T	*list = di->di_tv.vval.v_list;
+	    listitem_T	*li;
+
+	    if (list != NULL)
+		for (i = 0, li = list->lv_first; i < 8 && i < list->lv_len;
+							 ++i, li = li->li_next)
+		{
+		    str = tv_get_string(&li->li_tv);
+		    if (*str != NUL)
+			wp->w_border_char[i] = mb_ptr2char(str);
+		}
+	    if (list->lv_len == 1)
+		for (i = 1; i < 8; ++i)
+		    wp->w_border_char[i] = wp->w_border_char[0];
+	    if (list->lv_len == 2)
+	    {
+		for (i = 4; i < 8; ++i)
+		    wp->w_border_char[i] = wp->w_border_char[1];
+		for (i = 1; i < 4; ++i)
+		    wp->w_border_char[i] = wp->w_border_char[0];
+	    }
+	}
+    }
 }
 
 /*