neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 820430dc0bb84011edae801262e64a10be7ebb9d
parent 5a8039a0cb544eac91c569439c61ba0a35950506
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Mon, 13 Feb 2023 16:33:20 +0800

fix(tui): exit on input eof

Diffstat:
Msrc/nvim/os/input.c | 7+------
Msrc/nvim/tui/input.c | 3++-
Msrc/nvim/tui/tui.c | 4++--
Msrc/nvim/ui_client.c | 2+-
Mtest/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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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)