aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2018-05-30 07:21:45 +0200
committerJustin M. Keyes <justinkz@gmail.com>2018-06-04 02:09:28 +0200
commitd8c7ff13352d7182826b5716ff3b6a66df241231 (patch)
treed9c451c4933a6fd60683ae2925abd3c2ae34d90d
parent1f300e08b8c0c35b2f3d79506ae9817cd8591624 (diff)
downloadrneovim-d8c7ff13352d7182826b5716ff3b6a66df241231.tar.gz
rneovim-d8c7ff13352d7182826b5716ff3b6a66df241231.tar.bz2
rneovim-d8c7ff13352d7182826b5716ff3b6a66df241231.zip
cleanup, test interactive -E
-rw-r--r--src/nvim/main.c17
-rw-r--r--src/nvim/os/input.c6
-rw-r--r--test/functional/core/startup_spec.lua13
-rw-r--r--test/functional/helpers.lua8
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