changeset 9260:ac8180818504 v7.4.1913

commit https://github.com/vim/vim/commit/1610d052413e0ed664498853a47acc2d677a22d1 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jun 9 22:53:01 2016 +0200 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 https://github.com/vim/vim/issues/854)
author Christian Brabandt <cb@256bit.org>
date Thu, 09 Jun 2016 23:00:05 +0200
parents efb4c1cb6ca8
children 2f6e4c902d86
files src/ex_cmds.c src/ex_docmd.c src/fileio.c src/proto/fileio.pro src/version.c
diffstat 5 files changed, 22 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -3096,7 +3096,7 @@ do_write(exarg_T *eap)
 	    {
 		if (au_has_group((char_u *)"filetypedetect"))
 		    (void)do_doautocmd((char_u *)"filetypedetect BufRead",
-									TRUE);
+								  TRUE, NULL);
 		do_modelines(0);
 	    }
 
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -5449,9 +5449,11 @@ ex_doautocmd(exarg_T *eap)
 {
     char_u	*arg = eap->arg;
     int		call_do_modelines = check_nomodeline(&arg);
-
-    (void)do_doautocmd(arg, TRUE);
-    if (call_do_modelines)  /* Only when there is no <nomodeline>. */
+    int		did_aucmd;
+
+    (void)do_doautocmd(arg, TRUE, &did_aucmd);
+    /* Only when there is no <nomodeline>. */
+    if (call_do_modelines && did_aucmd)
 	do_modelines(0);
 }
 #endif
@@ -11896,7 +11898,7 @@ ex_filetype(exarg_T *eap)
 	}
 	if (*arg == 'd')
 	{
-	    (void)do_doautocmd((char_u *)"filetypedetect BufRead", TRUE);
+	    (void)do_doautocmd((char_u *)"filetypedetect BufRead", TRUE, NULL);
 	    do_modelines(0);
 	}
     }
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -5162,7 +5162,7 @@ set_rw_fname(char_u *fname, char_u *sfna
     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 @@ do_autocmd_event(
     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 @@ do_doautocmd(
 
     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 @@ ex_doautoall(exarg_T *eap)
     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 @@ ex_doautoall(exarg_T *eap)
 	    aucmd_prepbuf(&aco, buf);
 
 	    /* execute the autocommands for this buffer */
-	    retval = do_doautocmd(arg, FALSE);
-
-	    if (call_do_modelines)
+	    retval = do_doautocmd(arg, FALSE, &did_aucmd);
+
+	    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
--- a/src/proto/fileio.pro
+++ b/src/proto/fileio.pro
@@ -34,7 +34,7 @@ int check_ei(void);
 char_u *au_event_disable(char *what);
 void au_event_restore(char_u *old_ei);
 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);
 int check_nomodeline(char_u **argp);
 void aucmd_prepbuf(aco_save_T *aco, buf_T *buf);
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1913,
+/**/
     1912,
 /**/
     1911,