changeset 17771:4bd21046902b v8.1.1882

patch 8.1.1882: cannot specify properties of the info popup window commit https://github.com/vim/vim/commit/62a0cb443c3184f24a6dac73d3505f9056cf6056 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Aug 18 16:35:23 2019 +0200 patch 8.1.1882: cannot specify properties of the info popup window Problem: Cannot specify properties of the info popup window. Solution: Add the 'completepopup' option. Default to PmenuSel highlight.
author Bram Moolenaar <Bram@vim.org>
date Sun, 18 Aug 2019 16:45:03 +0200
parents eaa74e51248c
children bb7a58644e9a
files runtime/doc/insert.txt runtime/doc/options.txt src/option.c src/option.h src/popupwin.c src/proto/popupwin.pro src/screen.c src/testdir/dumps/Test_popupwin_infopopup_1.dump src/testdir/dumps/Test_popupwin_infopopup_2.dump src/testdir/dumps/Test_popupwin_infopopup_3.dump src/testdir/test_popupwin.vim src/version.c
diffstat 12 files changed, 131 insertions(+), 66 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/insert.txt
+++ b/runtime/doc/insert.txt
@@ -1,4 +1,4 @@
-*insert.txt*    For Vim version 8.1.  Last change: 2019 May 07
+*insert.txt*    For Vim version 8.1.  Last change: 2019 Aug 18
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1092,7 +1092,7 @@ items:
 	menu		extra text for the popup menu, displayed after "word"
 			or "abbr"
 	info		more information about the item, can be displayed in a
-			preview window
+			preview or popup window
 	kind		single letter indicating the type of completion
 	icase		when non-zero case is to be ignored when comparing
 			items to be equal; when omitted zero is used, thus
@@ -1114,11 +1114,22 @@ items in the returned list.
 
 The "menu" item is used in the popup menu and may be truncated, thus it should
 be relatively short.  The "info" item can be longer, it will  be displayed in
-the preview window when "preview" appears in 'completeopt'.  The "info" item
-will also remain displayed after the popup menu has been removed.  This is
-useful for function arguments.  Use a single space for "info" to remove
-existing text in the preview window.  The size of the preview window is three
-lines, but 'previewheight' is used when it has a value of 1 or 2.
+the preview window when "preview" appears in 'completeopt' or in a popup
+window when "popup" appears in 'completeopt'.  In the preview window the
+"info" item will also remain displayed after the popup menu has been removed.
+This is useful for function arguments.  Use a single space for "info" to
+remove existing text in the preview window.  The size of the preview window is
+three lines, but 'previewheight' is used when it has a value of 1 or 2.
+
+						*complete-popup*
+When "popup" is in 'completeopt' a popup window is used to display the "info".
+Then the 'completepopup' option specifies the properties of the popup.  The
+option is a comma separated list of values:
+	height		maximum height of the popup
+	width		maximum width of the popup
+	highlight	highlight group of the popup (default is Pmenu)
+Example: >
+	:set completepopup=height:10,width:60,highlight:InfoPopup
 
 The "kind" item uses a single letter to indicate the kind of completion.  This
 may be used to show the completion differently (different color or icon).
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 8.1.  Last change: 2019 Aug 17
+*options.txt*	For Vim version 8.1.  Last change: 2019 Aug 18
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -1918,6 +1918,7 @@ A jump table for the options with a shor
 	   popup    Show extra information about the currently selected
 		    completion in a popup window.  Only works in combination
 		    with "menu" or "menuone".  Overrides "preview".
+		    See |'completepopup'| for specifying properties.
 		    {only works when compiled with the +textprop feature}
 
 	   noinsert Do not insert any text for a match until the user selects
@@ -1929,6 +1930,15 @@ A jump table for the options with a shor
 		    "menu" or "menuone".
 
 
+					*'completepopup'* *'cpp'*
+'completepopup' 'cpp'	string (default empty)
+			global
+			{not available when compiled without the |+textprop|
+			or |+quickfix| feature}
+	When 'completeopt' contains "popup" then this option is used for the
+	properties of the info popup.  See |complete-popup|.
+
+
 						*'concealcursor'* *'cocu'*
 'concealcursor' 'cocu'	string (default: "")
 			local to window
@@ -3160,8 +3170,8 @@ A jump table for the options with a shor
 						*'fillchars'* *'fcs'*
 'fillchars' 'fcs'	string	(default "vert:|,fold:-")
 			global
-			{not available when compiled without the |+windows|
-			and |+folding| features}
+			{not available when compiled without the |+folding|
+			feature}
 	Characters to fill the statuslines and vertical separators.
 	It is a comma separated list of items:
 
@@ -3797,8 +3807,7 @@ A jump table for the options with a shor
 						*'guitablabel'* *'gtl'*
 'guitablabel' 'gtl'	string	(default empty)
 			global
-			{only available when compiled with GUI enabled and
-			with the |+windows| feature}
+			{only available when compiled with GUI enabled}
 	When nonempty describes the text to use in a label of the GUI tab
 	pages line.  When empty and when the result is empty Vim will use a
 	default label.  See |setting-guitablabel| for more info.
@@ -3816,8 +3825,7 @@ A jump table for the options with a shor
 						*'guitabtooltip'* *'gtt'*
 'guitabtooltip' 'gtt'	string	(default empty)
 			global
-			{only available when compiled with GUI enabled and
-			with the |+windows| feature}
+			{only available when compiled with GUI enabled}
 	When nonempty describes the text to use in a tooltip for the GUI tab
 	pages line.  When empty Vim will use a default tooltip.
 	This option is otherwise just like 'guitablabel' above.
@@ -3842,8 +3850,6 @@ A jump table for the options with a shor
 						*'helpheight'* *'hh'*
 'helpheight' 'hh'	number	(default 20)
 			global
-			{not available when compiled without the |+windows|
-			feature}
 	Minimal initial height of the help window when it is opened with the
 	":help" command.  The initial height of the help window is half of the
 	current window, or (when the 'ea' option is on) the same as other
@@ -5642,8 +5648,8 @@ A jump table for the options with a shor
 					*'previewheight'* *'pvh'*
 'previewheight' 'pvh'	number (default 12)
 			global
-			{not available when compiled without the |+windows| or
-			|+quickfix| features}
+			{not available when compiled without the |+quickfix|
+			feature}
 	Default height for a preview window.  Used for |:ptag| and associated
 	commands.  Used for |CTRL-W_}| when no count is given.  Not used when
 	'previewpopup' is set.
@@ -5651,8 +5657,8 @@ A jump table for the options with a shor
 					*'previewpopup'* *'pvp'*
 'previewpopup' 'pvp'	string (default empty)
 			global
-			{not available when compiled without the |+windows|,
-			|+textprop| or |+quickfix| feature}
+			{not available when compiled without the |+textprop|
+			or |+quickfix| feature}
 	When not empty a popup window is used for commands that would open a
 	preview window.  See |preview-popup|.
 	Not used for the insert completion info, add "popup" to
@@ -5662,8 +5668,8 @@ A jump table for the options with a shor
 					*'pvw'* *'nopvw'* *E590*
 'previewwindow' 'pvw'	boolean (default off)
 			local to window
-			{not available when compiled without the |+windows| or
-			|+quickfix| features}
+			{not available when compiled without the |+quickfix|
+			feature}
 	Identifies the preview window.  Only one window can have this option
 	set.  It's normally not set directly, but by using one of the commands
 	|:ptag|, |:pedit|, etc.
@@ -6781,8 +6787,6 @@ A jump table for the options with a shor
 						*'showtabline'* *'stal'*
 'showtabline' 'stal'	number	(default 1)
 			global
-			{not available when compiled without the |+windows|
-			feature}
 	The value of this option specifies when the line with tab page labels
 	will be displayed:
 		0: never
@@ -7079,8 +7083,6 @@ A jump table for the options with a shor
 			*'splitbelow'* *'sb'* *'nosplitbelow'* *'nosb'*
 'splitbelow' 'sb'	boolean	(default off)
 			global
-			{not available when compiled without the |+windows|
-			feature}
 	When on, splitting a window will put the new window below the current
 	one. |:split|
 
@@ -7401,8 +7403,6 @@ A jump table for the options with a shor
 						*'tabline'* *'tal'*
 'tabline' 'tal'		string	(default empty)
 			global
-			{not available when compiled without the |+windows|
-			feature}
 	When nonempty, this option determines the content of the tab pages
 	line at the top of the Vim window.  When empty Vim will use a default
 	tab pages line.  See |setting-tabline| for more info.
@@ -7428,8 +7428,6 @@ A jump table for the options with a shor
 						*'tabpagemax'* *'tpm'*
 'tabpagemax' 'tpm'	number	(default 10)
 			global
-			{not available when compiled without the |+windows|
-			feature}
 	Maximum number of tab pages to be opened by the |-p| command line
 	argument or the ":tab all" command. |tabpage|
 
@@ -8739,8 +8737,6 @@ A jump table for the options with a shor
 						*'winheight'* *'wh'* *E591*
 'winheight' 'wh'	number	(default 1)
 			global
-			{not available when compiled without the |+windows|
-			feature}
 	Minimal number of lines for the current window.  This is not a hard
 	minimum, Vim will use fewer lines if there is not enough room.  If the
 	focus goes to a window that is smaller, its size is increased, at the
@@ -8761,8 +8757,6 @@ A jump table for the options with a shor
 			*'winfixheight'* *'wfh'* *'nowinfixheight'* *'nowfh'*
 'winfixheight' 'wfh'	boolean	(default off)
 			local to window
-			{not available when compiled without the |+windows|
-			feature}
 	Keep the window height when windows are opened or closed and
 	'equalalways' is set.  Also for |CTRL-W_=|.  Set by default for the
 	|preview-window| and |quickfix-window|.
@@ -8771,8 +8765,6 @@ A jump table for the options with a shor
 			*'winfixwidth'* *'wfw'* *'nowinfixwidth'* *'nowfw'*
 'winfixwidth' 'wfw'	boolean	(default off)
 			local to window
-			{not available when compiled without the |+windows|
-			feature}
 	Keep the window width when windows are opened or closed and
 	'equalalways' is set.  Also for |CTRL-W_=|.
 	The width may be changed anyway when running out of room.
@@ -8780,8 +8772,6 @@ A jump table for the options with a shor
 						*'winminheight'* *'wmh'*
 'winminheight' 'wmh'	number	(default 1)
 			global
-			{not available when compiled without the |+windows|
-			feature}
 	The minimal height of a window, when it's not the current window.
 	This is a hard minimum, windows will never become smaller.
 	When set to zero, windows may be "squashed" to zero lines (i.e. just a
--- a/src/option.c
+++ b/src/option.c
@@ -893,6 +893,15 @@ static struct vimoption options[] =
 			    {(char_u *)0L, (char_u *)0L}
 #endif
 			    SCTX_INIT},
+    {"completepopup", "cpp", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+#ifdef FEAT_TEXT_PROP
+			    (char_u *)&p_cpp, PV_NONE,
+			    {(char_u *)"", (char_u *)0L}
+#else
+			    (char_u *)NULL, PV_NONE,
+			    {(char_u *)NULL, (char_u *)0L}
+#endif
+			    SCTX_INIT},
     {"completeslash",   "csl",  P_STRING|P_VI_DEF|P_VIM,
 #if defined(FEAT_INS_EXPAND) && defined(BACKSLASH_IN_FILENAME)
 			    (char_u *)&p_csl, PV_CSL,
@@ -7826,6 +7835,12 @@ did_set_string_option(
 	if (parse_previewpopup(NULL) == FAIL)
 	    errmsg = e_invarg;
     }
+    // 'completepopup'
+    else if (varp == &p_cpp)
+    {
+	if (parse_completepopup(NULL) == FAIL)
+	    errmsg = e_invarg;
+    }
 #endif
 
     /* Options that are a list of flags. */
--- a/src/option.h
+++ b/src/option.h
@@ -503,6 +503,7 @@ EXTERN int	p_fs;		// 'fsync'
 #endif
 EXTERN int	p_gd;		// 'gdefault'
 #ifdef FEAT_TEXT_PROP
+EXTERN char_u	*p_cpp;		// 'completepopup'
 EXTERN char_u	*p_pvp;		// 'previewpopup'
 #endif
 #ifdef FEAT_PRINTER
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -550,8 +550,7 @@ popup_highlight_curline(win_T *wp)
 
 	    if (syn_name2id((char_u *)linehl) == 0)
 		linehl = "PmenuSel";
-	    sign_define_by_name(sign_name, NULL,
-						 (char_u *)linehl, NULL, NULL);
+	    sign_define_by_name(sign_name, NULL, (char_u *)linehl, NULL, NULL);
 	}
 
 	sign_place(&sign_id, (char_u *)"popupmenu", sign_name,
@@ -1286,16 +1285,16 @@ popup_set_buffer_text(buf_T *buf, typval
 }
 
 /*
- * Parse the 'previewpopup' option and apply the values to window "wp" if it
- * not NULL.
+ * Parse the 'previewpopup' or 'completepopup' option and apply the values to
+ * window "wp" if it is not NULL.
  * Return FAIL if the parsing fails.
  */
-    int
-parse_previewpopup(win_T *wp)
+    static int
+parse_popup_option(win_T *wp, int is_preview)
 {
     char_u *p;
 
-    for (p = p_pvp; *p != NUL; p += (*p == ',' ? 1 : 0))
+    for (p = is_preview ? p_pvp : p_cpp; *p != NUL; p += (*p == ',' ? 1 : 0))
     {
 	char_u	*e, *dig;
 	char_u	*s = p;
@@ -1310,25 +1309,41 @@ parse_previewpopup(win_T *wp)
 	    p = e + STRLEN(e);
 	dig = e + 1;
 	x = getdigits(&dig);
-	if (dig != p)
-	    return FAIL;
 
 	if (STRNCMP(s, "height:", 7) == 0)
 	{
+	    if (dig != p)
+		return FAIL;
 	    if (wp != NULL)
 	    {
-		wp->w_minheight = x;
+		if (is_preview)
+		    wp->w_minheight = x;
 		wp->w_maxheight = x;
 	    }
 	}
 	else if (STRNCMP(s, "width:", 6) == 0)
 	{
+	    if (dig != p)
+		return FAIL;
 	    if (wp != NULL)
 	    {
-		wp->w_minwidth = x;
+		if (is_preview)
+		    wp->w_minwidth = x;
 		wp->w_maxwidth = x;
 	    }
 	}
+	else if (STRNCMP(s, "highlight:", 10) == 0)
+	{
+	    if (wp != NULL)
+	    {
+		int c = *p;
+
+		*p = NUL;
+		set_string_option_direct_in_win(wp, (char_u *)"wincolor", -1,
+						s + 10, OPT_FREE|OPT_LOCAL, 0);
+		*p = c;
+	    }
+	}
 	else
 	    return FAIL;
     }
@@ -1336,6 +1351,28 @@ parse_previewpopup(win_T *wp)
 }
 
 /*
+ * Parse the 'previewpopup' option and apply the values to window "wp" if it
+ * is not NULL.
+ * Return FAIL if the parsing fails.
+ */
+    int
+parse_previewpopup(win_T *wp)
+{
+    return parse_popup_option(wp, TRUE);
+}
+
+/*
+ * Parse the 'completepopup' option and apply the values to window "wp" if it
+ * is not NULL.
+ * Return FAIL if the parsing fails.
+ */
+    int
+parse_completepopup(win_T *wp)
+{
+    return parse_popup_option(wp, FALSE);
+}
+
+/*
  * Set w_wantline and w_wantcol for the cursor position in the current window.
  * Keep at least "width" columns from the right of the screen.
  */
@@ -1641,6 +1678,7 @@ popup_create(typval_T *argvars, typval_T
 	wp->w_popup_flags |= POPF_DRAG | POPF_RESIZE;
 	wp->w_popup_close = POPCLOSE_BUTTON;
 	add_border_left_right_padding(wp);
+	parse_completepopup(wp);
     }
 
     for (i = 0; i < 4; ++i)
--- a/src/proto/popupwin.pro
+++ b/src/proto/popupwin.pro
@@ -11,6 +11,7 @@ int popup_width(win_T *wp);
 int popup_extra_width(win_T *wp);
 void popup_adjust_position(win_T *wp);
 int parse_previewpopup(win_T *wp);
+int parse_completepopup(win_T *wp);
 void popup_set_wantpos_cursor(win_T *wp, int width);
 void popup_set_wantpos_rowcol(win_T *wp, int row, int col);
 void f_popup_clear(typval_T *argvars, typval_T *rettv);
--- a/src/screen.c
+++ b/src/screen.c
@@ -996,7 +996,12 @@ get_wcr_attr(win_T *wp)
 	wcr_attr = syn_name2attr(wp->w_p_wcr);
 #ifdef FEAT_TEXT_PROP
     else if (WIN_IS_POPUP(wp))
-	wcr_attr = HL_ATTR(HLF_PNI);
+    {
+	if (wp->w_popup_flags & POPF_INFO)
+	    wcr_attr = HL_ATTR(HLF_PSI);    // PmenuSel
+	else
+	    wcr_attr = HL_ATTR(HLF_PNI);    // Pmenu
+    }
 #endif
     return wcr_attr;
 }
--- a/src/testdir/dumps/Test_popupwin_infopopup_1.dump
+++ b/src/testdir/dumps/Test_popupwin_infopopup_1.dump
@@ -1,6 +1,6 @@
-|t+0&#ffffff0|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| |t|a|w|o|r|d> @15|╔+0#0000001#ffd7ff255|═@15|X| +0#0000000#ffffff0@9
-|~+0#4040ff13&| @23| +0#0000001#e0e0e08|w|r|d| @4|W| |e|x|t|r|a| |t|e|x|t| |║+0&#ffd7ff255| |w|o|r|d|s| |a|r|e| |c|o@1|l| |║| +0#4040ff13#ffffff0@9
-|~| @23| +0#0000001#ffd7ff255|a|n|o|t|w|r|d| |W| |e|x|t|r|a| |t|e|x|t| |╚|═@15|⇲| +0#4040ff13#ffffff0@9
+|t+0&#ffffff0|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| |t|a|w|o|r|d> @15|╔+0&#ffff4012|═@15|X| +0&#ffffff0@9
+|~+0#4040ff13&| @23| +0#0000001#e0e0e08|w|r|d| @4|W| |e|x|t|r|a| |t|e|x|t| |║+0#0000000#ffff4012| |w|o|r|d|s| |a|r|e| |c|o@1|l| |║| +0#4040ff13#ffffff0@9
+|~| @23| +0#0000001#ffd7ff255|a|n|o|t|w|r|d| |W| |e|x|t|r|a| |t|e|x|t| |╚+0#0000000#ffff4012|═@15|⇲| +0#4040ff13#ffffff0@9
 |~| @23| +0#0000001#ffd7ff255|n|o|a|w|r|d| @1|W| |e|x|t|r|a| |t|e|x|t| | +0#4040ff13#ffffff0@27
 |~| @23| +0#0000001#ffd7ff255|t|h|a|t|w|r|d| |W| |e|x|t|r|a| |t|e|x|t| | +0#4040ff13#ffffff0@27
 |~| @73
--- a/src/testdir/dumps/Test_popupwin_infopopup_2.dump
+++ b/src/testdir/dumps/Test_popupwin_infopopup_2.dump
@@ -1,10 +1,10 @@
 |t+0&#ffffff0|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| |t|a|n|o|t|h|e|r|w|o|r|d> @37
-|~+0#4040ff13&| @23| +0#0000001#ffd7ff255|w|r|d| @4|W| |e|x|t|r|a| |t|e|x|t| |╔|═@25|X
-|~+0#4040ff13#ffffff0| @23| +0#0000001#e0e0e08|a|n|o|t|w|r|d| |W| |e|x|t|r|a| |t|e|x|t| |║+0&#ffd7ff255| |o|t|h|e|r| |w|o|r|d|s| |a|r|e| @9|║
-|~+0#4040ff13#ffffff0| @23| +0#0000001#ffd7ff255|n|o|a|w|r|d| @1|W| |e|x|t|r|a| |t|e|x|t| |║| |c|o@1|l|e|r| |t|h|a|n| |t|h|i|s| |a|n|d| |s|o|m| |║
-|~+0#4040ff13#ffffff0| @23| +0#0000001#ffd7ff255|t|h|a|t|w|r|d| |W| |e|x|t|r|a| |t|e|x|t| |║| |e| |m|o|r|e| |t|e|x|t| @13|║
-|~+0#4040ff13#ffffff0| @45|║+0#0000001#ffd7ff255| |t|o| |m|a|k|e| |w|r|a|p| @12|║
-|~+0#4040ff13#ffffff0| @45|╚+0#0000001#ffd7ff255|═@25|⇲
+|~+0#4040ff13&| @23| +0#0000001#ffd7ff255|w|r|d| @4|W| |e|x|t|r|a| |t|e|x|t| |╔+0#0000000#ffff4012|═@25|X
+|~+0#4040ff13#ffffff0| @23| +0#0000001#e0e0e08|a|n|o|t|w|r|d| |W| |e|x|t|r|a| |t|e|x|t| |║+0#0000000#ffff4012| |o|t|h|e|r| |w|o|r|d|s| |a|r|e| @9|║
+|~+0#4040ff13#ffffff0| @23| +0#0000001#ffd7ff255|n|o|a|w|r|d| @1|W| |e|x|t|r|a| |t|e|x|t| |║+0#0000000#ffff4012| |c|o@1|l|e|r| |t|h|a|n| |t|h|i|s| |a|n|d| |s|o|m| |║
+|~+0#4040ff13#ffffff0| @23| +0#0000001#ffd7ff255|t|h|a|t|w|r|d| |W| |e|x|t|r|a| |t|e|x|t| |║+0#0000000#ffff4012| |e| |m|o|r|e| |t|e|x|t| @13|║
+|~+0#4040ff13#ffffff0| @45|║+0#0000000#ffff4012| |t|o| |m|a|k|e| |w|r|a|p| @12|║
+|~+0#4040ff13#ffffff0| @45|╚+0#0000000#ffff4012|═@25|⇲
 |~+0#4040ff13#ffffff0| @73
 |~| @73
 |~| @73
--- a/src/testdir/dumps/Test_popupwin_infopopup_3.dump
+++ b/src/testdir/dumps/Test_popupwin_infopopup_3.dump
@@ -1,11 +1,11 @@
 |t+0&#ffffff0|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| |t|n|o|i|n|f|o> @42
 |~+0#4040ff13&| @23| +0#0000001#ffd7ff255|w|r|d| @4|W| |e|x|t|r|a| |t|e|x|t| | +0#4040ff13#ffffff0@27
-|~| @23| +0#0000001#ffd7ff255|a|n|o|t|w|r|d| |W| |e|x|t|r|a| |t|e|x|t| |╔|═@14|X| +0#4040ff13#ffffff0@10
-|~| @23| +0#0000001#e0e0e08|n|o|a|w|r|d| @1|W| |e|x|t|r|a| |t|e|x|t| |║+0&#ffd7ff255| |n|o| |w|o|r|d|s| |h|e|r|e| |║| +0#4040ff13#ffffff0@10
-|~| @23| +0#0000001#ffd7ff255|t|h|a|t|w|r|d| |W| |e|x|t|r|a| |t|e|x|t| |╚|═@14|⇲| +0#4040ff13#ffffff0@10
-|~| @73
-|~| @73
-|~| @73
+|~| @23| +0#0000001#ffd7ff255|a|n|o|t|w|r|d| |W| |e|x|t|r|a| |t|e|x|t| |╔+0#0000000#ffff4012|═@11|X| +0#4040ff13#ffffff0@13
+|~| @23| +0#0000001#e0e0e08|n|o|a|w|r|d| @1|W| |e|x|t|r|a| |t|e|x|t| |║+0#0000000#ffff4012| |l|e|t|s| @5| +0&#0000001|║+0&#ffff4012| +0#4040ff13#ffffff0@13
+|~| @23| +0#0000001#ffd7ff255|t|h|a|t|w|r|d| |W| |e|x|t|r|a| |t|e|x|t| |║+0#0000000#ffff4012| |s|h|o|w| @5| +0&#0000001|║+0&#ffff4012| +0#4040ff13#ffffff0@13
+|~| @45|║+0#0000000#ffff4012| |a| @8| +0&#0000001|║+0&#ffff4012| +0#4040ff13#ffffff0@13
+|~| @45|║+0#0000000#ffff4012| |s|c|r|o|l@1|b|a|r| | +0&#a8a8a8255|║+0&#ffff4012| +0#4040ff13#ffffff0@13
+|~| @45|╚+0#0000000#ffff4012|═@11|⇲| +0#4040ff13#ffffff0@13
 |~| @73
 |~| @73
 |~| @73
--- a/src/testdir/test_popupwin.vim
+++ b/src/testdir/test_popupwin.vim
@@ -2199,6 +2199,8 @@ func Test_popupmenu_info()
   let lines =<< trim END
       set completeopt+=preview,popup
       set completefunc=CompleteFuncDict
+      hi InfoPopup ctermbg=yellow
+      set completepopup=height:4,highlight:InfoPopup
 
       func CompleteFuncDict(findstart, base)
 	if a:findstart
@@ -2230,7 +2232,7 @@ func Test_popupmenu_info()
 		    \ 'word': 'noinfo',
 		    \ 'abbr': 'noawrd',
 		    \ 'menu': 'extra text',
-		    \ 'info': 'no words here',
+		    \ 'info': "lets\nshow\na\nscrollbar\nhere",
 		    \ 'kind': 'W',
 		    \ 'user_data': 'notest'
 		  \ },
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1882,
+/**/
     1881,
 /**/
     1880,