diff options
author | bfredl <bjorn.linse@gmail.com> | 2022-01-27 08:48:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-27 08:48:31 +0100 |
commit | 1270949c11536248015fb7efad9f37f5f36399c4 (patch) | |
tree | 3fc88454d080dfa8f5e092fce4ce214f7b6bbe3f | |
parent | 618f7079e51a62ef67b0f5e0cb75ff9ccdb9ffcd (diff) | |
parent | 2fa1b4cbff06b6dabc6d59df585953e9220e5007 (diff) | |
download | rneovim-1270949c11536248015fb7efad9f37f5f36399c4.tar.gz rneovim-1270949c11536248015fb7efad9f37f5f36399c4.tar.bz2 rneovim-1270949c11536248015fb7efad9f37f5f36399c4.zip |
Merge pull request #17150 from zeertzjq/vim-8.2.4166
vim-patch:8.2.4166: undo synced when switching buffer in another window
-rw-r--r-- | src/nvim/buffer.c | 5 | ||||
-rw-r--r-- | src/nvim/testdir/test_timers.vim | 23 |
2 files changed, 27 insertions, 1 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index 124ae8c719..eee5a0b46c 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -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, diff --git a/src/nvim/testdir/test_timers.vim b/src/nvim/testdir/test_timers.vim index aae315b2c5..09eed4e10d 100644 --- a/src/nvim/testdir/test_timers.vim +++ b/src/nvim/testdir/test_timers.vim @@ -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 |