aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/main.c
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2015-03-18 12:46:04 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2015-03-18 21:28:20 -0300
commit4d63d9917482a7d7a002bf7688233a675b76cd3e (patch)
treefc861fa278e095a38d4b39bb9ac736321446b6da /src/nvim/main.c
parent8b7b71f4742d94cf7a2e5a08e7b2f5a725619476 (diff)
downloadrneovim-4d63d9917482a7d7a002bf7688233a675b76cd3e.tar.gz
rneovim-4d63d9917482a7d7a002bf7688233a675b76cd3e.tar.bz2
rneovim-4d63d9917482a7d7a002bf7688233a675b76cd3e.zip
main: Simplify code that deals with early user input
A read stream will be started before the first ex command is processed. This stream will be used to read early user input before handling control over to the UI module. Which stdio stream will be used depends on which types of file descriptors are connected, and whether the "-" argument was passed.
Diffstat (limited to 'src/nvim/main.c')
-rw-r--r--src/nvim/main.c54
1 files changed, 28 insertions, 26 deletions
diff --git a/src/nvim/main.c b/src/nvim/main.c
index 9479d80f31..2f1e6e6d3b 100644
--- a/src/nvim/main.c
+++ b/src/nvim/main.c
@@ -268,16 +268,26 @@ int main(int argc, char **argv)
/* Set the break level after the terminal is initialized. */
debug_break_level = params.use_debug_break_level;
+ bool reading_input = !params.headless && (params.input_isatty
+ || params.output_isatty || params.err_isatty);
+
+ if (reading_input) {
+ // Its possible that one of the startup commands(arguments, sourced scripts
+ // or plugins) will prompt the user, so start reading from a tty stream
+ // now.
+ int fd = fileno(stdin);
+ if (!params.input_isatty || params.edit_type == EDIT_STDIN) {
+ // use stderr or stdout since stdin is not a tty and/or could be used to
+ // read the file we'll edit when the "-" argument is given(eg: cat file |
+ // nvim -)
+ fd = params.err_isatty ? fileno(stderr) : fileno(stdout);
+ }
+ input_start_stdin(fd);
+ }
+
/* Execute --cmd arguments. */
exe_pre_commands(&params);
- if (!params.headless && params.input_isatty) {
- // Its possible that one of the scripts sourced at startup will prompt the
- // user, so start stdin now. TODO(tarruda): This is only for compatibility.
- // Startup user prompting should be done in the VimEnter autocmd
- input_start_stdin();
- }
-
/* Source startup scripts. */
source_startup_scripts(&params);
@@ -358,22 +368,19 @@ int main(int argc, char **argv)
if (params.edit_type == EDIT_STDIN && !recoverymode)
read_stdin();
- if (!params.headless) {
- if ((params.output_isatty || params.err_isatty)
- && (need_wait_return || msg_didany)) {
- // Since at this point there's no UI instance running yet, error messages
- // would have been printed to stdout. Before starting (which can result in
- // a alternate screen buffer being shown) we need confirmation that the
- // user has seen the messages and that is done with a call to wait_return.
- TIME_MSG("waiting for return");
- wait_return(TRUE);
- }
- if (params.input_isatty) {
- // Stop reading from stdin, the UI module will take over now.
- input_stop_stdin();
- }
+ if (reading_input && (need_wait_return || msg_didany)) {
+ // Since at this point there's no UI instance running yet, error messages
+ // would have been printed to stdout. Before starting (which can result in
+ // a alternate screen buffer being shown) we need confirmation that the
+ // user has seen the messages and that is done with a call to wait_return.
+ TIME_MSG("waiting for return");
+ wait_return(TRUE);
+ }
+ if (!params.headless) {
+ // Stop reading from stdin, the UI layer will take over now
+ input_stop_stdin();
ui_builtin_start();
}
@@ -1465,11 +1472,6 @@ static void check_tty(mparm_T *parmp)
TIME_MSG("Warning delay");
}
-
- if (parmp->edit_type != EDIT_STDIN && !parmp->input_isatty) {
- // read commands from directly from stdin
- input_start_stdin();
- }
}
/*