Merge pull request #22244 from zeertzjq/tui-eof

fix(tui): exit on input eof
This commit is contained in:
zeertzjq 2023-02-14 08:12:32 +08:00 committed by GitHub
commit fc9ece617b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 24 additions and 24 deletions

View File

@ -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));

View File

@ -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)

View File

@ -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)

View File

@ -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);

View File

@ -2365,7 +2365,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=[[
@ -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=[[