diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2019-06-03 02:23:38 -0400 |
---|---|---|
committer | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2019-06-03 20:11:29 -0400 |
commit | 7ad621b6d924ef912a4c4c7e64175213dc82a16f (patch) | |
tree | 307964d419edbcf7cec025cc0a0e9b22dbd61929 | |
parent | 16b1e8f9c070ad853c6c63b43591e297bf512662 (diff) | |
download | rneovim-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.c | 18 | ||||
-rw-r--r-- | src/nvim/testdir/test_eval_stuff.vim | 14 |
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 |