From e3537aec2f8d6470010547af28dcbd83d41461b8 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 8 Feb 2022 15:05:20 +0000 Subject: [PATCH] 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 Reference:https://github.com/vim/vim/commit/e3537aec2f8d6470010547af28dcbd83d41461b8 Conflict:NA --- src/buffer.c | 26 ++++++++++++++++++++++---- src/testdir/test_quickfix.vim | 25 +++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index e5f6a9b..3617c63 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -1520,8 +1520,14 @@ do_buffer( 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 @@ -1558,7 +1564,11 @@ do_buffer( 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; @@ -1576,7 +1586,11 @@ do_buffer( 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 @@ -1585,6 +1599,10 @@ do_buffer( buf = curbuf->b_next; else buf = curbuf->b_prev; +#if defined(FEAT_QUICKFIX) + if (bt_quickfix(buf)) + buf = NULL; +#endif } } diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim index 38a5236..72f3172 100644 --- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -325,6 +325,31 @@ func Test_copenHeight_tabline() set tabline& showtabline& 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 \\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 + " Tests for the :cfile, :lfile, :caddfile, :laddfile, :cgetfile and :lgetfile " commands. -- 2.27.0