0
0
mirror of https://github.com/vim/vim.git synced 2025-07-24 10:45:12 -04:00

patch 9.0.1582: :stopinsert may not work in a popup close handler

Problem:    :stopinsert may not work in a popup close handler. (Ben Jackson)
Solution:   Restore stop_insert_mode when appropriate. (closes #12452,
            closes #12434)
This commit is contained in:
zeertzjq 2023-05-27 14:10:08 +01:00 committed by Bram Moolenaar
parent a1d5f9f33c
commit a40c0bcc83
3 changed files with 28 additions and 1 deletions

View File

@ -1657,11 +1657,13 @@ aucmd_restbuf(
}
win_found:
#ifdef FEAT_JOB_CHANNEL
;
int save_stop_insert_mode = stop_insert_mode;
// May need to stop Insert mode if we were in a prompt buffer.
leaving_window(curwin);
// Do not stop Insert mode when already in Insert mode before.
if (aco->save_State & MODE_INSERT)
stop_insert_mode = FALSE;
stop_insert_mode = save_stop_insert_mode;
#endif
// Remove the window and frame from the tree of frames.
(void)winframe_remove(curwin, &dummy, NULL);

View File

@ -6404,5 +6404,28 @@ func Test_setqflist_cb_arg()
call setqflist([], 'f')
endfunc
" Test that setqflist() should not prevent :stopinsert from working
func Test_setqflist_stopinsert()
new
call setqflist([], 'f')
copen
cclose
func StopInsert()
stopinsert
call setqflist([{'text': 'foo'}])
return ''
endfunc
call setline(1, 'abc')
call cursor(1, 1)
call feedkeys("i\<C-R>=StopInsert()\<CR>$", 'tnix')
call assert_equal('foo', getqflist()[0].text)
call assert_equal([0, 1, 3, 0, v:maxcol], getcurpos())
call assert_equal(['abc'], getline(1, '$'))
delfunc StopInsert
call setqflist([], 'f')
bwipe!
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@ -695,6 +695,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1582,
/**/
1581,
/**/