aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2019-06-03 02:23:38 -0400
committerJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2019-06-03 20:11:29 -0400
commit7ad621b6d924ef912a4c4c7e64175213dc82a16f (patch)
tree307964d419edbcf7cec025cc0a0e9b22dbd61929
parent16b1e8f9c070ad853c6c63b43591e297bf512662 (diff)
downloadrneovim-7ad621b6d924ef912a4c4c7e64175213dc82a16f.tar.gz
rneovim-7ad621b6d924ef912a4c4c7e64175213dc82a16f.tar.bz2
rneovim-7ad621b6d924ef912a4c4c7e64175213dc82a16f.zip
vim-patch:8.0.1518: error messages suppressed after ":silent! try"
Problem: Error messages suppressed after ":silent! try". (Ben Reilly) Solution: Restore emsg_silent before executing :try. (closes vim/vim#2531) https://github.com/vim/vim/commit/2be57331524e93da52a0663f4a334d21c05123bb
-rw-r--r--src/nvim/ex_docmd.c18
-rw-r--r--src/nvim/testdir/test_eval_stuff.vim14
2 files changed, 27 insertions, 5 deletions
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c
index ec4b16fbb0..7a7b20c35f 100644
--- a/src/nvim/ex_docmd.c
+++ b/src/nvim/ex_docmd.c
@@ -2217,11 +2217,19 @@ static char_u * do_one_cmd(char_u **cmdlinep,
ea.arg = skipwhite(p);
}
- /*
- * 7. Switch on command name.
- *
- * The "ea" structure holds the arguments that can be used.
- */
+ // The :try command saves the emsg_silent flag, reset it here when
+ // ":silent! try" was used, it should only apply to :try itself.
+ if (ea.cmdidx == CMD_try && did_esilent > 0) {
+ emsg_silent -= did_esilent;
+ if (emsg_silent < 0) {
+ emsg_silent = 0;
+ }
+ did_esilent = 0;
+ }
+
+ // 7. Execute the command.
+ //
+ // The "ea" structure holds the arguments that can be used.
ea.cmdlinep = cmdlinep;
ea.getline = fgetline;
ea.cookie = cookie;
diff --git a/src/nvim/testdir/test_eval_stuff.vim b/src/nvim/testdir/test_eval_stuff.vim
index 19a15590e5..610ef65f8e 100644
--- a/src/nvim/testdir/test_eval_stuff.vim
+++ b/src/nvim/testdir/test_eval_stuff.vim
@@ -78,3 +78,17 @@ func Test_string_concatenation()
let a..=b
call assert_equal('ab', a)
endfunc
+
+func Test_nocatch_restore_silent_emsg()
+ silent! try
+ throw 1
+ catch
+ endtry
+ echoerr 'wrong'
+ let c1 = nr2char(screenchar(&lines, 1))
+ let c2 = nr2char(screenchar(&lines, 2))
+ let c3 = nr2char(screenchar(&lines, 3))
+ let c4 = nr2char(screenchar(&lines, 4))
+ let c5 = nr2char(screenchar(&lines, 5))
+ call assert_equal('wrong', c1 . c2 . c3 . c4 . c5)
+endfunc