# HG changeset patch # User Bram Moolenaar # Date 1560602705 -7200 # Node ID 2546930657a9151acc6c2c52bc349994fa7906f2 # Parent edd03436c86dc0f054e6f9355090b0a792fc11ff patch 8.1.1538: cannot specify highlighting for notifications commit https://github.com/vim/vim/commit/dfa97f2aed3d8ca195d09e2ce91cef227f933961 Author: Bram Moolenaar Date: Sat Jun 15 14:31:55 2019 +0200 patch 8.1.1538: cannot specify highlighting for notifications Problem: Cannot specify highlighting for notifications. Solution: Use the PopupNotification group if it exists. Add a minimal width to notifications. diff --git a/runtime/doc/popup.txt b/runtime/doc/popup.txt --- a/runtime/doc/popup.txt +++ b/runtime/doc/popup.txt @@ -1,4 +1,4 @@ -*popup.txt* For Vim version 8.1. Last change: 2019 Jun 12 +*popup.txt* For Vim version 8.1. Last change: 2019 Jun 15 VIM REFERENCE MANUAL by Bram Moolenaar @@ -93,8 +93,6 @@ TODO: - Add 'balloonpopup': instead of showing text, let the callback open a popup window and return the window ID. The popup will then be closed when the mouse moves, except when it moves inside the popup. -- For notifications use the PopupNotification highlight group, fall back to - WarningMsg if it isn't defined. - For the "moved" property also include mouse movement? - Make redrawing more efficient and avoid flicker: - put popup menu also put in popup_mask? @@ -300,6 +298,7 @@ popup_notification({text}, {options}) call popup_create({text}, { \ 'line': 1, \ 'col': 10, + \ 'minwidth': 20, \ 'time': 3000, \ 'tabpage': -1, \ 'zindex': 200, @@ -308,6 +307,8 @@ popup_notification({text}, {options}) \ 'border': [], \ 'padding': [0,1,0,1], \ }) +< The PopupNotification highlight group is used instead of + WarningMsg if it is defined. < The position will be adjusted to avoid overlap with other notifications. Use {options} to change the properties. diff --git a/src/popupwin.c b/src/popupwin.c --- a/src/popupwin.c +++ b/src/popupwin.c @@ -258,7 +258,9 @@ apply_options(win_T *wp, buf_T *buf UNUS dictitem_T *di; int i; - wp->w_minwidth = dict_get_number(dict, (char_u *)"minwidth"); + di = dict_find(dict, (char_u *)"minwidth", -1); + if (di != NULL) + wp->w_minwidth = dict_get_number(dict, (char_u *)"minwidth"); wp->w_minheight = dict_get_number(dict, (char_u *)"minheight"); wp->w_maxwidth = dict_get_number(dict, (char_u *)"maxwidth"); wp->w_maxheight = dict_get_number(dict, (char_u *)"maxheight"); @@ -856,13 +858,17 @@ popup_create(typval_T *argvars, typval_T wp->w_wantcol = 10; wp->w_zindex = POPUPWIN_NOTIFICATION_ZINDEX; + wp->w_minwidth = 20; + wp->w_popup_drag = 1; for (i = 0; i < 4; ++i) wp->w_popup_border[i] = 1; wp->w_popup_padding[1] = 1; wp->w_popup_padding[3] = 1; + + nr = syn_name2id((char_u *)"PopupNotification"); set_string_option_direct_in_win(wp, (char_u *)"wincolor", -1, - (char_u *)"WarningMsg", OPT_FREE|OPT_LOCAL, 0); - wp->w_popup_drag = 1; + (char_u *)(nr == 0 ? "WarningMsg" : "PopupNotification"), + OPT_FREE|OPT_LOCAL, 0); } // Deal with options. diff --git a/src/testdir/dumps/Test_popupwin_notify_01.dump b/src/testdir/dumps/Test_popupwin_notify_01.dump --- a/src/testdir/dumps/Test_popupwin_notify_01.dump +++ b/src/testdir/dumps/Test_popupwin_notify_01.dump @@ -1,6 +1,6 @@ ->1+0&#ffffff0| @7|╔+0#e000002&|═@19|╗| +0#0000000&@43 -|2| @7|║+0#e000002&| |f|i|r|s|t| |n|o|t|i|f|i|c|a|t|i|o|n| |║| +0#0000000&@43 -|3| @7|╚+0#e000002&|═@19|╝| +0#0000000&@43 +>1+0&#ffffff0| @7|╔+0#e000002&|═@21|╗| +0#0000000&@41 +|2| @7|║+0#e000002&| |f|i|r|s|t| |n|o|t|i|f|i|c|a|t|i|o|n| @2|║| +0#0000000&@41 +|3| @7|╚+0#e000002&|═@21|╝| +0#0000000&@41 |4| @73 |5| @73 |6| @73 diff --git a/src/testdir/dumps/Test_popupwin_notify_02.dump b/src/testdir/dumps/Test_popupwin_notify_02.dump --- a/src/testdir/dumps/Test_popupwin_notify_02.dump +++ b/src/testdir/dumps/Test_popupwin_notify_02.dump @@ -1,10 +1,10 @@ ->1+0&#ffffff0| @7|╔+0#e000002&|═@19|╗| +0#0000000&@43 -|2| @7|║+0#e000002&| |f|i|r|s|t| |n|o|t|i|f|i|c|a|t|i|o|n| |║| +0#0000000&@43 -|3| @7|╚+0#e000002&|═@19|╝| +0#0000000&@43 +>1+0&#ffffff0| @7|╔+0#e000002&|═@21|╗| +0#0000000&@41 +|2| @7|║+0#e000002&| |f|i|r|s|t| |n|o|t|i|f|i|c|a|t|i|o|n| @2|║| +0#0000000&@41 +|3| @7|╚+0#e000002&|═@21|╝| +0#0000000&@41 |4| @7|╔+0fd7ff255|═@31|╗| +0&#ffffff0@31 |5| @7|║+0fd7ff255| |a|n|o|t|h|e|r| |i|m|p|o|r|t|a|n|t| |n|o|t|i|f|i|c|a|t|i|o|n| |║| +0&#ffffff0@31 |6| @7|╚+0fd7ff255|═@31|╝| +0&#ffffff0@31 |7| @73 |8| @73 |9| @73 -@57|1|,|1| @10|T|o|p| +|:|c|a|l@1| |p|o|p|u|p|_|n|o|t|i|f|i|c|a|t|i|o|n|(|'|a|n|o|t|h|e|r| |i|m|p|o|r|t|a|n|t| |n|o|t|i|f|i|c|a|t|i|o|n|'|1|,|1| @10|T|o|p| diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim --- a/src/testdir/test_popupwin.vim +++ b/src/testdir/test_popupwin.vim @@ -1191,7 +1191,8 @@ func Test_notifications() call VerifyScreenDump(buf, 'Test_popupwin_notify_01', {}) " second one goes below the first one - call term_sendkeys(buf, ":call popup_notification('another important notification', {'highlight': 'Notification'})\") + call term_sendkeys(buf, ":hi link PopupNotification Notification\") + call term_sendkeys(buf, ":call popup_notification('another important notification', {})\") call VerifyScreenDump(buf, 'Test_popupwin_notify_02', {}) diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -778,6 +778,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1538, +/**/ 1537, /**/ 1536,