mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 7.4.1913
Problem: When ":doautocmd" is used modelines are used even when no autocommands were executed. (Daniel Hahler) Solution: Skip processing modelines. (closes #854)
This commit is contained in:
@@ -3096,7 +3096,7 @@ do_write(exarg_T *eap)
|
|||||||
{
|
{
|
||||||
if (au_has_group((char_u *)"filetypedetect"))
|
if (au_has_group((char_u *)"filetypedetect"))
|
||||||
(void)do_doautocmd((char_u *)"filetypedetect BufRead",
|
(void)do_doautocmd((char_u *)"filetypedetect BufRead",
|
||||||
TRUE);
|
TRUE, NULL);
|
||||||
do_modelines(0);
|
do_modelines(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -5449,9 +5449,11 @@ ex_doautocmd(exarg_T *eap)
|
|||||||
{
|
{
|
||||||
char_u *arg = eap->arg;
|
char_u *arg = eap->arg;
|
||||||
int call_do_modelines = check_nomodeline(&arg);
|
int call_do_modelines = check_nomodeline(&arg);
|
||||||
|
int did_aucmd;
|
||||||
|
|
||||||
(void)do_doautocmd(arg, TRUE);
|
(void)do_doautocmd(arg, TRUE, &did_aucmd);
|
||||||
if (call_do_modelines) /* Only when there is no <nomodeline>. */
|
/* Only when there is no <nomodeline>. */
|
||||||
|
if (call_do_modelines && did_aucmd)
|
||||||
do_modelines(0);
|
do_modelines(0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -11896,7 +11898,7 @@ ex_filetype(exarg_T *eap)
|
|||||||
}
|
}
|
||||||
if (*arg == 'd')
|
if (*arg == 'd')
|
||||||
{
|
{
|
||||||
(void)do_doautocmd((char_u *)"filetypedetect BufRead", TRUE);
|
(void)do_doautocmd((char_u *)"filetypedetect BufRead", TRUE, NULL);
|
||||||
do_modelines(0);
|
do_modelines(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
15
src/fileio.c
15
src/fileio.c
@@ -5162,7 +5162,7 @@ set_rw_fname(char_u *fname, char_u *sfname)
|
|||||||
if (*curbuf->b_p_ft == NUL)
|
if (*curbuf->b_p_ft == NUL)
|
||||||
{
|
{
|
||||||
if (au_has_group((char_u *)"filetypedetect"))
|
if (au_has_group((char_u *)"filetypedetect"))
|
||||||
(void)do_doautocmd((char_u *)"filetypedetect BufRead", FALSE);
|
(void)do_doautocmd((char_u *)"filetypedetect BufRead", FALSE, NULL);
|
||||||
do_modelines(0);
|
do_modelines(0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -8688,12 +8688,16 @@ do_autocmd_event(
|
|||||||
int
|
int
|
||||||
do_doautocmd(
|
do_doautocmd(
|
||||||
char_u *arg,
|
char_u *arg,
|
||||||
int do_msg) /* give message for no matching autocmds? */
|
int do_msg, /* give message for no matching autocmds? */
|
||||||
|
int *did_something)
|
||||||
{
|
{
|
||||||
char_u *fname;
|
char_u *fname;
|
||||||
int nothing_done = TRUE;
|
int nothing_done = TRUE;
|
||||||
int group;
|
int group;
|
||||||
|
|
||||||
|
if (did_something != NULL)
|
||||||
|
did_something = FALSE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check for a legal group name. If not, use AUGROUP_ALL.
|
* Check for a legal group name. If not, use AUGROUP_ALL.
|
||||||
*/
|
*/
|
||||||
@@ -8727,6 +8731,8 @@ do_doautocmd(
|
|||||||
|
|
||||||
if (nothing_done && do_msg)
|
if (nothing_done && do_msg)
|
||||||
MSG(_("No matching autocommands"));
|
MSG(_("No matching autocommands"));
|
||||||
|
if (did_something != NULL)
|
||||||
|
*did_something = !nothing_done;
|
||||||
|
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
return aborting() ? FAIL : OK;
|
return aborting() ? FAIL : OK;
|
||||||
@@ -8746,6 +8752,7 @@ ex_doautoall(exarg_T *eap)
|
|||||||
buf_T *buf;
|
buf_T *buf;
|
||||||
char_u *arg = eap->arg;
|
char_u *arg = eap->arg;
|
||||||
int call_do_modelines = check_nomodeline(&arg);
|
int call_do_modelines = check_nomodeline(&arg);
|
||||||
|
int did_aucmd;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is a bit tricky: For some commands curwin->w_buffer needs to be
|
* This is a bit tricky: For some commands curwin->w_buffer needs to be
|
||||||
@@ -8762,9 +8769,9 @@ ex_doautoall(exarg_T *eap)
|
|||||||
aucmd_prepbuf(&aco, buf);
|
aucmd_prepbuf(&aco, buf);
|
||||||
|
|
||||||
/* execute the autocommands for this buffer */
|
/* execute the autocommands for this buffer */
|
||||||
retval = do_doautocmd(arg, FALSE);
|
retval = do_doautocmd(arg, FALSE, &did_aucmd);
|
||||||
|
|
||||||
if (call_do_modelines)
|
if (call_do_modelines && did_aucmd)
|
||||||
{
|
{
|
||||||
/* Execute the modeline settings, but don't set window-local
|
/* Execute the modeline settings, but don't set window-local
|
||||||
* options if we are using the current window for another
|
* options if we are using the current window for another
|
||||||
|
@@ -34,7 +34,7 @@ int check_ei(void);
|
|||||||
char_u *au_event_disable(char *what);
|
char_u *au_event_disable(char *what);
|
||||||
void au_event_restore(char_u *old_ei);
|
void au_event_restore(char_u *old_ei);
|
||||||
void do_autocmd(char_u *arg, int forceit);
|
void do_autocmd(char_u *arg, int forceit);
|
||||||
int do_doautocmd(char_u *arg, int do_msg);
|
int do_doautocmd(char_u *arg, int do_msg, int *did_something);
|
||||||
void ex_doautoall(exarg_T *eap);
|
void ex_doautoall(exarg_T *eap);
|
||||||
int check_nomodeline(char_u **argp);
|
int check_nomodeline(char_u **argp);
|
||||||
void aucmd_prepbuf(aco_save_T *aco, buf_T *buf);
|
void aucmd_prepbuf(aco_save_T *aco, buf_T *buf);
|
||||||
|
@@ -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 */
|
||||||
|
/**/
|
||||||
|
1913,
|
||||||
/**/
|
/**/
|
||||||
1912,
|
1912,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user