forked from aniani/vim
patch 9.1.1230: inconsistent CTRL-C behaviour for popup windows
Problem: Ctrl-C closes popup windows that have a filter callback,
but does not close popups without a filter callback.
Solution: Modified popup_do_filter() to also close popups without
filter callback when Ctrl-C is pressed (glepnir).
fixes: #16839
closes: #16928
Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
9712a2534f
commit
8a63529a2f
@@ -1,4 +1,4 @@
|
|||||||
*pattern.txt* For Vim version 9.1. Last change: 2024 Dec 26
|
*pattern.txt* For Vim version 9.1. Last change: 2025 Mar 21
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -141,6 +141,7 @@ CTRL-C Interrupt current (search) command. Use CTRL-Break on
|
|||||||
help users who use "vim file | grep word" and don't
|
help users who use "vim file | grep word" and don't
|
||||||
know how to get out (blindly typing :qa<CR> would
|
know how to get out (blindly typing :qa<CR> would
|
||||||
work).
|
work).
|
||||||
|
If a popup is open, the active popup will be closed.
|
||||||
|
|
||||||
*:noh* *:nohlsearch*
|
*:noh* *:nohlsearch*
|
||||||
:noh[lsearch] Stop the highlighting for the 'hlsearch' option. It
|
:noh[lsearch] Stop the highlighting for the 'hlsearch' option. It
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
*version9.txt* For Vim version 9.1. Last change: 2025 Mar 19
|
*version9.txt* For Vim version 9.1. Last change: 2025 Mar 21
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -41653,6 +41653,7 @@ Others: ~
|
|||||||
- add |dist#vim9#Launch()| and |dist#vim9#Open()| to the |vim-script-library|
|
- add |dist#vim9#Launch()| and |dist#vim9#Open()| to the |vim-script-library|
|
||||||
and decouple it from |netrw|
|
and decouple it from |netrw|
|
||||||
- new digraph "APPROACHES THE LIMIT" using ".="
|
- new digraph "APPROACHES THE LIMIT" using ".="
|
||||||
|
- |CTRL-C| always closes the active |popup-window|.
|
||||||
|
|
||||||
*added-9.2*
|
*added-9.2*
|
||||||
Added ~
|
Added ~
|
||||||
|
|||||||
@@ -3586,6 +3586,20 @@ popup_do_filter(int c)
|
|||||||
&& (wp->w_filter_mode & state) != 0)
|
&& (wp->w_filter_mode & state) != 0)
|
||||||
res = invoke_popup_filter(wp, c);
|
res = invoke_popup_filter(wp, c);
|
||||||
|
|
||||||
|
// when Ctrl-C and no popup has been processed (res is still FALSE)
|
||||||
|
// Try to find and close a popup that has no filter callback
|
||||||
|
if (c == Ctrl_C && res == FALSE)
|
||||||
|
{
|
||||||
|
popup_reset_handled(POPUP_HANDLED_2);
|
||||||
|
wp = find_next_popup(FALSE, POPUP_HANDLED_2);
|
||||||
|
if (wp != NULL)
|
||||||
|
{
|
||||||
|
popup_close_with_retval(wp, -1);
|
||||||
|
res = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (must_redraw > was_must_redraw)
|
if (must_redraw > was_must_redraw)
|
||||||
{
|
{
|
||||||
int save_got_int = got_int;
|
int save_got_int = got_int;
|
||||||
|
|||||||
@@ -3898,6 +3898,24 @@ func Test_popupwin_cancel()
|
|||||||
call assert_equal({}, popup_getpos(win3))
|
call assert_equal({}, popup_getpos(win3))
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_popupwin_cancel_with_without_filter()
|
||||||
|
let win1 = popup_create('with filter', #{line: 5, filter: {... -> 0}})
|
||||||
|
let win2 = popup_create('no filter', #{line: 10})
|
||||||
|
|
||||||
|
call assert_equal(5, popup_getpos(win1).line)
|
||||||
|
call assert_equal(10, popup_getpos(win2).line)
|
||||||
|
|
||||||
|
call feedkeys("\<C-C>", 'xt')
|
||||||
|
call assert_equal({}, popup_getpos(win1))
|
||||||
|
call assert_equal(10, popup_getpos(win2).line)
|
||||||
|
|
||||||
|
call feedkeys("\<C-C>", 'xt')
|
||||||
|
call assert_equal({}, popup_getpos(win1))
|
||||||
|
call assert_equal({}, popup_getpos(win2))
|
||||||
|
|
||||||
|
call popup_clear()
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_popupwin_filter_redraw()
|
func Test_popupwin_filter_redraw()
|
||||||
" Create two popups with a filter that closes the popup when typing "0".
|
" Create two popups with a filter that closes the popup when typing "0".
|
||||||
" Both popups should close, even though the redraw also calls
|
" Both popups should close, even though the redraw also calls
|
||||||
|
|||||||
@@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1230,
|
||||||
/**/
|
/**/
|
||||||
1229,
|
1229,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user