Mercurial > vim
changeset 32216:6651b86aed3b v9.0.1439
patch 9.0.1439: start Insert mode when accessing a hidden prompt buffer
Commit: https://github.com/vim/vim/commit/cde8de034524d00aba4ff4142e658baff511e12d
Author: orbital <orbital@holgerines.de>
Date: Sun Apr 2 22:05:13 2023 +0100
patch 9.0.1439: start Insert mode when accessing a hidden prompt buffer
Problem: Start Insert mode when accessing a hidden prompt buffer.
Solution: Call leaving_window() in aucmd_restbuf(). (Thorben Tr?bst,
closes #12148, closes #12147)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 02 Apr 2023 23:15:03 +0200 |
parents | 4b6c544c41f6 |
children | e0f5903c9f28 |
files | src/autocmd.c src/proto/window.pro src/testdir/test_prompt_buffer.vim src/version.c src/window.c |
diffstat | 5 files changed, 46 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/autocmd.c +++ b/src/autocmd.c @@ -1657,7 +1657,10 @@ aucmd_restbuf( } } win_found: - +#ifdef FEAT_JOB_CHANNEL + // May need to stop Insert mode if we were in a prompt buffer. + leaving_window(curwin); +#endif // Remove the window and frame from the tree of frames. (void)winframe_remove(curwin, &dummy, NULL); win_remove(curwin, NULL);
--- a/src/proto/window.pro +++ b/src/proto/window.pro @@ -13,6 +13,7 @@ int win_count(void); int make_windows(int count, int vertical); void win_move_after(win_T *win1, win_T *win2); void win_equal(win_T *next_curwin, int current, int dir); +void leaving_window(win_T *win); void entering_window(win_T *win); void curwin_init(void); void close_windows(buf_T *buf, int keep_curwin);
--- a/src/testdir/test_prompt_buffer.vim +++ b/src/testdir/test_prompt_buffer.vim @@ -252,4 +252,42 @@ func Test_prompt_while_writing_to_hidden call StopVimInTerminal(buf) endfunc +func Test_prompt_appending_while_hidden() + call CanTestPromptBuffer() + + let script =<< trim END + new prompt + set buftype=prompt + set bufhidden=hide + + func s:TextEntered(text) + if a:text == 'exit' + close + endif + echowin 'Entered:' a:text + endfunc + call prompt_setcallback(bufnr(), function('s:TextEntered')) + + func DoAppend() + call appendbufline('prompt', '$', 'Test') + endfunc + END + call writefile(script, 'XpromptBuffer', 'D') + + let buf = RunVimInTerminal('-S XpromptBuffer', {'rows': 10}) + call TermWait(buf) + + call term_sendkeys(buf, "asomething\<CR>") + call TermWait(buf) + + call term_sendkeys(buf, "exit\<CR>") + call TermWait(buf) + + call term_sendkeys(buf, ":call DoAppend()\<CR>") + call TermWait(buf) + call assert_notmatch('-- INSERT --', term_getline(buf, 10)) + + call StopVimInTerminal(buf) +endfunc + " vim: shiftwidth=2 sts=2 expandtab