aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorerw7 <erw7.github@gmail.com>2020-07-20 00:44:22 +0900
committerGitHub <noreply@github.com>2020-07-19 17:44:22 +0200
commit8e350c1c6922f9c678e83d97227e7edd84967571 (patch)
tree71914cb8842b3bcdc10b550d7eb61c3a8b5464b1
parent08efa7037e05ce229150d17db11b1b1c2419631f (diff)
downloadrneovim-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.c39
-rw-r--r--test/functional/core/startup_spec.lua25
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(&params);
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()