Skip to content

Commit

Permalink
patch 9.0.1439: start Insert mode when accessing a hidden prompt buffer
Browse files Browse the repository at this point in the history
Problem:    Start Insert mode when accessing a hidden prompt buffer.
Solution:   Call leaving_window() in aucmd_restbuf(). (Thorben Tröbst,
            closes #12148, closes #12147)
  • Loading branch information
t-troebst authored and brammool committed Apr 2, 2023
1 parent 065088d commit cde8de0
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 2 deletions.
5 changes: 4 additions & 1 deletion src/autocmd.c
Expand Up @@ -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);
Expand Down
1 change: 1 addition & 0 deletions src/proto/window.pro
Expand Up @@ -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);
Expand Down
38 changes: 38 additions & 0 deletions src/testdir/test_prompt_buffer.vim
Expand Up @@ -252,4 +252,42 @@ func Test_prompt_while_writing_to_hidden_buffer()
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
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -695,6 +695,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1439,
/**/
1438,
/**/
Expand Down
2 changes: 1 addition & 1 deletion src/window.c
Expand Up @@ -2292,7 +2292,7 @@ win_equal_rec(
}

#ifdef FEAT_JOB_CHANNEL
static void
void
leaving_window(win_T *win)
{
// Only matters for a prompt window.
Expand Down

0 comments on commit cde8de0

Please sign in to comment.