changeset 22466:18f400b24f5f v8.2.1781

patch 8.2.1781: writing to prompt buffer interferes with insert mode Commit: https://github.com/vim/vim/commit/4537bcc88956f86267c25edf8008e0dbde598652 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Oct 1 20:03:04 2020 +0200 patch 8.2.1781: writing to prompt buffer interferes with insert mode Problem: Writing to prompt buffer interferes with insert mode. Solution: Use win_enter() instead of just setting "curwin". (Ben Jackson, closes #7035)
author Bram Moolenaar <Bram@vim.org>
date Thu, 01 Oct 2020 20:15:04 +0200
parents 95479bb328d0
children e841e4b7ef2a
files src/autocmd.c src/testdir/test_prompt_buffer.vim src/version.c
diffstat 3 files changed, 36 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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;
--- 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
--- 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,