aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-02-14 08:12:32 +0800
committerGitHub <noreply@github.com>2023-02-14 08:12:32 +0800
commitfc9ece617bbf5fbdc74eed33c63641c550b4b314 (patch)
treeec1b2c9998953953f11630fa8b012f7ca6b54312
parentb518aceaa8f738e581e58aacae93514699b5ff8e (diff)
parent820430dc0bb84011edae801262e64a10be7ebb9d (diff)
downloadrneovim-fc9ece617bbf5fbdc74eed33c63641c550b4b314.tar.gz
rneovim-fc9ece617bbf5fbdc74eed33c63641c550b4b314.tar.bz2
rneovim-fc9ece617bbf5fbdc74eed33c63641c550b4b314.zip
Merge pull request #22244 from zeertzjq/tui-eof
fix(tui): exit on input eof
-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.lua32
5 files changed, 24 insertions, 24 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 7294969ac8..4e62354ed8 100644
--- a/test/functional/terminal/tui_spec.lua
+++ b/test/functional/terminal/tui_spec.lua
@@ -2365,18 +2365,18 @@ describe("TUI as a client", function()
set_session(client_super)
local screen_client = thelpers.screen_setup(0,
- string.format([=[["%s", "-u", "NONE", "-i", "NONE", "--server", "%s", "--remote-ui"]]=],
+ string.format([=[["%s", "--server", "%s", "--remote-ui"]]=],
nvim_prog, server_pipe))
- screen_client:expect{grid=[[
- Hello, Worl{1:d} |
- {4:~ }|
- {4:~ }|
- {4:~ }|
- {5:[No Name] [+] }|
- |
- {3:-- TERMINAL --} |
- ]]}
+ screen_client:expect{grid=[[
+ Hello, Worl{1:d} |
+ {4:~ }|
+ {4:~ }|
+ {4:~ }|
+ {5:[No Name] [+] }|
+ |
+ {3:-- TERMINAL --} |
+ ]]}
feed_data(":q!\n")
@@ -2394,7 +2394,7 @@ describe("TUI as a client", function()
set_session(client_super)
local screen = thelpers.screen_setup(0,
- string.format([=[["%s", "-u", "NONE", "-i", "NONE", "--server", "%s", "--remote-ui"]]=],
+ string.format([=[["%s", "--server", "%s", "--remote-ui"]]=],
nvim_prog, server_pipe))
screen:expect{grid=[[
@@ -2412,15 +2412,19 @@ 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)
-
it("throws error when no server exists", function()
clear()
local screen = thelpers.screen_setup(0,
- string.format([=[["%s", "-u", "NONE", "-i", "NONE", "--server", "127.0.0.1:2436546", "--remote-ui"]]=],
+ string.format([=[["%s", "--server", "127.0.0.1:2436546", "--remote-ui"]]=],
nvim_prog), 60)
screen:expect([[
@@ -2467,7 +2471,7 @@ describe("TUI as a client", function()
set_session(client_super)
local screen_client = thelpers.screen_setup(0,
- string.format([=[["%s", "-u", "NONE", "-i", "NONE", "--server", "%s", "--remote-ui"]]=],
+ string.format([=[["%s", "--server", "%s", "--remote-ui"]]=],
nvim_prog, server_pipe))
screen_client:expect{grid=[[