diff options
author | lonerover <pathfinder1644@yahoo.com> | 2016-12-28 06:39:21 +0800 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2016-12-27 17:39:21 -0500 |
commit | 1928b79e0ce6aa2169d735e7d6af336c74152d7a (patch) | |
tree | f0db8ba1c9005991b7b3bf8487108cf36632550f /src | |
parent | 9066e2356256f0416f4c61cb31edcf0a50c4f5b6 (diff) | |
download | rneovim-1928b79e0ce6aa2169d735e7d6af336c74152d7a.tar.gz rneovim-1928b79e0ce6aa2169d735e7d6af336c74152d7a.tar.bz2 rneovim-1928b79e0ce6aa2169d735e7d6af336c74152d7a.zip |
vim-patch:7.4.1837 (#5834)
Problem: The BufUnload event is triggered twice, when :bunload is used with
set to or .
Solution: Do not trigger the event when ml_mfp is NULL. (Hirohito Higashi)
https://github.com/vim/vim/commit/c67e89213476b5f4756d92208b57ce9ef4a4cf24
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/buffer.c | 9 | ||||
-rw-r--r-- | src/nvim/testdir/test_autocmd.vim | 69 | ||||
-rw-r--r-- | src/nvim/version.c | 2 |
3 files changed, 55 insertions, 25 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index 80db0e2ebc..d9fdc80c60 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -509,9 +509,12 @@ void buf_freeall(buf_T *buf, int flags) // Make sure the buffer isn't closed by autocommands. buf->b_closing = true; - apply_autocmds(EVENT_BUFUNLOAD, buf->b_fname, buf->b_fname, FALSE, buf); - if (!buf_valid(buf)) /* autocommands may delete the buffer */ - return; + if (buf->b_ml.ml_mfp != NULL) { + apply_autocmds(EVENT_BUFUNLOAD, buf->b_fname, buf->b_fname, false, buf); + if (!buf_valid(buf)) { // autocommands may delete the buffer + return; + } + } if ((flags & BFA_DEL) && buf->b_p_bl) { apply_autocmds(EVENT_BUFDELETE, buf->b_fname, buf->b_fname, FALSE, buf); if (!buf_valid(buf)) /* autocommands may delete the buffer */ diff --git a/src/nvim/testdir/test_autocmd.vim b/src/nvim/testdir/test_autocmd.vim index d3e0981025..1dceb70cd4 100644 --- a/src/nvim/testdir/test_autocmd.vim +++ b/src/nvim/testdir/test_autocmd.vim @@ -7,29 +7,56 @@ func Test_vim_did_enter() " becomes one. endfunc -if !has('timers') - finish +if has('timers') + func ExitInsertMode(id) + call feedkeys("\<Esc>") + endfunc + + func Test_cursorhold_insert() + let g:triggered = 0 + au CursorHoldI * let g:triggered += 1 + set updatetime=20 + call timer_start(100, 'ExitInsertMode') + call feedkeys('a', 'x!') + call assert_equal(1, g:triggered) + endfunc + + func Test_cursorhold_insert_ctrl_x() + let g:triggered = 0 + au CursorHoldI * let g:triggered += 1 + set updatetime=20 + call timer_start(100, 'ExitInsertMode') + " CursorHoldI does not trigger after CTRL-X + call feedkeys("a\<C-X>", 'x!') + call assert_equal(0, g:triggered) + endfunc endif -func ExitInsertMode(id) - call feedkeys("\<Esc>") -endfunc +function Test_bufunload() + augroup test_bufunload_group + autocmd! + autocmd BufUnload * call add(s:li, "bufunload") + autocmd BufDelete * call add(s:li, "bufdelete") + autocmd BufWipeout * call add(s:li, "bufwipeout") + augroup END -func Test_cursorhold_insert() - let g:triggered = 0 - au CursorHoldI * let g:triggered += 1 - set updatetime=20 - call timer_start(100, 'ExitInsertMode') - call feedkeys('a', 'x!') - call assert_equal(1, g:triggered) -endfunc + let s:li=[] + new + setlocal bufhidden= + bunload + call assert_equal(["bufunload", "bufdelete"], s:li) + + let s:li=[] + new + setlocal bufhidden=delete + bunload + call assert_equal(["bufunload", "bufdelete"], s:li) + + let s:li=[] + new + setlocal bufhidden=unload + bwipeout + call assert_equal(["bufunload", "bufdelete", "bufwipeout"], s:li) -func Test_cursorhold_insert_ctrl_x() - let g:triggered = 0 - au CursorHoldI * let g:triggered += 1 - set updatetime=20 - call timer_start(100, 'ExitInsertMode') - " CursorHoldI does not trigger after CTRL-X - call feedkeys("a\<C-X>", 'x!') - call assert_equal(0, g:triggered) + augroup! test_bufunload_group endfunc diff --git a/src/nvim/version.c b/src/nvim/version.c index 512d52cbc4..df3fc1cbc2 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -603,7 +603,7 @@ static int included_patches[] = { 1840, // 1839, // 1838, - // 1837, + 1837, 1836, 1835, 1833, |