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;
|
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
|
||||||
|
@@ -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
|
||||||
|
@@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user