0
0
mirror of https://github.com/vim/vim.git synced 2025-10-09 06:14:17 -04:00

patch 8.2.1415: closing a popup window with CTRL-C interrupts 'statusline'

Problem:    Closing a popup window with CTRL-C interrupts 'statusline' if it
            calls a function.
Solution:   Reset got_int while redrawing. (closes #6675)
This commit is contained in:
Bram Moolenaar
2020-08-10 21:19:23 +02:00
parent bf61fdd008
commit 6f8f7337c1
4 changed files with 44 additions and 0 deletions

View File

@@ -3209,7 +3209,14 @@ popup_do_filter(int c)
res = invoke_popup_filter(wp, c);
if (must_redraw > was_must_redraw)
{
int save_got_int = got_int;
// Reset got_int to avoid a function used in the statusline aborts.
got_int = FALSE;
redraw_after_callback(FALSE);
got_int |= save_got_int;
}
recursive = FALSE;
KeyTyped = save_KeyTyped;
return res;

View File

@@ -0,0 +1,10 @@
> +0&#ffffff0@36||+1&&| +0&&@36
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @35
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|[+3#0000000&|N|o| |N|a|m|e|]| @9|0|,|0|-|1| @9|A|l@1| |[+1&&|N|o| |N|a|m|e|]| @9|0|,|0|-|1| @9|A|l@1
| +0&&@74

View File

@@ -3479,6 +3479,31 @@ func Test_popupwin_filter_input_multibyte()
unlet g:bytes
endfunc
func Test_popupwin_filter_close_ctrl_c()
CheckScreendump
let lines =<< trim END
vsplit
set laststatus=2
set statusline=%!Statusline()
function Statusline() abort
return '%<%f %h%m%r%=%-14.(%l,%c%V%) %P'
endfunction
call popup_create('test test test test...', {'filter': {-> 0}})
END
call writefile(lines, 'XtestPopupCtrlC')
let buf = RunVimInTerminal('-S XtestPopupCtrlC', #{rows: 10})
call term_sendkeys(buf, "\<C-C>")
call VerifyScreenDump(buf, 'Test_popupwin_ctrl_c', {})
call StopVimInTerminal(buf)
call delete('XtestPopupCorners')
endfunc
func Test_popupwin_atcursor_far_right()
new

View File

@@ -754,6 +754,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1415,
/**/
1414,
/**/