mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge pull request #17150 from zeertzjq/vim-8.2.4166
vim-patch:8.2.4166: undo synced when switching buffer in another window
This commit is contained in:
commit
1270949c11
@ -1454,7 +1454,10 @@ void set_curbuf(buf_T *buf, int action)
|
||||
}
|
||||
if (bufref_valid(&prevbufref) && !aborting()) {
|
||||
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,
|
||||
|
@ -379,4 +379,27 @@ func Test_timer_invalid_callback()
|
||||
call assert_fails('call timer_start(0, "0")', 'E921')
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user