From: Bram Moolenaar Date: Sun, 10 Jun 2018 12:39:52 +0000 (+0200) Subject: patch 8.1.0042: if omni completion opens a window Insert mode is stopped X-Git-Tag: v8.1.0042 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f98b845dd185dfadfa7a622a42452bfa6809d4e0;p=vim patch 8.1.0042: if omni completion opens a window Insert mode is stopped Problem: If omni completion opens a window Insert mode is stopped. (Hirohito Higashi) Solution: Only set stop_insert_mode in a prompt buffer window. --- diff --git a/src/version.c b/src/version.c index 71283ed0d..4ab241eb9 100644 --- a/src/version.c +++ b/src/version.c @@ -761,6 +761,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 42, /**/ 41, /**/ diff --git a/src/window.c b/src/window.c index 27ef9d5cc..74e3c0469 100644 --- a/src/window.c +++ b/src/window.c @@ -2107,17 +2107,22 @@ win_equal_rec( static void leaving_window(win_T *win) { + // Only matters for a prompt window. + if (!bt_prompt(win->w_buffer)) + return; + // When leaving a prompt window stop Insert mode and perhaps restart // it when entering that window again. win->w_buffer->b_prompt_insert = restart_edit; restart_edit = NUL; // When leaving the window (or closing the window) was done from a - // callback we need to break out of the Insert mode loop. + // callback we need to break out of the Insert mode loop and restart Insert + // mode when entering the window again. if (State & INSERT) { stop_insert_mode = TRUE; - if (bt_prompt(win->w_buffer) && win->w_buffer->b_prompt_insert == NUL) + if (win->w_buffer->b_prompt_insert == NUL) win->w_buffer->b_prompt_insert = 'A'; } } @@ -2125,12 +2130,17 @@ leaving_window(win_T *win) static void entering_window(win_T *win) { + // Only matters for a prompt window. + if (!bt_prompt(win->w_buffer)) + return; + // When switching to a prompt buffer that was in Insert mode, don't stop // Insert mode, it may have been set in leaving_window(). - if (bt_prompt(win->w_buffer) && win->w_buffer->b_prompt_insert != NUL) + if (win->w_buffer->b_prompt_insert != NUL) stop_insert_mode = FALSE; - // When entering the prompt window may restart Insert mode. + // When entering the prompt window restart Insert mode if we were in Insert + // mode when we left it. restart_edit = win->w_buffer->b_prompt_insert; } #endif