Mercurial > vim
changeset 21373:3d73cdd173ab v8.2.1237
patch 8.2.1237: changing 'completepopup' after opening popup has no effect
Commit: https://github.com/vim/vim/commit/447bfba24b231777a79bf53cdb33f44d9691e47e
Author: Bram Moolenaar <Bram@vim.org>
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)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 18 Jul 2020 16:15:04 +0200 |
parents | 86c5173b29b1 |
children | 1d571711c772 |
files | runtime/doc/options.txt src/optionstr.c src/popupwin.c src/proto/popupwin.pro src/testdir/dumps/Test_popupwin_infopopup_8.dump src/testdir/test_popupwin.vim src/version.c |
diffstat | 7 files changed, 42 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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'*
--- 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
--- 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 /*
--- 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);
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
--- 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\<C-X>\<C-U>") call VerifyScreenDump(buf, 'Test_popupwin_infopopup_7', {}) + " Test that when the option is changed the popup changes. + call term_sendkeys(buf, "\<Esc>") + call term_sendkeys(buf, ":set completepopup=border:off\<CR>") + call term_sendkeys(buf, "a\<C-X>\<C-U>") + call VerifyScreenDump(buf, 'Test_popupwin_infopopup_8', {}) + call term_sendkeys(buf, "\<Esc>") call StopVimInTerminal(buf) call delete('XtestInfoPopup')