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)
diff --git a/src/popupwin.c b/src/popupwin.c
index 2868a9d..ed96456 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -3149,7 +3149,7 @@
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 @@
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)
diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim
index 1524e78..435873e 100644
--- a/src/testdir/test_popupwin.vim
+++ b/src/testdir/test_popupwin.vim
@@ -2158,6 +2158,7 @@
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
diff --git a/src/version.c b/src/version.c
index 0716ca1..0933697 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1886,
+/**/
1885,
/**/
1884,