diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-02-20 20:12:29 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-02-20 20:12:29 +0100 |
commit | 11ec807639ae642bf55da883918489e2cd9911ab (patch) | |
tree | 14706a1435fe7a0b74dd1d95f61902df2345c424 /src | |
parent | 0bbf722aaaa75b1bbe87ef6afc44c5fff8e3893b (diff) | |
download | vim-git-11ec807639ae642bf55da883918489e2cd9911ab.tar.gz |
patch 8.2.0286: cannot use popup_close() for a terminal popupv8.2.0286
Problem: Cannot use popup_close() for a terminal popup.
Solution: Allow using popup_close(). (closes #5666)
Diffstat (limited to 'src')
-rw-r--r-- | src/popupwin.c | 7 | ||||
-rw-r--r-- | src/testdir/dumps/Test_terminal_popup_5.dump | 15 | ||||
-rw-r--r-- | src/testdir/dumps/Test_terminal_popup_6.dump | 15 | ||||
-rw-r--r-- | src/testdir/test_terminal.vim | 17 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 53 insertions, 3 deletions
diff --git a/src/popupwin.c b/src/popupwin.c index 56d04b57e..407837850 100644 --- a/src/popupwin.c +++ b/src/popupwin.c @@ -2360,7 +2360,12 @@ f_popup_close(typval_T *argvars, typval_T *rettv UNUSED) int id = (int)tv_get_number(argvars); win_T *wp; - if (ERROR_IF_ANY_POPUP_WINDOW) + if ( +# ifdef FEAT_TERMINAL + // if the popup contains a terminal it will become hidden + curbuf->b_term == NULL && +# endif + ERROR_IF_ANY_POPUP_WINDOW) return; wp = find_popup_win(id); diff --git a/src/testdir/dumps/Test_terminal_popup_5.dump b/src/testdir/dumps/Test_terminal_popup_5.dump new file mode 100644 index 000000000..7dbf1a616 --- /dev/null +++ b/src/testdir/dumps/Test_terminal_popup_5.dump @@ -0,0 +1,15 @@ +>0+0&#ffffff0| @73 +|1| @73 +|2| @73 +|3| @73 +|4| @73 +|5| @73 +|6| @73 +|7| @73 +|8| @73 +|9| @73 +|1|0| @72 +|1@1| @72 +|1|2| @72 +|1|3| @72 +|:|c|a|l@1| |C|l|o|s|e|P|o|p|u|p|(|)| @38|1|,|1| @10|T|o|p| diff --git a/src/testdir/dumps/Test_terminal_popup_6.dump b/src/testdir/dumps/Test_terminal_popup_6.dump new file mode 100644 index 000000000..ebc67708a --- /dev/null +++ b/src/testdir/dumps/Test_terminal_popup_6.dump @@ -0,0 +1,15 @@ +|0+0&#ffffff0| @73 +|1| @73 +|2| @73 +|3| @12|╔+0#0000001#ffd7ff255|═@44|╗| +0#0000000#ffffff0@13 +|4| @12|║+0#0000001#ffd7ff255|s+0#0000000#ffffff0|o|m|e| |t|e|x|t| @35|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@13 +|5| @12|║+0#0000001#ffd7ff255|t+0#0000000#ffffff0|o| >e+0&#ffff4012|d|i|t| +0&#ffffff0@37|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@13 +|6| @12|║+0#0000001#ffd7ff255|i+0#0000000#ffffff0|n| |a| |p|o|p|u|p| |w|i|n|d|o|w| @27|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@13 +|7| @12|║+0#0000001#ffd7ff255|~+0#4040ff13#ffffff0| @43|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@13 +|8| @12|║+0#0000001#ffd7ff255|~+0#4040ff13#ffffff0| @43|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@13 +|9| @12|║+0#0000001#ffd7ff255|~+0#4040ff13#ffffff0| @43|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@13 +|1|0| @11|║+0#0000001#ffd7ff255|/+0#0000000#ffffff0|e|d|i|t| @21|2|,|4| @10|A|l@1| |║+0#0000001#ffd7ff255| +0#0000000#ffffff0@13 +|1@1| @11|╚+0#0000001#ffd7ff255|═@44|╝| +0#0000000#ffffff0@13 +|1|2| @72 +|1|3| @72 +@57|1|,|1| @10|A|l@1| diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim index e0761c4bd..64bc7db1e 100644 --- a/src/testdir/test_terminal.vim +++ b/src/testdir/test_terminal.vim @@ -2337,8 +2337,8 @@ func Test_terminal_in_popup() \ 'call setline(1, range(20))', \ 'hi PopTerm ctermbg=grey', \ 'func OpenTerm(setColor)', - \ " let buf = term_start('" .. cmd .. " Xtext', #{hidden: 1, term_finish: 'close'})", - \ ' let s:winid = popup_create(buf, #{minwidth: 45, minheight: 7, border: [], drag: 1, resize: 1})', + \ " let s:buf = term_start('" .. cmd .. " Xtext', #{hidden: 1, term_finish: 'close'})", + \ ' let s:winid = popup_create(s:buf, #{minwidth: 45, minheight: 7, border: [], drag: 1, resize: 1})', \ ' if a:setColor', \ ' call win_execute(s:winid, "set wincolor=PopTerm")', \ ' endif', @@ -2347,6 +2347,12 @@ func Test_terminal_in_popup() \ 'func HidePopup()', \ ' call popup_hide(s:winid)', \ 'endfunc', + \ 'func ClosePopup()', + \ ' call popup_close(s:winid)', + \ 'endfunc', + \ 'func ReopenPopup()', + \ ' call popup_create(s:buf, #{minwidth: 40, minheight: 6, border: []})', + \ 'endfunc', \ 'sleep 10m', \ 'redraw', \ 'echo getwinvar(s:winid, "&buftype") win_gettype(s:winid)', @@ -2370,6 +2376,13 @@ func Test_terminal_in_popup() call term_sendkeys(buf, "\<CR>") call term_wait(buf, 100) + call term_sendkeys(buf, "\<C-W>:call ClosePopup()\<CR>") + call VerifyScreenDump(buf, 'Test_terminal_popup_5', {}) + + call term_sendkeys(buf, "\<C-W>:call ReopenPopup()\<CR>") + call VerifyScreenDump(buf, 'Test_terminal_popup_6', {}) + call term_wait(buf, 100) + call term_sendkeys(buf, ":q\<CR>") call term_wait(buf, 100) " wait for terminal to vanish diff --git a/src/version.c b/src/version.c index 9dc3c6fa9..e17c98b23 100644 --- a/src/version.c +++ b/src/version.c @@ -739,6 +739,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 286, +/**/ 285, /**/ 284, |