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 *
|
static win_T *
|
||||||
qf_find_help_win(void)
|
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
|
* Find a non-quickfix window using the given location list stack in the
|
||||||
* list stack.
|
* current tabpage.
|
||||||
* Returns NULL if a matching window is not found.
|
* Returns NULL if a matching window is not found.
|
||||||
*/
|
*/
|
||||||
static win_T *
|
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 *
|
static win_T *
|
||||||
qf_find_win_with_normal_buf(void)
|
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)
|
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)
|
FOR_ALL_WINDOWS(win)
|
||||||
if (win->w_buffer->b_fnum == qf_fnum)
|
if (win->w_buffer->b_fnum == qf_fnum)
|
||||||
break;
|
break;
|
||||||
@@ -4394,8 +4394,8 @@ is_qf_win(win_T *win, qf_info_T *qi)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Find a window displaying the quickfix/location stack 'qi'
|
* Find a window displaying the quickfix/location stack 'qi' in the current tab
|
||||||
* Only searches in the current tabpage.
|
* page.
|
||||||
*/
|
*/
|
||||||
static win_T *
|
static win_T *
|
||||||
qf_find_win(qf_info_T *qi)
|
qf_find_win(qf_info_T *qi)
|
||||||
@@ -4410,7 +4410,7 @@ qf_find_win(qf_info_T *qi)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Find a quickfix buffer.
|
* Find a quickfix buffer.
|
||||||
* Searches in windows opened in all the tabs.
|
* Searches in windows opened in all the tab pages.
|
||||||
*/
|
*/
|
||||||
static buf_T *
|
static buf_T *
|
||||||
qf_find_buf(qf_info_T *qi)
|
qf_find_buf(qf_info_T *qi)
|
||||||
|
@@ -5636,4 +5636,40 @@ fun Test_vimgrep_nomatch()
|
|||||||
cclose
|
cclose
|
||||||
endfunc
|
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
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -753,6 +753,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 */
|
||||||
|
/**/
|
||||||
|
3759,
|
||||||
/**/
|
/**/
|
||||||
3758,
|
3758,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -2433,8 +2433,10 @@ win_close_buffer(win_T *win, int action, int abort_if_last)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef FEAT_QUICKFIX
|
#ifdef FEAT_QUICKFIX
|
||||||
// When the quickfix/location list window is closed, unlist the buffer.
|
// When a quickfix/location list window is closed and the buffer is
|
||||||
if (win->w_buffer != NULL && bt_quickfix(win->w_buffer))
|
// 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;
|
win->w_buffer->b_p_bl = FALSE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user