From: zeertzjq Date: Sat, 27 May 2023 13:10:08 +0000 (+0100) Subject: patch 9.0.1582: :stopinsert may not work in a popup close handler X-Git-Tag: v9.0.1582 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a40c0bcc83c32da02869f59b10538d6327df61c5;p=thirdparty%2Fvim.git 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) --- diff --git a/src/autocmd.c b/src/autocmd.c index c93d4bd754..862ddf7ccc 100644 --- a/src/autocmd.c +++ b/src/autocmd.c @@ -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); diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim index bc180fc04c..79c169273d 100644 --- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -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\=StopInsert()\$", '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 diff --git a/src/version.c b/src/version.c index 330914da78..7138fee6f1 100644 --- a/src/version.c +++ b/src/version.c @@ -695,6 +695,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1582, /**/ 1581, /**/