mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 03:18:16 +00:00
Merge pull request #22985 from neovim/backport-22984-to-release-0.9
[Backport release-0.9] vim-patch:9.0.1443: ending Insert mode when accessing a hidden prompt buffer
This commit is contained in:
@@ -1421,6 +1421,8 @@ void aucmd_prepbuf(aco_save_T *aco, buf_T *buf)
|
||||
aco->save_curwin_handle = curwin->handle;
|
||||
aco->save_curbuf = curbuf;
|
||||
aco->save_prevwin_handle = prevwin == NULL ? 0 : prevwin->handle;
|
||||
aco->save_State = State;
|
||||
|
||||
if (win != NULL) {
|
||||
// There is a window for "buf" in the current tab page, make it the
|
||||
// curwin. This is preferred, it has the least side effects (esp. if
|
||||
@@ -1497,6 +1499,10 @@ void aucmd_restbuf(aco_save_T *aco)
|
||||
win_found:
|
||||
// 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;
|
||||
}
|
||||
// Remove the window.
|
||||
win_remove(curwin, NULL);
|
||||
pmap_del(handle_T)(&window_handles, curwin->handle);
|
||||
|
@@ -32,6 +32,7 @@ typedef struct {
|
||||
bufref_T new_curbuf; ///< new curbuf
|
||||
char *globaldir; ///< saved value of globaldir
|
||||
bool save_VIsual_active; ///< saved VIsual_active
|
||||
int save_State; ///< saved State
|
||||
} aco_save_T;
|
||||
|
||||
typedef struct AutoCmd_S AutoCmd;
|
||||
|
@@ -247,6 +247,7 @@ describe('prompt buffer', function()
|
||||
|
||||
func DoAppend()
|
||||
call appendbufline('prompt', '$', 'Test')
|
||||
return ''
|
||||
endfunc
|
||||
]])
|
||||
feed('asomething<CR>')
|
||||
@@ -254,7 +255,12 @@ describe('prompt buffer', function()
|
||||
neq(prev_win, meths.get_current_win())
|
||||
feed('exit<CR>')
|
||||
eq(prev_win, meths.get_current_win())
|
||||
eq({ mode = 'n', blocking = false }, meths.get_mode())
|
||||
command('call DoAppend()')
|
||||
eq({ mode = 'n', blocking = false }, meths.get_mode())
|
||||
feed('i')
|
||||
eq({ mode = 'i', blocking = false }, meths.get_mode())
|
||||
command('call DoAppend()')
|
||||
eq({ mode = 'i', blocking = false }, meths.get_mode())
|
||||
end)
|
||||
end)
|
||||
|
@@ -271,6 +271,7 @@ func Test_prompt_appending_while_hidden()
|
||||
|
||||
func DoAppend()
|
||||
call appendbufline('prompt', '$', 'Test')
|
||||
return ''
|
||||
endfunc
|
||||
END
|
||||
call writefile(script, 'XpromptBuffer', 'D')
|
||||
@@ -283,11 +284,21 @@ func Test_prompt_appending_while_hidden()
|
||||
|
||||
call term_sendkeys(buf, "exit\<CR>")
|
||||
call TermWait(buf)
|
||||
call assert_notmatch('-- INSERT --', term_getline(buf, 10))
|
||||
|
||||
call term_sendkeys(buf, ":call DoAppend()\<CR>")
|
||||
call TermWait(buf)
|
||||
call assert_notmatch('-- INSERT --', term_getline(buf, 10))
|
||||
|
||||
call term_sendkeys(buf, "i")
|
||||
call TermWait(buf)
|
||||
call assert_match('-- INSERT --', term_getline(buf, 10))
|
||||
|
||||
call term_sendkeys(buf, "\<C-R>=DoAppend()\<CR>")
|
||||
call TermWait(buf)
|
||||
call assert_match('-- INSERT --', term_getline(buf, 10))
|
||||
|
||||
call term_sendkeys(buf, "\<Esc>")
|
||||
call StopVimInTerminal(buf)
|
||||
endfunc
|
||||
|
||||
|
Reference in New Issue
Block a user