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)
diff --git a/src/fileio.c b/src/fileio.c
index c07accc..37b43a3 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -5162,7 +5162,7 @@
if (*curbuf->b_p_ft == NUL)
{
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);
}
#endif
@@ -8688,12 +8688,16 @@
int
do_doautocmd(
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;
int nothing_done = TRUE;
int group;
+ if (did_something != NULL)
+ did_something = FALSE;
+
/*
* Check for a legal group name. If not, use AUGROUP_ALL.
*/
@@ -8727,6 +8731,8 @@
if (nothing_done && do_msg)
MSG(_("No matching autocommands"));
+ if (did_something != NULL)
+ *did_something = !nothing_done;
#ifdef FEAT_EVAL
return aborting() ? FAIL : OK;
@@ -8746,6 +8752,7 @@
buf_T *buf;
char_u *arg = eap->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
@@ -8762,9 +8769,9 @@
aucmd_prepbuf(&aco, buf);
/* 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
* options if we are using the current window for another