mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-03 17:24:29 +00:00 
			
		
		
		
	fix(tui): exit on input eof
This commit is contained in:
		@@ -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));
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user