diff options
author | erw7 <erw7.github@gmail.com> | 2020-07-20 00:44:22 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-19 17:44:22 +0200 |
commit | 8e350c1c6922f9c678e83d97227e7edd84967571 (patch) | |
tree | 71914cb8842b3bcdc10b550d7eb61c3a8b5464b1 | |
parent | 08efa7037e05ce229150d17db11b1b1c2419631f (diff) | |
download | rneovim-8e350c1c6922f9c678e83d97227e7edd84967571.tar.gz rneovim-8e350c1c6922f9c678e83d97227e7edd84967571.tar.bz2 rneovim-8e350c1c6922f9c678e83d97227e7edd84967571.zip |
startup: fix stall issue with -D options (#12652)
fixes #12647.
-rw-r--r-- | src/nvim/main.c | 39 | ||||
-rw-r--r-- | test/functional/core/startup_spec.lua | 25 |
2 files changed, 45 insertions, 19 deletions
diff --git a/src/nvim/main.c b/src/nvim/main.c index ae64046d07..f79fb57eae 100644 --- a/src/nvim/main.c +++ b/src/nvim/main.c @@ -313,6 +313,26 @@ int main(int argc, char **argv) input_start(STDIN_FILENO); } + // Wait for UIs to set up Nvim or show early messages + // and prompts (--cmd, swapfile dialog, …). + bool use_remote_ui = (embedded_mode && !headless_mode); + bool use_builtin_ui = (!headless_mode && !embedded_mode && !silent_mode); + if (use_remote_ui || use_builtin_ui) { + TIME_MSG("waiting for UI"); + if (use_remote_ui) { + remote_ui_wait_for_attach(); + } else { + ui_builtin_start(); + } + TIME_MSG("done waiting for UI"); + + // prepare screen now, so external UIs can display messages + starting = NO_BUFFERS; + screenclear(); + TIME_MSG("initialized screen early for UI"); + } + + // open terminals when opening files that start with term:// #define PROTO "term://" do_cmdline_cmd("augroup nvim_terminal"); @@ -335,25 +355,6 @@ int main(int argc, char **argv) p_lpl = false; } - // Wait for UIs to set up Nvim or show early messages - // and prompts (--cmd, swapfile dialog, …). - bool use_remote_ui = (embedded_mode && !headless_mode); - bool use_builtin_ui = (!headless_mode && !embedded_mode && !silent_mode); - if (use_remote_ui || use_builtin_ui) { - TIME_MSG("waiting for UI"); - if (use_remote_ui) { - remote_ui_wait_for_attach(); - } else { - ui_builtin_start(); - } - TIME_MSG("done waiting for UI"); - - // prepare screen now, so external UIs can display messages - starting = NO_BUFFERS; - screenclear(); - TIME_MSG("initialized screen early for UI"); - } - // Execute --cmd arguments. exe_pre_commands(¶ms); diff --git a/test/functional/core/startup_spec.lua b/test/functional/core/startup_spec.lua index 394eb73187..9b0668f9e6 100644 --- a/test/functional/core/startup_spec.lua +++ b/test/functional/core/startup_spec.lua @@ -358,6 +358,31 @@ describe('sysinit', function() eq('loaded 1 xdg 0 vim 1', eval('printf("loaded %d xdg %d vim %d", g:loaded, get(g:, "xdg", 0), get(g:, "vim", 0))')) end) + + it('fixed hang issue with -D (#12647)', function() + local screen + screen = Screen.new(60, 6) + screen:attach() + command([[let g:id = termopen('"]]..nvim_prog.. + [[" -u NONE -i NONE --cmd "set noruler" -D')]]) + screen:expect([[ + ^ | + Entering Debug mode. Type "cont" to continue. | + cmd: augroup nvim_terminal | + > | + <" -u NONE -i NONE --cmd "set noruler" -D 1,0-1 All| + | + ]]) + command([[call chansend(g:id, "cont\n")]]) + screen:expect([[ + ^ | + ~ | + [No Name] | + | + <" -u NONE -i NONE --cmd "set noruler" -D 1,0-1 All| + | + ]]) + end) end) describe('clean', function() |