diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-02-13 16:33:20 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2023-02-14 07:49:31 +0800 |
commit | 820430dc0bb84011edae801262e64a10be7ebb9d (patch) | |
tree | ec1b2c9998953953f11630fa8b012f7ca6b54312 | |
parent | 5a8039a0cb544eac91c569439c61ba0a35950506 (diff) | |
download | rneovim-820430dc0bb84011edae801262e64a10be7ebb9d.tar.gz rneovim-820430dc0bb84011edae801262e64a10be7ebb9d.tar.bz2 rneovim-820430dc0bb84011edae801262e64a10be7ebb9d.zip |
fix(tui): exit on input eof
-rw-r--r-- | src/nvim/os/input.c | 7 | ||||
-rw-r--r-- | src/nvim/tui/input.c | 3 | ||||
-rw-r--r-- | src/nvim/tui/tui.c | 4 | ||||
-rw-r--r-- | src/nvim/ui_client.c | 2 | ||||
-rw-r--r-- | test/functional/terminal/tui_spec.lua | 5 |
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) |