mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
patch 8.2.1059: crash when using :tabonly in an autocommand
Problem: Crash when using :tabonly in an autocommand. (Yegappan Lakshmanan) Solution: Do not allow the autocommand window to be closed.
This commit is contained in:
@@ -5178,6 +5178,13 @@ ex_win_close(
|
|||||||
int need_hide;
|
int need_hide;
|
||||||
buf_T *buf = win->w_buffer;
|
buf_T *buf = win->w_buffer;
|
||||||
|
|
||||||
|
// Never close the autocommand window.
|
||||||
|
if (win == aucmd_win)
|
||||||
|
{
|
||||||
|
emsg(_(e_autocmd_close));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
need_hide = (bufIsChanged(buf) && buf->b_nwindows <= 1);
|
need_hide = (bufIsChanged(buf) && buf->b_nwindows <= 1);
|
||||||
if (need_hide && !buf_hide(buf) && !forceit)
|
if (need_hide && !buf_hide(buf) && !forceit)
|
||||||
{
|
{
|
||||||
|
@@ -1765,6 +1765,7 @@ EXTERN char e_float_as_string[] INIT(= N_("E806: using Float as a String"));
|
|||||||
#endif
|
#endif
|
||||||
EXTERN char e_dirnotf[] INIT(= N_("E919: Directory not found in '%s': \"%s\""));
|
EXTERN char e_dirnotf[] INIT(= N_("E919: Directory not found in '%s': \"%s\""));
|
||||||
EXTERN char e_au_recursive[] INIT(= N_("E952: Autocommand caused recursive behavior"));
|
EXTERN char e_au_recursive[] INIT(= N_("E952: Autocommand caused recursive behavior"));
|
||||||
|
EXTERN char e_autocmd_close[] INIT(= N_("E813: Cannot close autocmd or popup window"));
|
||||||
#ifdef FEAT_MENU
|
#ifdef FEAT_MENU
|
||||||
EXTERN char e_menuothermode[] INIT(= N_("E328: Menu only exists in another mode"));
|
EXTERN char e_menuothermode[] INIT(= N_("E328: Menu only exists in another mode"));
|
||||||
#endif
|
#endif
|
||||||
|
@@ -2617,7 +2617,27 @@ func Test_close_autocmd_window()
|
|||||||
au!
|
au!
|
||||||
augroup END
|
augroup END
|
||||||
augroup! aucmd_win_test2
|
augroup! aucmd_win_test2
|
||||||
%bw!
|
%bwipe!
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Test for trying to close the tab that has the temporary window for exeucing
|
||||||
|
" an autocmd.
|
||||||
|
func Test_close_autocmd_tab()
|
||||||
|
edit one.txt
|
||||||
|
tabnew two.txt
|
||||||
|
augroup aucmd_win_test
|
||||||
|
au!
|
||||||
|
au BufEnter * if expand('<afile>') == 'one.txt' | tabfirst | tabonly | endif
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
call assert_fails('doautoall BufEnter', 'E813:')
|
||||||
|
|
||||||
|
tabonly
|
||||||
|
augroup aucmd_win_test
|
||||||
|
au!
|
||||||
|
augroup END
|
||||||
|
augroup! aucmd_win_test
|
||||||
|
%bwipe!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -754,6 +754,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 */
|
||||||
|
/**/
|
||||||
|
1059,
|
||||||
/**/
|
/**/
|
||||||
1058,
|
1058,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -2461,7 +2461,7 @@ win_close(win_T *win, int free_buf)
|
|||||||
return FAIL; // window is already being closed
|
return FAIL; // window is already being closed
|
||||||
if (win_unlisted(win))
|
if (win_unlisted(win))
|
||||||
{
|
{
|
||||||
emsg(_("E813: Cannot close autocmd or popup window"));
|
emsg(_(e_autocmd_close));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
if ((firstwin == aucmd_win || lastwin == aucmd_win) && one_window())
|
if ((firstwin == aucmd_win || lastwin == aucmd_win) && one_window())
|
||||||
|
Reference in New Issue
Block a user