patch 8.2.1886: using ":silent!" in a popup filter has unexpected effect

Problem:    Using ":silent!" in a popup filter has unexpected effect.
Solution:   Use did_emsg instead of called_emsg. (closes #7178)
This commit is contained in:
Bram Moolenaar
2020-10-22 13:44:54 +02:00
parent 2733779a1a
commit 371806e164
3 changed files with 7 additions and 4 deletions

View File

@ -3149,7 +3149,7 @@ invoke_popup_filter(win_T *wp, int c)
typval_T argv[3];
char_u buf[NUMBUFLEN];
linenr_T old_lnum = wp->w_cursor.lnum;
int prev_called_emsg = called_emsg;
int prev_did_emsg = did_emsg;
// Emergency exit: CTRL-C closes the popup.
if (c == Ctrl_C)
@ -3193,12 +3193,12 @@ invoke_popup_filter(win_T *wp, int c)
if (win_valid_popup(wp) && old_lnum != wp->w_cursor.lnum)
popup_highlight_curline(wp);
// If an error was given always return FALSE, so that keys are not
// consumed and the user can type something.
// If an error message was given always return FALSE, so that keys are
// not consumed and the user can type something.
// If we get three errors in a row then close the popup. Decrement the
// error count by 1/10 if there are no errors, thus allowing up to 1 in
// 10 calls to cause an error.
if (win_valid_popup(wp) && called_emsg > prev_called_emsg)
if (win_valid_popup(wp) && did_emsg > prev_did_emsg)
{
wp->w_filter_errors += 10;
if (wp->w_filter_errors >= 30)

View File

@ -2158,6 +2158,7 @@ func Test_popup_scrollbar()
endfunc
func Popup_filter(winid, key)
if a:key == 'j'
silent! this_throws_an_error_but_is_ignored
let line = popup_getoptions(a:winid).firstline
let nlines = line('$', a:winid)
let newline = line < nlines ? (line + 1) : nlines

View File

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