1
0
forked from aniani/vim

patch 8.2.4166: undo synced when switching buffer in another window

Problem:    Undo synced when switching buffer in another window.
Solution:   Do not sync undo when not needed. (closes #9575)
This commit is contained in:
Bram Moolenaar
2022-01-20 21:00:54 +00:00
parent 05386ca1d4
commit e615db0604
3 changed files with 30 additions and 1 deletions

View File

@@ -1744,7 +1744,11 @@ set_curbuf(buf_T *buf, int action)
{ {
win_T *previouswin = curwin; win_T *previouswin = curwin;
if (prevbuf == curbuf) // Do not sync when in Insert mode and the buffer is open in
// another window, might be a timer doing something in another
// window.
if (prevbuf == curbuf
&& ((State & INSERT) == 0 || curbuf->b_nwindows <= 1))
u_sync(FALSE); u_sync(FALSE);
close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL, prevbuf, close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL, prevbuf,
unload ? action : (action == DOBUF_GOTO unload ? action : (action == DOBUF_GOTO

View File

@@ -484,5 +484,28 @@ func Test_timer_outputting_message()
call delete('XTest_timermessage') call delete('XTest_timermessage')
endfunc endfunc
func Test_timer_using_win_execute_undo_sync()
let bufnr1 = bufnr()
new
let g:bufnr2 = bufnr()
let g:winid = win_getid()
exe "buffer " .. bufnr1
wincmd w
call setline(1, ['test'])
autocmd InsertEnter * call timer_start(100, { -> win_execute(g:winid, 'buffer ' .. g:bufnr2) })
call timer_start(200, { -> feedkeys("\<CR>bbbb\<Esc>") })
call feedkeys("Oaaaa", 'x!t')
" will hang here until the second timer fires
call assert_equal(['aaaa', 'bbbb', 'test'], getline(1, '$'))
undo
call assert_equal(['test'], getline(1, '$'))
bwipe!
bwipe!
unlet g:winid
unlet g:bufnr2
au! InsertEnter
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab

View File

@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
4166,
/**/ /**/
4165, 4165,
/**/ /**/