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:
@@ -1744,7 +1744,11 @@ set_curbuf(buf_T *buf, int action)
|
||||
{
|
||||
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);
|
||||
close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL, prevbuf,
|
||||
unload ? action : (action == DOBUF_GOTO
|
||||
|
@@ -484,5 +484,28 @@ func Test_timer_outputting_message()
|
||||
call delete('XTest_timermessage')
|
||||
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
|
||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
4166,
|
||||
/**/
|
||||
4165,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user