aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2016-11-26 13:08:42 +0100
committerGitHub <noreply@github.com>2016-11-26 13:08:42 +0100
commit7be113d7959df83bdec1e4d9a3e98264bc5d7a5b (patch)
tree317848900cdb67588f8cfbeb38d6fbd22a621051
parentecd7beb6e4876961075cc211d2b92f987d670dfa (diff)
downloadrneovim-7be113d7959df83bdec1e4d9a3e98264bc5d7a5b.tar.gz
rneovim-7be113d7959df83bdec1e4d9a3e98264bc5d7a5b.tar.bz2
rneovim-7be113d7959df83bdec1e4d9a3e98264bc5d7a5b.zip
shell_write_cb: Schedule error message. (#5670)
Closes #5558
-rw-r--r--src/nvim/message.c19
-rw-r--r--src/nvim/os/shell.c4
-rw-r--r--src/nvim/ui.c4
3 files changed, 23 insertions, 4 deletions
diff --git a/src/nvim/message.c b/src/nvim/message.c
index 1de2347b12..f9cfc49197 100644
--- a/src/nvim/message.c
+++ b/src/nvim/message.c
@@ -19,6 +19,7 @@
#include "nvim/fileio.h"
#include "nvim/func_attr.h"
#include "nvim/getchar.h"
+#include "nvim/main.h"
#include "nvim/mbyte.h"
#include "nvim/memory.h"
#include "nvim/misc1.h"
@@ -581,6 +582,24 @@ bool emsgf(const char *const fmt, ...)
return emsg(IObuff);
}
+static void msg_emsgf_event(void **argv)
+{
+ char *s = argv[0];
+ (void)emsg((char_u *)s);
+ xfree(s);
+}
+
+void msg_schedule_emsgf(const char *const fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ vim_vsnprintf((char *)IObuff, IOSIZE, fmt, ap, NULL);
+ va_end(ap);
+
+ char *s = xstrdup((char *)IObuff);
+ loop_schedule(&main_loop, event_create(1, msg_emsgf_event, 1, s));
+}
+
/*
* Like msg(), but truncate to a single line if p_shm contains 't', or when
* "force" is TRUE. This truncates in another way as for normal messages.
diff --git a/src/nvim/os/shell.c b/src/nvim/os/shell.c
index 18ee008d66..9e6effd21b 100644
--- a/src/nvim/os/shell.c
+++ b/src/nvim/os/shell.c
@@ -548,8 +548,8 @@ static void shell_write_cb(Stream *stream, void *data, int status)
if (status) {
// Can happen if system() tries to send input to a shell command that was
// backgrounded (:call system("cat - &", "foo")). #3529 #5241
- EMSG2(_("E5677: Error writing input to shell-command: %s"),
- uv_err_name(status));
+ msg_schedule_emsgf(_("E5677: Error writing input to shell-command: %s"),
+ uv_err_name(status));
}
if (stream->closed) { // Process may have exited before this write.
ELOG("stream was already closed");
diff --git a/src/nvim/ui.c b/src/nvim/ui.c
index eb500414a7..549ed8aa7d 100644
--- a/src/nvim/ui.c
+++ b/src/nvim/ui.c
@@ -177,14 +177,14 @@ void ui_refresh(void)
pum_set_external(pum_external);
}
-static void ui_refresh_handler(void **argv)
+static void ui_refresh_event(void **argv)
{
ui_refresh();
}
void ui_schedule_refresh(void)
{
- loop_schedule(&main_loop, event_create(1, ui_refresh_handler, 0));
+ loop_schedule(&main_loop, event_create(1, ui_refresh_event, 0));
}
void ui_resize(int new_width, int new_height)