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)
2be5733152
This commit is contained in:
Jan Edmund Lazo 2019-06-03 02:23:38 -04:00
parent 16b1e8f9c0
commit 7ad621b6d9
2 changed files with 27 additions and 5 deletions

View File

@ -2217,11 +2217,19 @@ static char_u * do_one_cmd(char_u **cmdlinep,
ea.arg = skipwhite(p); ea.arg = skipwhite(p);
} }
/* // The :try command saves the emsg_silent flag, reset it here when
* 7. Switch on command name. // ":silent! try" was used, it should only apply to :try itself.
* if (ea.cmdidx == CMD_try && did_esilent > 0) {
* The "ea" structure holds the arguments that can be used. 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.cmdlinep = cmdlinep;
ea.getline = fgetline; ea.getline = fgetline;
ea.cookie = cookie; ea.cookie = cookie;

View File

@ -78,3 +78,17 @@ func Test_string_concatenation()
let a..=b let a..=b
call assert_equal('ab', a) call assert_equal('ab', a)
endfunc 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