diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2018-09-18 20:52:13 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-18 20:52:13 +0200 |
commit | 809fff94e6786875cc852b98550cc73e65b33a87 (patch) | |
tree | 1798c2487a0a84ae7e98ac5d61906ca21742601e /src/nvim/main.c | |
parent | 32ad52ae04d3fea1fa84594b9b13ee1442a410ca (diff) | |
parent | bd8d43c6fef868ad5ed50a79deb0f7adc1f5e53a (diff) | |
download | rneovim-809fff94e6786875cc852b98550cc73e65b33a87.tar.gz rneovim-809fff94e6786875cc852b98550cc73e65b33a87.tar.bz2 rneovim-809fff94e6786875cc852b98550cc73e65b33a87.zip |
Merge pull request #8754 from bfredl/embed_ui
startup: make --embed wait for first request so embedding UI can display startup messages
Diffstat (limited to 'src/nvim/main.c')
-rw-r--r-- | src/nvim/main.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/nvim/main.c b/src/nvim/main.c index 771074f189..b00f7947bd 100644 --- a/src/nvim/main.c +++ b/src/nvim/main.c @@ -344,6 +344,24 @@ int main(int argc, char **argv) p_lpl = false; } + // give embedders a chance to set up nvim, by processing a request before + // startup. This allows an external UI to show messages and prompts from + // --cmd and buffer loading (e.g. swap files) + bool early_ui = false; + if (embedded_mode) { + TIME_MSG("waiting for embedder to make request"); + rpc_wait_for_request(); + TIME_MSG("done waiting for embedder"); + + if (ui_active()) { + // prepare screen now, so external UIs can display messages + starting = NO_BUFFERS; + screenclear(); + early_ui = true; + TIME_MSG("initialized screen early for embedder"); + } + } + // Execute --cmd arguments. exe_pre_commands(¶ms); @@ -456,8 +474,10 @@ int main(int argc, char **argv) setmouse(); // may start using the mouse - if (exmode_active) { - must_redraw = CLEAR; // Don't clear the screen when starting in Ex mode. + if (exmode_active || early_ui) { + // Don't clear the screen when starting in Ex mode, or when an + // embedding UI might have displayed messages + must_redraw = CLEAR; } else { screenclear(); // clear screen TIME_MSG("clearing screen"); |