Skip to content

Commit

Permalink
patch 8.2.4327: may end up with no current buffer
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
brammool committed Feb 8, 2022
1 parent 51ab7c7 commit e3537ae
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 4 deletions.
26 changes: 22 additions & 4 deletions src/buffer.c
Expand Up @@ -1430,8 +1430,14 @@ do_buffer_ext(
buf = buflist_findnr(curwin->w_jumplist[jumpidx].fmark.fnum);
if (buf != NULL)
{
if (buf == curbuf || !buf->b_p_bl)
buf = NULL; // skip current and unlisted bufs
// Skip current and unlisted bufs. Also skip a quickfix
// 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)
{
// skip unloaded buf, but may keep it for later
Expand Down Expand Up @@ -1467,7 +1473,11 @@ do_buffer_ext(
continue;
}
// 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
break;
Expand All @@ -1485,7 +1495,11 @@ do_buffer_ext(
if (buf == NULL) // No loaded buffer, find listed one
{
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;
}
if (buf == NULL) // Still no buffer, just take one
Expand All @@ -1494,6 +1508,10 @@ do_buffer_ext(
buf = curbuf->b_next;
else
buf = curbuf->b_prev;
#if defined(FEAT_QUICKFIX)
if (bt_quickfix(buf))
buf = NULL;
#endif
}
}

Expand Down
25 changes: 25 additions & 0 deletions src/testdir/test_quickfix.vim
Expand Up @@ -5851,5 +5851,30 @@ func Test_lopen_bwipe()
delfunc R
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
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -746,6 +746,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
4327,
/**/
4326,
/**/
Expand Down

0 comments on commit e3537ae

Please sign in to comment.