Mercurial > vim
changeset 14049:3e6477e767ba v8.1.0042
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 <Bram@vim.org>
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.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 10 Jun 2018 14:45:06 +0200 |
parents | d335060061ae |
children | 9b097b325738 |
files | src/version.c src/window.c |
diffstat | 2 files changed, 16 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- 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,
--- 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