mirror of
https://github.com/neovim/neovim.git
synced 2025-09-16 08:18:17 +00:00
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 vim/vim#9575)
e615db0604
This commit is contained in:
@@ -1454,7 +1454,10 @@ void set_curbuf(buf_T *buf, int action)
|
|||||||
}
|
}
|
||||||
if (bufref_valid(&prevbufref) && !aborting()) {
|
if (bufref_valid(&prevbufref) && !aborting()) {
|
||||||
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,
|
close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL,
|
||||||
|
@@ -379,4 +379,27 @@ func Test_timer_invalid_callback()
|
|||||||
call assert_fails('call timer_start(0, "0")', 'E921')
|
call assert_fails('call timer_start(0, "0")', 'E921')
|
||||||
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
|
||||||
|
Reference in New Issue
Block a user