summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-10-01 20:03:04 +0200
committerBram Moolenaar <Bram@vim.org>2020-10-01 20:03:04 +0200
commit4537bcc88956f86267c25edf8008e0dbde598652 (patch)
tree94d5ab3b790b0aeca8985d8ba2848aecb8d563cc /src
parent668008be66326ed9e5b1122abede34ed3d2de2d8 (diff)
patch 8.2.1781: writing to prompt buffer interferes with insert modev8.2.1781
Problem: Writing to prompt buffer interferes with insert mode. Solution: Use win_enter() instead of just setting "curwin". (Ben Jackson, closes #7035)
Diffstat (limited to 'src')
-rw-r--r--src/autocmd.c2
-rw-r--r--src/testdir/test_prompt_buffer.vim33
-rw-r--r--src/version.c2
3 files changed, 36 insertions, 1 deletions
diff --git a/src/autocmd.c b/src/autocmd.c
index d5c61ca6ac..4c2b705963 100644
--- a/src/autocmd.c
+++ b/src/autocmd.c
@@ -1533,7 +1533,7 @@ win_found:
unblock_autocmds();
if (win_valid(aco->save_curwin))
- curwin = aco->save_curwin;
+ win_enter(aco->save_curwin, TRUE);
else
// Hmm, original window disappeared. Just use the first one.
curwin = firstwin;
diff --git a/src/testdir/test_prompt_buffer.vim b/src/testdir/test_prompt_buffer.vim
index 365687511d..8c266ebe6f 100644
--- a/src/testdir/test_prompt_buffer.vim
+++ b/src/testdir/test_prompt_buffer.vim
@@ -182,4 +182,37 @@ func Test_prompt_buffer_getbufinfo()
%bwipe!
endfunc
+function! Test_prompt_while_writing_to_hidden_buffer()
+ call CanTestPromptBuffer()
+ CheckUnix
+
+ " Make a job continuously write to a hidden buffer, check that the prompt
+ " buffer is not affected.
+ let scriptName = 'XpromptscriptHiddenBuf'
+ let script =<< trim END
+ set buftype=prompt
+ call prompt_setprompt( bufnr(), 'cmd:' )
+ let job = job_start(['/bin/sh', '-c',
+ \ 'while true;
+ \ do echo line;
+ \ sleep 0.1;
+ \ done'], #{out_io: 'buffer', out_name: ''})
+ startinsert
+ END
+ eval script->writefile(scriptName)
+
+ let buf = RunVimInTerminal('-S ' .. scriptName, {})
+ call WaitForAssert({-> assert_equal('cmd:', term_getline(buf, 1))})
+
+ call term_sendkeys(buf, 'test')
+ call WaitForAssert({-> assert_equal('cmd:test', term_getline(buf, 1))})
+ call term_sendkeys(buf, 'test')
+ call WaitForAssert({-> assert_equal('cmd:testtest', term_getline(buf, 1))})
+ call term_sendkeys(buf, 'test')
+ call WaitForAssert({-> assert_equal('cmd:testtesttest', term_getline(buf, 1))})
+
+ call StopVimInTerminal(buf)
+ call delete(scriptName)
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index bbe6dd5a60..0127186186 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1781,
+/**/
1780,
/**/
1779,