From b836f631dba2534efd314a8f77439cebc75acd4e Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 1 Jul 2021 22:11:28 +0200 Subject: patch 8.2.3082: a channel command "echoerr" does not show anything Problem: A channel command "echoerr" does not show anything. Solution: Do not use silent errors when using an "echoerr" command. (closes #8494) --- src/channel.c | 11 ++++++++--- src/testdir/test_channel.py | 5 +++++ src/testdir/test_channel.vim | 12 ++++++++++++ src/version.c | 2 ++ 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/channel.c b/src/channel.c index 5d89413503..65757f1d7e 100644 --- a/src/channel.c +++ b/src/channel.c @@ -2486,12 +2486,17 @@ channel_exe_cmd(channel_T *channel, ch_part_T part, typval_T *argv) if (STRCMP(cmd, "ex") == 0) { - int called_emsg_before = called_emsg; + int called_emsg_before = called_emsg; + char_u *p = arg; + int do_emsg_silent; ch_log(channel, "Executing ex command '%s'", (char *)arg); - ++emsg_silent; + do_emsg_silent = !checkforcmd(&p, "echoerr", 5); + if (do_emsg_silent) + ++emsg_silent; do_cmdline_cmd(arg); - --emsg_silent; + if (do_emsg_silent) + --emsg_silent; if (called_emsg > called_emsg_before) ch_log(channel, "Ex command error: '%s'", (char *)get_vim_var_str(VV_ERRMSG)); diff --git a/src/testdir/test_channel.py b/src/testdir/test_channel.py index 8dba3ba4ca..9684bb933a 100644 --- a/src/testdir/test_channel.py +++ b/src/testdir/test_channel.py @@ -109,6 +109,11 @@ class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler): print("sending: {0}".format(cmd)) self.request.sendall(cmd.encode('utf-8')) response = "ok" + elif decoded[1] == 'echoerr': + cmd = '["ex","echoerr \\\"this is an error\\\""]' + print("sending: {0}".format(cmd)) + self.request.sendall(cmd.encode('utf-8')) + response = "ok" elif decoded[1] == 'bad command': cmd = '["ex","foo bar"]' print("sending: {0}".format(cmd)) diff --git a/src/testdir/test_channel.vim b/src/testdir/test_channel.vim index e9cc258f04..37dfd25861 100644 --- a/src/testdir/test_channel.vim +++ b/src/testdir/test_channel.vim @@ -115,6 +115,18 @@ func Ch_communicate(port) call WaitForAssert({-> assert_equal("added2", getline("$"))}) call assert_equal('added1', getline(line('$') - 1)) + " Request command "echoerr 'this is an error'". + " This will throw an exception, catch it here. + let caught = 'no' + try + call assert_equal('ok', ch_evalexpr(handle, 'echoerr')) + catch /this is an error/ + let caught = 'yes' + endtry + if caught != 'yes' + call assert_report("Expected exception from error message") + endif + " Request command "foo bar", which fails silently. call assert_equal('ok', ch_evalexpr(handle, 'bad command')) call WaitForAssert({-> assert_match("E492:.*foo bar", v:errmsg)}) diff --git a/src/version.c b/src/version.c index e3bdedefbd..532e747871 100644 --- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 3082, /**/ 3081, /**/ -- cgit v1.2.3