summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-07-01 22:11:28 +0200
committerBram Moolenaar <Bram@vim.org>2021-07-01 22:11:28 +0200
commitb836f631dba2534efd314a8f77439cebc75acd4e (patch)
tree6cde26a11e30c9b3b87a348e875f0cc86b0126cf
parent11a632d60bde616feb298d180108819ebb1d04a0 (diff)
patch 8.2.3082: a channel command "echoerr" does not show anythingv8.2.3082
Problem: A channel command "echoerr" does not show anything. Solution: Do not use silent errors when using an "echoerr" command. (closes #8494)
-rw-r--r--src/channel.c11
-rw-r--r--src/testdir/test_channel.py5
-rw-r--r--src/testdir/test_channel.vim12
-rw-r--r--src/version.c2
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
@@ -756,6 +756,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3082,
+/**/
3081,
/**/
3080,