patch 9.2.0051: 'previewpopup' is missing features available in 'completepopup'
Commit: https://github.com/vim/vim/commit/6eb0bfd5bbf48ff4dc1d1bbf647dc6c9b96a6eed Author: Arkissa <[email protected]> Date: Tue Feb 24 21:45:22 2026 +0000 patch 9.2.0051: 'previewpopup' is missing features available in 'completepopup' Problem: The 'previewpopup' option lacks several customization values that 'completepopup' supports, such as borders, shadows, and UI handles. Solution: Add support for "border", "borderhighlight", "close", "resize", and "shadow" to 'previewpopup' (Arkissa) closes: #18873 Signed-off-by: Arkissa <[email protected]> Signed-off-by: Girish Palya <[email protected]> Signed-off-by: Christian Brabandt <[email protected]> diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index 5c35f3a84..6c8726696 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -52585,6 +52585,8 @@ work in progress. Popups ~ ------ - Support for transparency, see |popup-opacity|. +- 'previewpopup' supports the same values as 'completepopup' (except for + "align"). Other ~ ----- diff --git a/runtime/doc/windows.txt b/runtime/doc/windows.txt index af220e868..eee53cbdd 100644 --- a/runtime/doc/windows.txt +++ b/runtime/doc/windows.txt @@ -1,4 +1,4 @@ -*windows.txt* For Vim version 9.2. Last change: 2026 Feb 14 +*windows.txt* For Vim version 9.2. Last change: 2026 Feb 24 VIM REFERENCE MANUAL by Bram Moolenaar @@ -954,11 +954,20 @@ windows. Alternatively, a popup window can be used by setting the 'previewpopup' option. When set, it overrules the 'previewwindow' and 'previewheight' settings. The option is a comma-separated list of values: + border border style (see 'pumborder') + borderhighlight highlight group for the popup border characters + close show close button: "on" (default) or "off", and if + the value is "on", it must be set after border. height maximum height of the popup - width maximum width of the popup highlight highlight group of the popup (default is Pmenu) + resize show resize handle: "on" (default) or "off" + shadow "off" (default) or "on" using |hl-PmenuShadow| + width maximum width of the popup + Example: > :set previewpopup=height:10,width:60 + :set previewpopup=border:single,borderhilight:PmenuBorder + :set previewpopup=border:custom:─;│;─;│;┌;┐;┘;└ A few peculiarities: - If the file is in a buffer already, it will be re-used. This will allow for diff --git a/src/optionstr.c b/src/optionstr.c index 9aead2124..3809b594a 100644 --- a/src/optionstr.c +++ b/src/optionstr.c @@ -75,11 +75,14 @@ static char *(p_kpc_protocol_values[]) = {"none", "mok2", "kitty", NULL}; static char *(p_popup_cpp_option_values[]) = {"align:", "border:", "borderhighlight:", "close:", "height:", "highlight:", "resize:", "shadow:", "width:", NULL}; -static char *(p_popup_pvp_option_values[]) = {"height:", "highlight:", - "width:", NULL}; +static char *(p_popup_pvp_option_values[]) = {"border:", + "borderhighlight:", "close:", "height:", "highlight:", "resize:", + "shadow:", "width:", NULL}; static char *(p_popup_option_on_off_values[]) = {"on", "off", NULL}; static char *(p_popup_cpp_border_values[]) = {"single", "double", "round", "ascii", "on", "off", "custom:", NULL}; +static char *(p_popup_pvp_border_values[]) = {"single", "double", "round", + "ascii", "on", "off", "custom:", NULL}; static char *(p_popup_option_align_values[]) = {"item", "menu", NULL}; #endif #if defined(FEAT_SPELL) @@ -3415,6 +3418,7 @@ did_set_previewpopup(optset_T *args UNUSED) if (parse_previewpopup(NULL) == FAIL) return e_invalid_argument; + popup_close_info(); return NULL; } @@ -3452,9 +3456,9 @@ expand_set_popupoption(optexpand_T *args, int *numMatches, char_u ***matches, { return expand_set_opt_string( args, - previewpopup ? p_popup_option_on_off_values + previewpopup ? p_popup_pvp_border_values : p_popup_cpp_border_values, - (previewpopup ? ARRAY_LENGTH(p_popup_option_on_off_values) + (previewpopup ? ARRAY_LENGTH(p_popup_pvp_border_values) - 1 : ARRAY_LENGTH(p_popup_cpp_border_values)) - 1, numMatches, matches); diff --git a/src/popupwin.c b/src/popupwin.c index 380b884be..e7ab2687e 100644 --- a/src/popupwin.c +++ b/src/popupwin.c @@ -2006,9 +2006,9 @@ parse_popup_option(win_T *wp, int is_preview) int on = STRNCMP(arg, "on", 2) == 0 && arg + 2 == p; int off = STRNCMP(arg, "off", 3) == 0 && arg + 3 == p; - if ((!on && !off) || is_preview) + if (!on && !off) return FAIL; - on = on && mouse_has(MOUSE_INSERT) && border_enabled; + on = on && mouse_has(MOUSE_INSERT) && (border_enabled || is_preview); if (wp != NULL) wp->w_popup_close = on ? POPCLOSE_BUTTON : POPCLOSE_NONE; } @@ -2018,7 +2018,7 @@ parse_popup_option(win_T *wp, int is_preview) int on = STRNCMP(arg, "on", 2) == 0 && arg + 2 == p; int off = STRNCMP(arg, "off", 3) == 0 && arg + 3 == p; - if ((!on && !off) || is_preview) + if (!on && !off) return FAIL; if (wp != NULL) { @@ -2034,7 +2034,7 @@ parse_popup_option(win_T *wp, int is_preview) int on = STRNCMP(arg, "on", 2) == 0 && arg + 2 == p; int off = STRNCMP(arg, "off", 3) == 0 && arg + 3 == p; - if ((!on && !off) || is_preview) + if (!on && !off) return FAIL; if (wp != NULL) wp->w_popup_shadow = on ? 1 : 0; @@ -2457,21 +2457,24 @@ popup_create(typval_T *argvars, typval_T *rettv, create_type_T type) wp->w_popup_flags |= POPF_CURSORLINE; } + for (i = 0; i < 4; ++i) + VIM_CLEAR(wp->w_border_highlight[i]); + for (i = 0; i < 8; ++i) + wp->w_border_char[i] = 0; + if (type == TYPE_PREVIEW) { - wp->w_popup_flags |= POPF_DRAG | POPF_RESIZE; - wp->w_popup_close = POPCLOSE_BUTTON; + if (mouse_has(MOUSE_INSERT)) + { + wp->w_popup_flags |= POPF_DRAG | POPF_RESIZE; + wp->w_popup_close = POPCLOSE_BUTTON; + } for (i = 0; i < 4; ++i) wp->w_popup_border[i] = 1; parse_previewpopup(wp); popup_set_wantpos_cursor(wp, wp->w_minwidth, d); } - for (i = 0; i < 4; ++i) - VIM_CLEAR(wp->w_border_highlight[i]); - for (i = 0; i < 8; ++i) - wp->w_border_char[i] = 0; - #ifdef FEAT_QUICKFIX if (type == TYPE_INFO) { diff --git a/src/testdir/dumps/Test_previewpopup_border_1.dump b/src/testdir/dumps/Test_previewpopup_border_1.dump new file mode 100644 index 000000000..c99baafa0 --- /dev/null +++ b/src/testdir/dumps/Test_previewpopup_border_1.dump @@ -0,0 +1,14 @@ +>o+0&#ffffff0|n|e| @71 +|┌+0#0000001#ffd7ff255| |X|p@1|f|i|l|e| |─@31|X| +0#0000000#ffffff0@31 +|│+0#0000001#ffd7ff255|1| @38| +0#0000000#0000001|│+0#0000001#ffd7ff255| +0#0000000#ffffff0@31 +|│+0#0000001#ffd7ff255|2| @38| +0#0000000#a8a8a8255|│+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|│+0#0000001#ffd7ff255|3| @38| +0#0000000#a8a8a8255|│+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|│+0#0000001#ffd7ff255|4| @38| +0#0000000#a8a8a8255|│+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|└+0#0000001#ffd7ff255|─@40|┘| +0#4040ff13#ffffff0@31 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&| @55|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_previewpopup_border_2.dump b/src/testdir/dumps/Test_previewpopup_border_2.dump new file mode 100644 index 000000000..4e818d19e --- /dev/null +++ b/src/testdir/dumps/Test_previewpopup_border_2.dump @@ -0,0 +1,14 @@ +>o+0&#ffffff0|n|e| @71 +|╔+0#0000001#ffd7ff255| |X|p@1|f|i|l|e| |═@31|X| +0#0000000#ffffff0@31 +|║+0#0000001#ffd7ff255|1| @38| +0#0000000#0000001|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@31 +|║+0#0000001#ffd7ff255|2| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|║+0#0000001#ffd7ff255|3| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|║+0#0000001#ffd7ff255|4| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|╚+0#0000001#ffd7ff255|═@40|╝| +0#4040ff13#ffffff0@31 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&| @55|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_previewpopup_border_3.dump b/src/testdir/dumps/Test_previewpopup_border_3.dump new file mode 100644 index 000000000..e544ced85 --- /dev/null +++ b/src/testdir/dumps/Test_previewpopup_border_3.dump @@ -0,0 +1,14 @@ +>o+0&#ffffff0|n|e| @71 +|╭+0#0000001#ffd7ff255| |X|p@1|f|i|l|e| |─@31|X| +0#0000000#ffffff0@31 +|│+0#0000001#ffd7ff255|1| @38| +0#0000000#0000001|│+0#0000001#ffd7ff255| +0#0000000#ffffff0@31 +|│+0#0000001#ffd7ff255|2| @38| +0#0000000#a8a8a8255|│+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|│+0#0000001#ffd7ff255|3| @38| +0#0000000#a8a8a8255|│+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|│+0#0000001#ffd7ff255|4| @38| +0#0000000#a8a8a8255|│+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|╰+0#0000001#ffd7ff255|─@40|╯| +0#4040ff13#ffffff0@31 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&| @55|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_previewpopup_border_4.dump b/src/testdir/dumps/Test_previewpopup_border_4.dump new file mode 100644 index 000000000..7e8e6ccf9 --- /dev/null +++ b/src/testdir/dumps/Test_previewpopup_border_4.dump @@ -0,0 +1,14 @@ +>o+0&#ffffff0|n|e| @71 +|++0#0000001#ffd7ff255| |X|p@1|f|i|l|e| |-@31|X| +0#0000000#ffffff0@31 +||+0#0000001#ffd7ff255|1| @38| +0#0000000#0000001||+0#0000001#ffd7ff255| +0#0000000#ffffff0@31 +||+0#0000001#ffd7ff255|2| @38| +0#0000000#a8a8a8255||+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +||+0#0000001#ffd7ff255|3| @38| +0#0000000#a8a8a8255||+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +||+0#0000001#ffd7ff255|4| @38| +0#0000000#a8a8a8255||+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|++0#0000001#ffd7ff255|-@40|+| +0#4040ff13#ffffff0@31 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&| @55|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_previewpopup_border_5.dump b/src/testdir/dumps/Test_previewpopup_border_5.dump new file mode 100644 index 000000000..553f12c3b --- /dev/null +++ b/src/testdir/dumps/Test_previewpopup_border_5.dump @@ -0,0 +1,14 @@ +>o+0&#ffffff0|n|e| @71 +|┌+0&#afffff255| |X|p@1|f|i|l|e| |─@31|X| +0&#ffffff0@31 +|│+0&#afffff255|1+0#0000001#ffd7ff255| @38| +0#0000000#0000001|│+0&#afffff255| +0&#ffffff0@31 +|│+0&#afffff255|2+0#0000001#ffd7ff255| @38| +0#0000000#a8a8a8255|│+0&#afffff255| +0#4040ff13#ffffff0@31 +|│+0#0000000#afffff255|3+0#0000001#ffd7ff255| @38| +0#0000000#a8a8a8255|│+0&#afffff255| +0#4040ff13#ffffff0@31 +|│+0#0000000#afffff255|4+0#0000001#ffd7ff255| @38| +0#0000000#a8a8a8255|│+0&#afffff255| +0#4040ff13#ffffff0@31 +|└+0#0000000#afffff255|─@40|┘| +0#4040ff13#ffffff0@31 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&| @55|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_previewpopup_border_6.dump b/src/testdir/dumps/Test_previewpopup_border_6.dump new file mode 100644 index 000000000..eeb432c4f --- /dev/null +++ b/src/testdir/dumps/Test_previewpopup_border_6.dump @@ -0,0 +1,14 @@ +>o+0&#ffffff0|n|e| @71 +|╔+0&#afffff255| |X|p@1|f|i|l|e| |═@31|X| +0&#ffffff0@31 +|║+0&#afffff255|1+0#0000001#ffd7ff255| @38| +0#0000000#0000001|║+0&#afffff255| +0&#ffffff0@31 +|║+0&#afffff255|2+0#0000001#ffd7ff255| @38| +0#0000000#a8a8a8255|║+0&#afffff255| +0#4040ff13#ffffff0@31 +|║+0#0000000#afffff255|3+0#0000001#ffd7ff255| @38| +0#0000000#a8a8a8255|║+0&#afffff255| +0#4040ff13#ffffff0@31 +|║+0#0000000#afffff255|4+0#0000001#ffd7ff255| @38| +0#0000000#a8a8a8255|║+0&#afffff255| +0#4040ff13#ffffff0@31 +|╚+0#0000000#afffff255|═@40|⇲| +0#4040ff13#ffffff0@31 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&| @55|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_previewpopup_border_7.dump b/src/testdir/dumps/Test_previewpopup_border_7.dump new file mode 100644 index 000000000..7ad9417a2 --- /dev/null +++ b/src/testdir/dumps/Test_previewpopup_border_7.dump @@ -0,0 +1,14 @@ +>o+0&#ffffff0|n|e| @71 +| +0#0000001#ffd7ff255@1|X|p@1|f|i|l|e| @31| +0#0000000#ffffff0@33 +|1+0#0000001#ffd7ff255| @38| +0#0000000#0000001| +0&#ffffff0@33 +|2+0#0000001#ffd7ff255| @38| +0#0000000#a8a8a8255| +0#4040ff13#ffffff0@33 +|3+0#0000001#ffd7ff255| @38| +0#0000000#a8a8a8255| +0#4040ff13#ffffff0@33 +|4+0#0000001#ffd7ff255| @38| +0#0000000#a8a8a8255| +0#4040ff13#ffffff0@33 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&| @55|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_previewpopup_border_mouse_1.dump b/src/testdir/dumps/Test_previewpopup_border_mouse_1.dump new file mode 100644 index 000000000..f4477e6c8 --- /dev/null +++ b/src/testdir/dumps/Test_previewpopup_border_mouse_1.dump @@ -0,0 +1,14 @@ +>o+0&#ffffff0|n|e| @71 +|╔+0#0000001#ffd7ff255| |X|p@1|M|o|u|s|e|f|i|l|e| |═@26|╗| +0#0000000#ffffff0@31 +|║+0#0000001#ffd7ff255|1| @38| +0#0000000#0000001|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@31 +|║+0#0000001#ffd7ff255|2| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|║+0#0000001#ffd7ff255|3| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|║+0#0000001#ffd7ff255|4| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|╚+0#0000001#ffd7ff255|═@40|╝| +0#4040ff13#ffffff0@31 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&| @55|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_previewpopup_border_mouse_2.dump b/src/testdir/dumps/Test_previewpopup_border_mouse_2.dump new file mode 100644 index 000000000..1be1595a2 --- /dev/null +++ b/src/testdir/dumps/Test_previewpopup_border_mouse_2.dump @@ -0,0 +1,14 @@ +>o+0&#ffffff0|n|e| @71 +|╔+0#0000001#ffd7ff255| |X|p@1|M|o|u|s|e|f|i|l|e| |═@26|X| +0#0000000#ffffff0@31 +|║+0#0000001#ffd7ff255|1| @38| +0#0000000#0000001|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@31 +|║+0#0000001#ffd7ff255|2| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|║+0#0000001#ffd7ff255|3| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|║+0#0000001#ffd7ff255|4| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|╚+0#0000001#ffd7ff255|═@40|⇲| +0#4040ff13#ffffff0@31 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&| @55|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_previewpopup_border_mouse_3.dump b/src/testdir/dumps/Test_previewpopup_border_mouse_3.dump new file mode 100644 index 000000000..6b06be142 --- /dev/null +++ b/src/testdir/dumps/Test_previewpopup_border_mouse_3.dump @@ -0,0 +1,14 @@ +>o+0&#ffffff0|n|e| @71 +|╔+0#0000001#ffd7ff255| |X|p@1|M|o|u|s|e|f|i|l|e| |═@26|X| +0#0000000#ffffff0@31 +|║+0#0000001#ffd7ff255|1| @38| +0#0000000#0000001|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@31 +|║+0#0000001#ffd7ff255|2| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|║+0#0000001#ffd7ff255|3| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|║+0#0000001#ffd7ff255|4| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|╚+0#0000001#ffd7ff255|═@40|╝| +0#4040ff13#ffffff0@31 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&| @55|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_previewpopup_border_mouse_4.dump b/src/testdir/dumps/Test_previewpopup_border_mouse_4.dump new file mode 100644 index 000000000..a36297f0c --- /dev/null +++ b/src/testdir/dumps/Test_previewpopup_border_mouse_4.dump @@ -0,0 +1,14 @@ +>o+0&#ffffff0|n|e| @71 +|╔+0#0000001#ffd7ff255| |X|p@1|M|o|u|s|e|f|i|l|e| |═@26|╗| +0#0000000#ffffff0@31 +|║+0#0000001#ffd7ff255|1| @38| +0#0000000#0000001|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@31 +|║+0#0000001#ffd7ff255|2| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|║+0#0000001#ffd7ff255|3| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|║+0#0000001#ffd7ff255|4| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|╚+0#0000001#ffd7ff255|═@40|⇲| +0#4040ff13#ffffff0@31 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&| @55|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_previewpopup_border_mouse_5.dump b/src/testdir/dumps/Test_previewpopup_border_mouse_5.dump new file mode 100644 index 000000000..92b7beb0c --- /dev/null +++ b/src/testdir/dumps/Test_previewpopup_border_mouse_5.dump @@ -0,0 +1,14 @@ +>o+0&#ffffff0|n|e| @71 +|┌+0#0000001#ffd7ff255| |X|p@1|M|o|u|s|e|f|i|l|e| |─@26|┐| +0#0000000#ffffff0@31 +|│+0#0000001#ffd7ff255|1| @38| +0#0000000#0000001|│+0#0000001#ffd7ff255| +0#0000000#ffffff0@31 +|│+0#0000001#ffd7ff255|2| @38| +0#0000000#a8a8a8255|│+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|│+0#0000001#ffd7ff255|3| @38| +0#0000000#a8a8a8255|│+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|│+0#0000001#ffd7ff255|4| @38| +0#0000000#a8a8a8255|│+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|└+0#0000001#ffd7ff255|─@40|┘| +0#4040ff13#ffffff0@31 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&| @55|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_previewpopup_border_mouse_6.dump b/src/testdir/dumps/Test_previewpopup_border_mouse_6.dump new file mode 100644 index 000000000..8252a5c43 --- /dev/null +++ b/src/testdir/dumps/Test_previewpopup_border_mouse_6.dump @@ -0,0 +1,14 @@ +>o+0&#ffffff0|n|e| @71 +|┌+0#0000001#ffd7ff255| |X|p@1|M|o|u|s|e|f|i|l|e| |─@26|X| +0#0000000#ffffff0@31 +|│+0#0000001#ffd7ff255|1| @38| +0#0000000#0000001|│+0#0000001#ffd7ff255| +0#0000000#ffffff0@31 +|│+0#0000001#ffd7ff255|2| @38| +0#0000000#a8a8a8255|│+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|│+0#0000001#ffd7ff255|3| @38| +0#0000000#a8a8a8255|│+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|│+0#0000001#ffd7ff255|4| @38| +0#0000000#a8a8a8255|│+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|└+0#0000001#ffd7ff255|─@40|┘| +0#4040ff13#ffffff0@31 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&| @55|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_previewpopup_border_mouse_7.dump b/src/testdir/dumps/Test_previewpopup_border_mouse_7.dump new file mode 100644 index 000000000..92b7beb0c --- /dev/null +++ b/src/testdir/dumps/Test_previewpopup_border_mouse_7.dump @@ -0,0 +1,14 @@ +>o+0&#ffffff0|n|e| @71 +|┌+0#0000001#ffd7ff255| |X|p@1|M|o|u|s|e|f|i|l|e| |─@26|┐| +0#0000000#ffffff0@31 +|│+0#0000001#ffd7ff255|1| @38| +0#0000000#0000001|│+0#0000001#ffd7ff255| +0#0000000#ffffff0@31 +|│+0#0000001#ffd7ff255|2| @38| +0#0000000#a8a8a8255|│+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|│+0#0000001#ffd7ff255|3| @38| +0#0000000#a8a8a8255|│+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|│+0#0000001#ffd7ff255|4| @38| +0#0000000#a8a8a8255|│+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|└+0#0000001#ffd7ff255|─@40|┘| +0#4040ff13#ffffff0@31 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&| @55|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_previewpopup_shadow_1.dump b/src/testdir/dumps/Test_previewpopup_shadow_1.dump new file mode 100644 index 000000000..64efd962f --- /dev/null +++ b/src/testdir/dumps/Test_previewpopup_shadow_1.dump @@ -0,0 +1,14 @@ +>o+0&#ffffff0|n|e| @71 +|╔+0#0000001#ffd7ff255| |X|p@1|S|h|a|d|o|w|f|i|l|e| |═@25|X| +0#0000000#ffffff0@31 +|║+0#0000001#ffd7ff255|1| @38| +0#0000000#0000001|║+0#0000001#ffd7ff255| +0#6c6c6c255#0000001@1| +0#0000000#ffffff0@29 +|║+0#0000001#ffd7ff255|2| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#6c6c6c255#0000001@1| +0#4040ff13#ffffff0@29 +|║+0#0000001#ffd7ff255|3| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#6c6c6c255#0000001@1| +0#4040ff13#ffffff0@29 +|║+0#0000001#ffd7ff255|4| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#6c6c6c255#0000001@1| +0#4040ff13#ffffff0@29 +|╚+0#0000001#ffd7ff255|═@40|⇲| +0#6c6c6c255#0000001@1| +0#4040ff13#ffffff0@29 +|~| | +0#6c6c6c255#0000001@42| +0#4040ff13#ffffff0@29 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&| @55|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_previewpopup_shadow_2.dump b/src/testdir/dumps/Test_previewpopup_shadow_2.dump new file mode 100644 index 000000000..f3ad04099 --- /dev/null +++ b/src/testdir/dumps/Test_previewpopup_shadow_2.dump @@ -0,0 +1,14 @@ +>o+0&#ffffff0|n|e| @71 +|╔+0#0000001#ffd7ff255| |X|p@1|S|h|a|d|o|w|f|i|l|e| |═@25|X| +0#0000000#ffffff0@31 +|║+0#0000001#ffd7ff255|1| @38| +0#0000000#0000001|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@31 +|║+0#0000001#ffd7ff255|2| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|║+0#0000001#ffd7ff255|3| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|║+0#0000001#ffd7ff255|4| @38| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#4040ff13#ffffff0@31 +|╚+0#0000001#ffd7ff255|═@40|⇲| +0#4040ff13#ffffff0@31 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|:+0#0000000&| @55|1|,|1| @10|A|l@1| diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim index c6c83bb98..b2ca4d943 100644 --- a/src/testdir/test_options.vim +++ b/src/testdir/test_options.vim @@ -643,10 +643,10 @@ func Test_set_completion_string_values() set keyprotocol& " previewpopup / completepopup - call assert_equal('height:', getcompletion('set previewpopup=', 'cmdline')[0]) + call assert_equal('border:', getcompletion('set previewpopup=', 'cmdline')[0]) call assert_equal('EndOfBuffer', getcompletion('set previewpopup=highlight:End*Buffer', 'cmdline')[0]) call feedkeys(":set previewpopup+=border:\<Tab>\<C-B>\"\<CR>", 'xt') - call assert_equal('"set previewpopup+=border:on', @:) + call assert_equal('"set previewpopup+=border:single', @:) call feedkeys(":set completepopup=height:10,align:\<Tab>\<C-B>\"\<CR>", 'xt') call assert_equal('"set completepopup=height:10,align:item', @:) call assert_equal([], getcompletion('set completepopup=bogusname:', 'cmdline')) diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim index c00ac29a7..24d8fab57 100644 --- a/src/testdir/test_popupwin.vim +++ b/src/testdir/test_popupwin.vim @@ -3523,6 +3523,132 @@ func Test_previewpopup_pum_pbuffer() call s:run_preview_popuppum(lines, 'pbuffer') endfunc +func Test_previewpopup_border() + CheckScreendump + CheckFeature quickfix + call writefile(range(1, 20), 'Xppfile', 'D') + + let lines =<< trim END + call setline(1, ['one', 'two', 'three']) + hi BorderColor ctermbg=lightcyan guibg=lightcyan + END + call writefile(lines, 'XtestPPBorder', 'D') + let buf = RunVimInTerminal('-S XtestPPBorder', #{rows: 14}) + call TermWait(buf, 25) + call term_sendkeys(buf, ":set previewpopup=height:4,width:40,border:single\<CR>") + call term_sendkeys(buf, ":pedit Xppfile\<CR>:\<CR>") + call VerifyScreenDump(buf, 'Test_previewpopup_border_1', {}) + + call term_sendkeys(buf, ":pclose\<CR>") + call term_sendkeys(buf, ":set previewpopup=height:4,width:40,border:double\<CR>") + call term_sendkeys(buf, ":pedit Xppfile\<CR>:\<CR>") + call VerifyScreenDump(buf, 'Test_previewpopup_border_2', {}) + + call term_sendkeys(buf, ":pclose\<CR>") + call term_sendkeys(buf, ":set previewpopup=height:4,width:40,border:round\<CR>") + call term_sendkeys(buf, ":pedit Xppfile\<CR>:\<CR>") + call VerifyScreenDump(buf, 'Test_previewpopup_border_3', {}) + + call term_sendkeys(buf, ":pclose\<CR>") + call term_sendkeys(buf, ":set previewpopup=height:4,width:40,border:ascii\<CR>") + call term_sendkeys(buf, ":pedit Xppfile\<CR>:\<CR>") + call VerifyScreenDump(buf, 'Test_previewpopup_border_4', {}) + + call term_sendkeys(buf, ":pclose\<CR>") + call term_sendkeys(buf, ":set previewpopup=height:4,width:40,border:single,borderhighlight:BorderColor\<CR>") + call term_sendkeys(buf, ":pedit Xppfile\<CR>:\<CR>") + call VerifyScreenDump(buf, 'Test_previewpopup_border_5', {}) + + call term_sendkeys(buf, ":pclose\<CR>") + call term_sendkeys(buf, ":set previewpopup=height:4,width:40,border:on,borderhighlight:BorderColor\<CR>") + call term_sendkeys(buf, ":pedit Xppfile\<CR>:\<CR>") + call VerifyScreenDump(buf, 'Test_previewpopup_border_6', {}) + + call term_sendkeys(buf, ":pclose\<CR>") + call term_sendkeys(buf, ":set previewpopup=height:4,width:40,border:off\<CR>") + call term_sendkeys(buf, ":pedit Xppfile\<CR>:\<CR>") + call VerifyScreenDump(buf, 'Test_previewpopup_border_7', {}) + call StopVimInTerminal(buf) +endfunc + +func Test_previewpopup_border_mouse() + CheckScreendump + CheckFeature quickfix + + call writefile(range(1, 20), 'XppMousefile', 'D') + + let lines =<< trim END + call setline(1, ['one', 'two', 'three']) + hi BorderColor ctermbg=lightcyan guibg=lightcyan + set mouse= + set previewpopup=height:4,width:40 + END + call writefile(lines, 'XtestPPBorderMouse', 'D') + let buf = RunVimInTerminal('-S XtestPPBorderMouse', #{rows: 14}) + + call TermWait(buf, 25) + call term_sendkeys(buf, ":pedit XppMousefile\<CR>:\<CR>") + call VerifyScreenDump(buf, 'Test_previewpopup_border_mouse_1', {}) + + call term_sendkeys(buf, ":pclose\<CR>") + call term_sendkeys(buf, ":set mouse=a\<CR>:\<CR>") + call term_sendkeys(buf, ":pedit XppMousefile\<CR>:\<CR>") + call VerifyScreenDump(buf, 'Test_previewpopup_border_mouse_2', {}) + + call term_sendkeys(buf, ":pclose\<CR>") + call term_sendkeys(buf, ":set previewpopup=height:4,width:40,resize:off\<CR>") + call term_sendkeys(buf, ":pedit XppMousefile\<CR>:\<CR>") + call VerifyScreenDump(buf, 'Test_previewpopup_border_mouse_3', {}) + + call term_sendkeys(buf, ":pclose\<CR>") + call term_sendkeys(buf, ":set previewpopup=height:4,width:40,resize:on,close:off\<CR>") + call term_sendkeys(buf, ":pedit XppMousefile\<CR>:\<CR>") + call VerifyScreenDump(buf, 'Test_previewpopup_border_mouse_4', {}) + + call term_sendkeys(buf, ":pclose\<CR>") + call term_sendkeys(buf, ":set previewpopup=height:4,width:40,border:single,close:off\<CR>") + call term_sendkeys(buf, ":pedit XppMousefile\<CR>:\<CR>") + call VerifyScreenDump(buf, 'Test_previewpopup_border_mouse_5', {}) + + call term_sendkeys(buf, ":pclose\<CR>") + call term_sendkeys(buf, ":set previewpopup=height:4,width:40,border:single,close:on\<CR>") + call term_sendkeys(buf, ":pedit XppMousefile\<CR>:\<CR>") + call VerifyScreenDump(buf, 'Test_previewpopup_border_mouse_6', {}) + + call term_sendkeys(buf, ":pclose\<CR>") + call term_sendkeys(buf, ":set previewpopup=height:4,width:40,border:single,close:off\<CR>") + call term_sendkeys(buf, ":pedit XppMousefile\<CR>:\<CR>") + call VerifyScreenDump(buf, 'Test_previewpopup_border_mouse_7', {}) + + call StopVimInTerminal(buf) +endfunc + +func Test_previewpopup_shadow() + CheckScreendump + CheckFeature quickfix + + call writefile(range(1, 20), 'XppShadowfile', 'D') + + let lines =<< trim END + call setline(1, ['one', 'two', 'three']) + hi BorderColor ctermbg=lightcyan guibg=lightcyan + END + call writefile(lines, 'XtestPPShadow', 'D') + let buf = RunVimInTerminal('-S XtestPPShadow', #{rows: 14}) + + call TermWait(buf, 25) + call term_sendkeys(buf, ":set previewpopup=height:4,width:40,shadow:on\<CR>") + call term_sendkeys(buf, ":pedit XppShadowfile\<CR>:\<CR>") + call VerifyScreenDump(buf, 'Test_previewpopup_shadow_1', {}) + + call term_sendkeys(buf, ":pclose\<CR>") + call term_sendkeys(buf, ":set previewpopup=height:4,width:40,shadow:off\<CR>") + call term_sendkeys(buf, ":pedit XppShadowfile\<CR>:\<CR>") + call VerifyScreenDump(buf, 'Test_previewpopup_shadow_2', {}) + + call StopVimInTerminal(buf) +endfunc + func Get_popupmenu_lines() let lines =<< trim END set completeopt+=preview,popup diff --git a/src/testdir/util/gen_opt_test.vim b/src/testdir/util/gen_opt_test.vim index 51ff726d3..7431122e1 100644 --- a/src/testdir/util/gen_opt_test.vim +++ b/src/testdir/util/gen_opt_test.vim @@ -272,10 +272,14 @@ let test_values = { \ ['xxx']], \ 'patchmode': [['', 'xxx', '.x'], [&backupext, '*']], \ 'previewpopup': [['', 'height:13', 'width:20', 'highlight:That', - \ 'align:item', 'align:menu', 'border:on', 'border:off', + \ 'border:on', 'border:off', 'border:round', 'border:single', + \ 'border:double', 'border:ascii', 'close:on', 'close:off', + \ 'resize:on', 'resize:off', 'shadow:on', 'shadow:off', + \ 'borderhighlight:Title', \ 'width:10,height:234,highlight:Mine'], \ ['xxx', 'xxx:99', 'height:yes', 'width:no', 'align:xxx', - \ 'border:maybe', 'border:1', 'border:']], + \ 'border:maybe', 'border:1', 'border:', 'resize:xxx', 'close:xxx', + \ 'shadow:xxx']], \ 'printmbfont': [['', 'r:some', 'b:some', 'i:some', 'o:some', 'c:yes', \ 'c:no', 'a:yes', 'a:no', 'b:Bold,c:yes'], \ ['xxx', 'xxx,c:yes', 'xxx:', 'xxx:,c:yes']], diff --git a/src/version.c b/src/version.c index 076063b4c..2d8094030 100644 --- a/src/version.c +++ b/src/version.c @@ -734,6 +734,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 51, /**/ 50, /**/ -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1vv0Ro-00BQii-4t%40256bit.org.
