mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
patch 8.2.3759: quickfix buffer becomes hidden while still in a window
Problem: Quickfix buffer becomes hidden while still in a window. Solution: Check if the closed window is the last window showing the quickfix buffer. (Yegappan Lakshmanan, closes #9303, closes #9300)
This commit is contained in:
committed by
Bram Moolenaar
parent
2172bff364
commit
78a61068cf
@@ -2818,7 +2818,7 @@ qf_get_entry(
|
||||
}
|
||||
|
||||
/*
|
||||
* Find a window displaying a Vim help file.
|
||||
* Find a window displaying a Vim help file in the current tab page.
|
||||
*/
|
||||
static win_T *
|
||||
qf_find_help_win(void)
|
||||
@@ -2893,8 +2893,8 @@ jump_to_help_window(qf_info_T *qi, int newwin, int *opened_window)
|
||||
}
|
||||
|
||||
/*
|
||||
* Find a non-quickfix window in the current tabpage using the given location
|
||||
* list stack.
|
||||
* Find a non-quickfix window using the given location list stack in the
|
||||
* current tabpage.
|
||||
* Returns NULL if a matching window is not found.
|
||||
*/
|
||||
static win_T *
|
||||
@@ -2910,7 +2910,7 @@ qf_find_win_with_loclist(qf_info_T *ll)
|
||||
}
|
||||
|
||||
/*
|
||||
* Find a window containing a normal buffer
|
||||
* Find a window containing a normal buffer in the current tab page.
|
||||
*/
|
||||
static win_T *
|
||||
qf_find_win_with_normal_buf(void)
|
||||
@@ -2981,7 +2981,7 @@ qf_goto_win_with_ll_file(win_T *use_win, int qf_fnum, qf_info_T *ll_ref)
|
||||
|
||||
if (win == NULL)
|
||||
{
|
||||
// Find the window showing the selected file
|
||||
// Find the window showing the selected file in the current tab page.
|
||||
FOR_ALL_WINDOWS(win)
|
||||
if (win->w_buffer->b_fnum == qf_fnum)
|
||||
break;
|
||||
@@ -4394,8 +4394,8 @@ is_qf_win(win_T *win, qf_info_T *qi)
|
||||
}
|
||||
|
||||
/*
|
||||
* Find a window displaying the quickfix/location stack 'qi'
|
||||
* Only searches in the current tabpage.
|
||||
* Find a window displaying the quickfix/location stack 'qi' in the current tab
|
||||
* page.
|
||||
*/
|
||||
static win_T *
|
||||
qf_find_win(qf_info_T *qi)
|
||||
@@ -4410,7 +4410,7 @@ qf_find_win(qf_info_T *qi)
|
||||
|
||||
/*
|
||||
* Find a quickfix buffer.
|
||||
* Searches in windows opened in all the tabs.
|
||||
* Searches in windows opened in all the tab pages.
|
||||
*/
|
||||
static buf_T *
|
||||
qf_find_buf(qf_info_T *qi)
|
||||
|
@@ -5636,4 +5636,40 @@ fun Test_vimgrep_nomatch()
|
||||
cclose
|
||||
endfunc
|
||||
|
||||
" Test for opening the quickfix window in two tab pages and then closing one
|
||||
" of the quickfix windows. This should not make the quickfix buffer unlisted.
|
||||
" (github issue #9300).
|
||||
func Test_two_qf_windows()
|
||||
cexpr "F1:1:line1"
|
||||
copen
|
||||
tabnew
|
||||
copen
|
||||
call assert_true(&buflisted)
|
||||
cclose
|
||||
tabfirst
|
||||
call assert_true(&buflisted)
|
||||
let bnum = bufnr()
|
||||
cclose
|
||||
" if all the quickfix windows are closed, then buffer should be unlisted.
|
||||
call assert_false(buflisted(bnum))
|
||||
%bw!
|
||||
|
||||
" Repeat the test for a location list
|
||||
lexpr "F2:2:line2"
|
||||
lopen
|
||||
let bnum = bufnr()
|
||||
tabnew
|
||||
exe "buffer" bnum
|
||||
tabfirst
|
||||
lclose
|
||||
tablast
|
||||
call assert_true(buflisted(bnum))
|
||||
tabclose
|
||||
lopen
|
||||
call assert_true(buflisted(bnum))
|
||||
lclose
|
||||
call assert_false(buflisted(bnum))
|
||||
%bw!
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
@@ -753,6 +753,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
3759,
|
||||
/**/
|
||||
3758,
|
||||
/**/
|
||||
|
@@ -2433,8 +2433,10 @@ win_close_buffer(win_T *win, int action, int abort_if_last)
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_QUICKFIX
|
||||
// When the quickfix/location list window is closed, unlist the buffer.
|
||||
if (win->w_buffer != NULL && bt_quickfix(win->w_buffer))
|
||||
// When a quickfix/location list window is closed and the buffer is
|
||||
// displayed in only one window, then unlist the buffer.
|
||||
if (win->w_buffer != NULL && bt_quickfix(win->w_buffer)
|
||||
&& win->w_buffer->b_nwindows == 1)
|
||||
win->w_buffer->b_p_bl = FALSE;
|
||||
#endif
|
||||
|
||||
|
Reference in New Issue
Block a user