Mercurial > vim
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]; + } + } + } } /*