mirror of
https://github.com/vim/vim.git
synced 2026-05-28 00:21:37 +02:00
patch 9.1.2055: Division by zero in :file after failing to wipe buffer
Problem: Division by zero in :file after failing to wipe buffer
(after 8.2.4631).
Solution: Still call buf_clear_file() when failing to wipe buffer
(zeertzjq).
closes: #19088
Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
0ed8ba3079
commit
1aa5ca4ecb
+3
-6
@@ -707,7 +707,7 @@ aucmd_abort:
|
||||
// If the buffer was in curwin and the window has changed, go back to that
|
||||
// window, if it still exists. This avoids that ":edit x" triggering a
|
||||
// "tabnext" BufUnload autocmd leaves a window behind without a buffer.
|
||||
if (is_curwin && curwin != the_curwin && win_valid_any_tab(the_curwin))
|
||||
if (is_curwin && curwin != the_curwin && win_valid_any_tab(the_curwin))
|
||||
{
|
||||
block_autocmds();
|
||||
goto_tabpage_win(the_curtab, the_curwin);
|
||||
@@ -782,16 +782,13 @@ aucmd_abort:
|
||||
|
||||
/*
|
||||
* Remove the buffer from the list.
|
||||
* Do not wipe out the buffer if it is used in a window.
|
||||
*/
|
||||
if (wipe_buf)
|
||||
if (wipe_buf && buf->b_nwindows <= 0)
|
||||
{
|
||||
tabpage_T *tp;
|
||||
win_T *wp;
|
||||
|
||||
// Do not wipe out the buffer if it is used in a window.
|
||||
if (buf->b_nwindows > 0)
|
||||
return FALSE;
|
||||
|
||||
FOR_ALL_TAB_WINDOWS(tp, wp)
|
||||
mark_forget_file(wp, buf->b_fnum);
|
||||
|
||||
|
||||
@@ -3696,7 +3696,7 @@ func Test_BufReadPre_changebuf()
|
||||
close!
|
||||
endfunc
|
||||
|
||||
" Test for BufWipeouti autocmd changing the current buffer when reading a file
|
||||
" Test for BufWipeout autocmd changing the current buffer when reading a file
|
||||
" in an empty buffer with 'f' flag in 'cpo'
|
||||
func Test_BufDelete_changebuf()
|
||||
new
|
||||
@@ -4016,6 +4016,29 @@ func Test_bufwipeout_changes_window()
|
||||
%bwipe!
|
||||
endfunc
|
||||
|
||||
func Test_autocmd_prevent_buf_wipe()
|
||||
" Xa must be the first buffer so that win_close_othertab() puts it in
|
||||
" another window, which causes wiping the buffer to fail.
|
||||
%bwipe!
|
||||
|
||||
file Xa
|
||||
call setline(1, 'foo')
|
||||
setlocal bufhidden=wipe
|
||||
tabnew Xb
|
||||
setlocal bufhidden=wipe
|
||||
autocmd BufUnload Xa ++once ++nested tabonly
|
||||
autocmd BufWinLeave Xb ++once tabnext
|
||||
tabfirst
|
||||
|
||||
edit! Xc
|
||||
call assert_equal('Xc', bufname('%'))
|
||||
tabnext
|
||||
call assert_equal('Xa', bufname('%'))
|
||||
call assert_equal("\n\"Xa\" --No lines in buffer--", execute('file'))
|
||||
|
||||
%bwipe!
|
||||
endfunc
|
||||
|
||||
func Test_v_event_readonly()
|
||||
autocmd CompleteChanged * let v:event.width = 0
|
||||
call assert_fails("normal! i\<C-X>\<C-V>", 'E46:')
|
||||
|
||||
@@ -734,6 +734,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
2055,
|
||||
/**/
|
||||
2054,
|
||||
/**/
|
||||
|
||||
Reference in New Issue
Block a user