# HG changeset patch # User Bram Moolenaar # Date 1595081704 -7200 # Node ID 3d73cdd173ab7e0f9e1e7d76b0582f58f3384ae6 # Parent 86c5173b29b15de308136c6d1f152bdbd3ed1133 patch 8.2.1237: changing 'completepopup' after opening popup has no effect Commit: https://github.com/vim/vim/commit/447bfba24b231777a79bf53cdb33f44d9691e47e Author: Bram Moolenaar Date: Sat Jul 18 16:07:16 2020 +0200 patch 8.2.1237: changing 'completepopup' after opening popup has no effect Problem: Changing 'completepopup' after opening a popup has no effect. (Jay Sitter) Solution: Close the popup when the options are changed. (closes #6471) diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1951,9 +1951,11 @@ A jump table for the options with a shor {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 when it is created. You can also use - |popup_findinfo()| and then set properties for an existing info popup - with |popup_setoptions()|. See |complete-popup|. + properties of the info popup when it is created. If an info popup + window already exists it is closed, so that the option value is + applied when it is created again. + You can also use |popup_findinfo()| and then set properties for an + existing info popup with |popup_setoptions()|. See |complete-popup|. *'concealcursor'* *'cocu'* diff --git a/src/optionstr.c b/src/optionstr.c --- a/src/optionstr.c +++ b/src/optionstr.c @@ -2249,6 +2249,8 @@ did_set_string_option( { if (parse_completepopup(NULL) == FAIL) errmsg = e_invarg; + else + popup_close_info(); } # endif #endif diff --git a/src/popupwin.c b/src/popupwin.c --- a/src/popupwin.c +++ b/src/popupwin.c @@ -4031,6 +4031,18 @@ popup_hide_info(void) if (wp != NULL) popup_hide(wp); } + +/* + * Close any info popup. + */ + void +popup_close_info(void) +{ + win_T *wp = popup_find_info_window(); + + if (wp != NULL) + popup_close_with_retval(wp, -1); +} #endif /* diff --git a/src/proto/popupwin.pro b/src/proto/popupwin.pro --- a/src/proto/popupwin.pro +++ b/src/proto/popupwin.pro @@ -60,6 +60,7 @@ void f_popup_findpreview(typval_T *argva int popup_create_preview_window(int info); void popup_close_preview(void); void popup_hide_info(void); +void popup_close_info(void); int popup_win_closed(win_T *win); void popup_set_title(win_T *wp); void popup_update_preview_title(void); diff --git a/src/testdir/dumps/Test_popupwin_infopopup_8.dump b/src/testdir/dumps/Test_popupwin_infopopup_8.dump new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_popupwin_infopopup_8.dump @@ -0,0 +1,14 @@ +|a+0&#ffffff0|w|o|r|d| @69 +|t|e|s|t| |t|a|w|o|r|d> @63 +|~+0#4040ff13&| @3| +0#0000001#e0e0e08|w|r|d| @4|W| |e|x|t|r|a| |t|e|x|t| @1| +0#0000000#0000001| +0#0000001#e0e0e08|w|o|r|d|s| |a|r|e| |c|o@1|l| | +0#4040ff13#ffffff0@29 +|~| @3| +0#0000001#ffd7ff255|a|n|o|t|w|r|d| |W| |e|x|t|r|a| |t|e|x|t| @1| +0#0000000#0000001| +0#4040ff13#ffffff0@45 +|~| @3| +0#0000001#ffd7ff255|n|o|a|w|r|d| @1|W| |e|x|t|r|a| |t|e|x|t| @1| +0#0000000#a8a8a8255| +0#4040ff13#ffffff0@45 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|-+2#0000000&@1| |U|s|e|r| |d|e|f|i|n|e|d| |c|o|m|p|l|e|t|i|o|n| |(|^|U|^|N|^|P|)| |m+0#00e0003&|a|t|c|h| |1| |o|f| |4| +0#0000000&@26 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 @@ -3109,6 +3109,12 @@ func Test_popupmenu_info_border() call term_sendkeys(buf, "otest text test text\\") call VerifyScreenDump(buf, 'Test_popupwin_infopopup_7', {}) + " Test that when the option is changed the popup changes. + call term_sendkeys(buf, "\") + call term_sendkeys(buf, ":set completepopup=border:off\") + call term_sendkeys(buf, "a\\") + call VerifyScreenDump(buf, 'Test_popupwin_infopopup_8', {}) + call term_sendkeys(buf, "\") call StopVimInTerminal(buf) call delete('XtestInfoPopup') diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1237, +/**/ 1236, /**/ 1235,