# HG changeset patch # User Christian Brabandt # Date 1528634706 -7200 # Node ID 3e6477e767ba61c8471f44e4c0aa7bd72e5bff82 # Parent d335060061aee0fda167f3fe7bdc3b82ca843a4a patch 8.1.0042: if omni completion opens a window Insert mode is stopped commit https://github.com/vim/vim/commit/f98b845dd185dfadfa7a622a42452bfa6809d4e0 Author: Bram Moolenaar Date: Sun Jun 10 14:39:52 2018 +0200 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 --- a/src/version.c +++ b/src/version.c @@ -762,6 +762,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 42, +/**/ 41, /**/ 40, diff --git a/src/window.c b/src/window.c --- 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