diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2018-05-30 07:21:45 +0200 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2018-06-04 02:09:28 +0200 |
commit | d8c7ff13352d7182826b5716ff3b6a66df241231 (patch) | |
tree | d9c451c4933a6fd60683ae2925abd3c2ae34d90d | |
parent | 1f300e08b8c0c35b2f3d79506ae9817cd8591624 (diff) | |
download | rneovim-d8c7ff13352d7182826b5716ff3b6a66df241231.tar.gz rneovim-d8c7ff13352d7182826b5716ff3b6a66df241231.tar.bz2 rneovim-d8c7ff13352d7182826b5716ff3b6a66df241231.zip |
cleanup, test interactive -E
-rw-r--r-- | src/nvim/main.c | 17 | ||||
-rw-r--r-- | src/nvim/os/input.c | 6 | ||||
-rw-r--r-- | test/functional/core/startup_spec.lua | 13 | ||||
-rw-r--r-- | test/functional/helpers.lua | 8 |
4 files changed, 33 insertions, 11 deletions
diff --git a/src/nvim/main.c b/src/nvim/main.c index 1828d6e6a7..e1a01fdba6 100644 --- a/src/nvim/main.c +++ b/src/nvim/main.c @@ -300,15 +300,16 @@ int main(int argc, char **argv) // Read user-input if any TTY is connected. // Read ex-commands if invoked with "-es". // - bool reading_input = !headless_mode - && (params.input_isatty || params.output_isatty - || params.err_isatty); - bool reading_excmds = exmode_active == EXMODE_NORMAL; - if (reading_input || reading_excmds) { + bool reading_tty = !headless_mode + && (params.input_isatty || params.output_isatty + || params.err_isatty); + bool reading_excmds = !params.input_isatty && silent_mode + && exmode_active == EXMODE_NORMAL; + if (reading_tty || reading_excmds) { // One of the startup commands (arguments, sourced scripts or plugins) may // prompt the user, so start reading from a tty now. int fd = STDIN_FILENO; - if (!reading_excmds + if (!silent_mode && (!params.input_isatty || params.edit_type == EDIT_STDIN)) { // Use stderr or stdout since stdin is being used to read commands. fd = params.err_isatty ? fileno(stderr) : fileno(stdout); @@ -435,7 +436,7 @@ int main(int argc, char **argv) read_stdin(); } - if (reading_input && (need_wait_return || msg_didany)) { + if (reading_tty && (need_wait_return || msg_didany)) { // Because there's no UI yet, error messages would have been printed to // stdout. Before starting we need confirmation that the user has seen the // messages and that is done with a call to wait_return. @@ -444,7 +445,7 @@ int main(int argc, char **argv) } if (!headless_mode && !silent_mode) { - input_stop(); // Stop reading from input stream. UI will take over. + input_stop(); // Stop reading input, let the UI take over. ui_builtin_start(); } diff --git a/src/nvim/os/input.c b/src/nvim/os/input.c index dd44df2c3c..599487c345 100644 --- a/src/nvim/os/input.c +++ b/src/nvim/os/input.c @@ -34,7 +34,7 @@ typedef enum { kInputEof } InbufPollResult; -static Stream read_stream = {.closed = true}; +static Stream read_stream = { .closed = true }; // Input before UI starts. static RBuffer *input_buffer = NULL; static bool input_eof = false; static int global_fd = -1; @@ -50,7 +50,7 @@ void input_init(void) input_buffer = rbuffer_new(INPUT_BUFFER_SIZE + MAX_KEY_CODE_LEN); } -/// This is the global stream of user-input (or Ex-commands for "-es"). +/// Global TTY (or pipe for "-es") input stream, before UI starts. int input_global_fd(void) { return global_fd; @@ -109,7 +109,7 @@ int os_inchar(uint8_t *buf, int maxlen, int ms, int tb_change_cnt) } else { if ((result = inbuf_poll((int)p_ut)) == kInputNone) { if (read_stream.closed && silent_mode) { - // Drained input and eventloop: exit silent/batch-mode (-es/-Es). + // Drained eventloop & initial input; exit silent/batch-mode (-es/-Es). read_error_exit(); } diff --git a/test/functional/core/startup_spec.lua b/test/functional/core/startup_spec.lua index d15faaf0a9..f1f96ba626 100644 --- a/test/functional/core/startup_spec.lua +++ b/test/functional/core/startup_spec.lua @@ -4,6 +4,7 @@ local Screen = require('test.functional.ui.screen') local clear = helpers.clear local command = helpers.command local eq = helpers.eq +local feed = helpers.feed local funcs = helpers.funcs local nvim_prog = helpers.nvim_prog local nvim_set = helpers.nvim_set @@ -121,6 +122,18 @@ describe('startup', function() { 'ohyeah', '' })) end) + it('-e/-E interactive #7679', function() + clear('-E') + local screen = Screen.new(25, 3) + screen:attach() + feed("put ='from -E'<CR>") + screen:expect([[ + | + from -E | + :^ | + ]]) + end) + it('stdin with -es/-Es #7679', function() local input = { 'append', 'line1', 'line2', '.', '%print', '' } local inputstr = table.concat(input, '\n') diff --git a/test/functional/helpers.lua b/test/functional/helpers.lua index 9895281773..a6d2764187 100644 --- a/test/functional/helpers.lua +++ b/test/functional/helpers.lua @@ -316,6 +316,14 @@ local function retry(max, max_ms, fn) end end +-- Starts a new global Nvim session. +-- Parameters are interpreted as startup args, OR a map with these keys: +-- args: Merged with the default `nvim_argv` set. +-- env : Defines the environment of the new session. +-- +-- Example: +-- clear('-e') +-- clear({args={'-e'}, env={TERM=term}}) local function clear(...) local args = {unpack(nvim_argv)} local new_args |