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:
parent
51ab7c7d0d
commit
e3537aec2f
26
src/buffer.c
26
src/buffer.c
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user