aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/os/input.c7
-rw-r--r--src/nvim/tui/input.c3
-rw-r--r--src/nvim/tui/tui.c4
-rw-r--r--src/nvim/ui_client.c2
-rw-r--r--test/functional/terminal/tui_spec.lua5
5 files changed, 11 insertions, 10 deletions
diff --git a/src/nvim/os/input.c b/src/nvim/os/input.c
index 44ad0315a5..d472836d0a 100644
--- a/src/nvim/os/input.c
+++ b/src/nvim/os/input.c
@@ -470,11 +470,6 @@ static InbufPollResult inbuf_poll(int ms, MultiQueue *events)
return input_eof ? kInputEof : kInputNone;
}
-void input_done(void)
-{
- input_eof = true;
-}
-
bool input_available(void)
{
return rbuffer_size(input_buffer) != 0;
@@ -483,7 +478,7 @@ bool input_available(void)
static void input_read_cb(Stream *stream, RBuffer *buf, size_t c, void *data, bool at_eof)
{
if (at_eof) {
- input_done();
+ input_eof = true;
}
assert(rbuffer_space(input_buffer) >= rbuffer_size(buf));
diff --git a/src/nvim/tui/input.c b/src/nvim/tui/input.c
index 733aa25f03..c992253e1f 100644
--- a/src/nvim/tui/input.c
+++ b/src/nvim/tui/input.c
@@ -185,8 +185,9 @@ void tinput_stop(TermInput *input)
}
static void tinput_done_event(void **argv)
+ FUNC_ATTR_NORETURN
{
- input_done();
+ os_exit(1);
}
static void tinput_wait_enqueue(void **argv)
diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c
index 9415917e34..f7bc931e21 100644
--- a/src/nvim/tui/tui.c
+++ b/src/nvim/tui/tui.c
@@ -167,7 +167,7 @@ static bool cursor_style_enabled = false;
# include "tui/tui.c.generated.h"
#endif
-TUIData *tui_start(int *width, int *height, char **term)
+void tui_start(TUIData **tui_p, int *width, int *height, char **term)
{
TUIData *tui = xcalloc(1, sizeof(TUIData));
tui->is_starting = true;
@@ -190,11 +190,11 @@ TUIData *tui_start(int *width, int *height, char **term)
uv_timer_start(&tui->startup_delay_timer, after_startup_cb,
100, 0);
+ *tui_p = tui;
loop_poll_events(&main_loop, 1);
*width = tui->width;
*height = tui->height;
*term = tui->term;
- return tui;
}
void tui_enable_extkeys(TUIData *tui)
diff --git a/src/nvim/ui_client.c b/src/nvim/ui_client.c
index a7a85bf61f..df0a26c6ee 100644
--- a/src/nvim/ui_client.c
+++ b/src/nvim/ui_client.c
@@ -113,7 +113,7 @@ void ui_client_run(bool remote_ui)
ui_client_is_remote = remote_ui;
int width, height;
char *term;
- tui = tui_start(&width, &height, &term);
+ tui_start(&tui, &width, &height, &term);
ui_client_attach(width, height, term);
diff --git a/test/functional/terminal/tui_spec.lua b/test/functional/terminal/tui_spec.lua
index 31e1f27363..4e62354ed8 100644
--- a/test/functional/terminal/tui_spec.lua
+++ b/test/functional/terminal/tui_spec.lua
@@ -2412,6 +2412,11 @@ describe("TUI as a client", function()
exec_lua([[vim.loop.kill(vim.fn.jobpid(vim.bo.channel), 'sigterm')]])
screen:expect({any = '%[Process exited 1%]'})
+ eq(0, meths.get_vvar('shell_error'))
+ -- exits on input eof #22244
+ funcs.system({nvim_prog, '--server', server_pipe, '--remote-ui'})
+ eq(1, meths.get_vvar('shell_error'))
+
client_super:close()
server:close()
end)