0
0
mirror of https://github.com/vim/vim.git synced 2025-09-27 04:14:06 -04:00

patch 8.2.3547: opening the quickfix window triggers BufWinEnter twice

Problem:    Opening the quickfix window triggers BufWinEnter twice. (Yorick
            Peterse)
Solution:   Only trigger BufWinEnter with "quickfix". (closes #9022)
This commit is contained in:
Bram Moolenaar
2021-10-20 21:58:42 +01:00
parent 09f7723d5a
commit 1d30fde3c9
6 changed files with 36 additions and 9 deletions

View File

@@ -360,11 +360,12 @@ open_buffer(
do_modelines(0); do_modelines(0);
curbuf->b_flags &= ~(BF_CHECK_RO | BF_NEVERLOADED); curbuf->b_flags &= ~(BF_CHECK_RO | BF_NEVERLOADED);
if ((flags & READ_NOWINENTER) == 0)
#ifdef FEAT_EVAL #ifdef FEAT_EVAL
apply_autocmds_retval(EVENT_BUFWINENTER, NULL, NULL, FALSE, curbuf, apply_autocmds_retval(EVENT_BUFWINENTER, NULL, NULL, FALSE,
&retval); curbuf, &retval);
#else #else
apply_autocmds(EVENT_BUFWINENTER, NULL, NULL, FALSE, curbuf); apply_autocmds(EVENT_BUFWINENTER, NULL, NULL, FALSE, curbuf);
#endif #endif
// restore curwin/curbuf and a few other things // restore curwin/curbuf and a few other things

View File

@@ -2473,6 +2473,7 @@ theend:
* ECMD_FORCEIT: ! used for Ex command * ECMD_FORCEIT: ! used for Ex command
* ECMD_ADDBUF: don't edit, just add to buffer list * ECMD_ADDBUF: don't edit, just add to buffer list
* ECMD_ALTBUF: like ECMD_ADDBUF and also set the alternate file * ECMD_ALTBUF: like ECMD_ADDBUF and also set the alternate file
* ECMD_NOWINENTER: Do not trigger BufWinEnter
* oldwin: Should be "curwin" when editing a new buffer in the current * oldwin: Should be "curwin" when editing a new buffer in the current
* window, NULL when splitting the window first. When not NULL info * window, NULL when splitting the window first. When not NULL info
* of the previous buffer for "oldwin" is stored. * of the previous buffer for "oldwin" is stored.
@@ -3030,6 +3031,8 @@ do_ecmd(
/* /*
* Open the buffer and read the file. * Open the buffer and read the file.
*/ */
if (flags & ECMD_NOWINENTER)
readfile_flags |= READ_NOWINENTER;
#if defined(FEAT_EVAL) #if defined(FEAT_EVAL)
if (should_abort(open_buffer(FALSE, eap, readfile_flags))) if (should_abort(open_buffer(FALSE, eap, readfile_flags)))
retval = FAIL; retval = FAIL;
@@ -3051,10 +3054,11 @@ do_ecmd(
// changed by the user. // changed by the user.
do_modelines(OPT_WINONLY); do_modelines(OPT_WINONLY);
apply_autocmds_retval(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf, apply_autocmds_retval(EVENT_BUFENTER, NULL, NULL, FALSE,
&retval); curbuf, &retval);
apply_autocmds_retval(EVENT_BUFWINENTER, NULL, NULL, FALSE, curbuf, if ((flags & ECMD_NOWINENTER) == 0)
&retval); apply_autocmds_retval(EVENT_BUFWINENTER, NULL, NULL, FALSE,
curbuf, &retval);
} }
check_arg_idx(curwin); check_arg_idx(curwin);

View File

@@ -4199,13 +4199,14 @@ qf_open_new_cwindow(qf_info_T *qi, int height)
{ {
// Use the existing quickfix buffer // Use the existing quickfix buffer
if (do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE, if (do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE,
ECMD_HIDE + ECMD_OLDBUF, oldwin) == FAIL) ECMD_HIDE + ECMD_OLDBUF + ECMD_NOWINENTER, oldwin) == FAIL)
return FAIL; return FAIL;
} }
else else
{ {
// Create a new quickfix buffer // Create a new quickfix buffer
if (do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, oldwin) == FAIL) if (do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE + ECMD_NOWINENTER,
oldwin) == FAIL)
return FAIL; return FAIL;
// save the number of the new buffer // save the number of the new buffer

View File

@@ -786,6 +786,23 @@ func Test_vimgreptitle()
augroup! QfBufWinEnter augroup! QfBufWinEnter
endfunc endfunc
func Test_bufwinenter_once()
augroup QfBufWinEnter
au!
au BufWinEnter * let g:got_afile ..= 'got ' .. expand('<afile>')
augroup END
let g:got_afile = ''
copen
call assert_equal('got quickfix', g:got_afile)
cclose
unlet g:got_afile
augroup QfBufWinEnter
au!
augroup END
augroup! QfBufWinEnter
endfunc
func XqfTitleTests(cchar) func XqfTitleTests(cchar)
call s:setup_commands(a:cchar) call s:setup_commands(a:cchar)

View File

@@ -757,6 +757,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 */
/**/
3547,
/**/ /**/
3546, 3546,
/**/ /**/

View File

@@ -977,6 +977,7 @@ extern int (*dyn_libintl_wputenv)(const wchar_t *envstring);
#define READ_DUMMY 0x10 // reading into a dummy buffer #define READ_DUMMY 0x10 // reading into a dummy buffer
#define READ_KEEP_UNDO 0x20 // keep undo info #define READ_KEEP_UNDO 0x20 // keep undo info
#define READ_FIFO 0x40 // read from fifo or socket #define READ_FIFO 0x40 // read from fifo or socket
#define READ_NOWINENTER 0x80 // do not trigger BufWinEnter
// Values for change_indent() // Values for change_indent()
#define INDENT_SET 1 // set indent #define INDENT_SET 1 // set indent
@@ -1043,6 +1044,7 @@ extern int (*dyn_libintl_wputenv)(const wchar_t *envstring);
#define ECMD_FORCEIT 0x08 // ! used in Ex command #define ECMD_FORCEIT 0x08 // ! used in Ex command
#define ECMD_ADDBUF 0x10 // don't edit, just add to buffer list #define ECMD_ADDBUF 0x10 // don't edit, just add to buffer list
#define ECMD_ALTBUF 0x20 // like ECMD_ADDBUF and set the alternate file #define ECMD_ALTBUF 0x20 // like ECMD_ADDBUF and set the alternate file
#define ECMD_NOWINENTER 0x40 // do not trigger BufWinEnter
// for lnum argument in do_ecmd() // for lnum argument in do_ecmd()
#define ECMD_LASTL (linenr_T)0 // use last position in loaded file #define ECMD_LASTL (linenr_T)0 // use last position in loaded file