aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/autocmd.c4
-rw-r--r--test/old/testdir/test_quickfix.vim23
2 files changed, 26 insertions, 1 deletions
diff --git a/src/nvim/autocmd.c b/src/nvim/autocmd.c
index 17a3fd33f1..53cca7baa1 100644
--- a/src/nvim/autocmd.c
+++ b/src/nvim/autocmd.c
@@ -1355,11 +1355,13 @@ void aucmd_restbuf(aco_save_T *aco)
}
}
win_found:
+ ;
+ const bool 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;
}
// Remove the window.
win_remove(curwin, NULL);
diff --git a/test/old/testdir/test_quickfix.vim b/test/old/testdir/test_quickfix.vim
index f720b6e42d..156ce23d54 100644
--- a/test/old/testdir/test_quickfix.vim
+++ b/test/old/testdir/test_quickfix.vim
@@ -6280,5 +6280,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