0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.2.4327: may end up with no current buffer

Problem:    May end up with no current buffer.
Solution:   When deleting the current buffer to not pick a quickfix buffer as
            the new current buffer.
This commit is contained in:
Bram Moolenaar 2022-02-08 15:05:20 +00:00
parent 51ab7c7d0d
commit e3537aec2f
3 changed files with 49 additions and 4 deletions

View File

@ -1430,8 +1430,14 @@ do_buffer_ext(
buf = buflist_findnr(curwin->w_jumplist[jumpidx].fmark.fnum); buf = buflist_findnr(curwin->w_jumplist[jumpidx].fmark.fnum);
if (buf != NULL) if (buf != NULL)
{ {
if (buf == curbuf || !buf->b_p_bl) // Skip current and unlisted bufs. Also skip a quickfix
buf = NULL; // skip current and unlisted bufs // buffer, it might be deleted soon.
if (buf == curbuf || !buf->b_p_bl
#if defined(FEAT_QUICKFIX)
|| bt_quickfix(buf)
#endif
)
buf = NULL;
else if (buf->b_ml.ml_mfp == NULL) else if (buf->b_ml.ml_mfp == NULL)
{ {
// skip unloaded buf, but may keep it for later // skip unloaded buf, but may keep it for later
@ -1467,7 +1473,11 @@ do_buffer_ext(
continue; continue;
} }
// in non-help buffer, try to skip help buffers, and vv // in non-help buffer, try to skip help buffers, and vv
if (buf->b_help == curbuf->b_help && buf->b_p_bl) if (buf->b_help == curbuf->b_help && buf->b_p_bl
#if defined(FEAT_QUICKFIX)
&& !bt_quickfix(buf)
#endif
)
{ {
if (buf->b_ml.ml_mfp != NULL) // found loaded buffer if (buf->b_ml.ml_mfp != NULL) // found loaded buffer
break; break;
@ -1485,7 +1495,11 @@ do_buffer_ext(
if (buf == NULL) // No loaded buffer, find listed one if (buf == NULL) // No loaded buffer, find listed one
{ {
FOR_ALL_BUFFERS(buf) FOR_ALL_BUFFERS(buf)
if (buf->b_p_bl && buf != curbuf) if (buf->b_p_bl && buf != curbuf
#if defined(FEAT_QUICKFIX)
&& !bt_quickfix(buf)
#endif
)
break; break;
} }
if (buf == NULL) // Still no buffer, just take one if (buf == NULL) // Still no buffer, just take one
@ -1494,6 +1508,10 @@ do_buffer_ext(
buf = curbuf->b_next; buf = curbuf->b_next;
else else
buf = curbuf->b_prev; buf = curbuf->b_prev;
#if defined(FEAT_QUICKFIX)
if (bt_quickfix(buf))
buf = NULL;
#endif
} }
} }

View File

@ -5851,5 +5851,30 @@ func Test_lopen_bwipe()
delfunc R delfunc R
endfunc endfunc
" Another sequence of commands that caused all buffers to be wiped out
func Test_lopen_bwipe_all()
let lines =<< trim END
func R()
silent! tab lopen
e foo
silent! lfile
endfunc
cal R()
exe "norm \<C-W>\<C-V>0"
cal R()
bwipe
call writefile(['done'], 'Xresult')
qall!
END
call writefile(lines, 'Xscript')
if RunVim([], [], '-u NONE -n -X -Z -e -m -s -S Xscript')
call assert_equal(['done'], readfile('Xresult'))
endif
call delete('Xscript')
call delete('Xresult')
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab

View File

@ -746,6 +746,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
4327,
/**/ /**/
4326, 4326,
/**/ /**/