summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-06-09 22:53:01 +0200
committerBram Moolenaar <Bram@vim.org>2016-06-09 22:53:01 +0200
commit1610d052413e0ed664498853a47acc2d677a22d1 (patch)
tree1c12cf44d17c386f031e9f5bbece5a0497a90a23
parent1cee693b310e1494115a1677fac064941092e1bb (diff)
downloadvim-git-1610d052413e0ed664498853a47acc2d677a22d1.tar.gz
patch 7.4.1913v7.4.1913
Problem: When ":doautocmd" is used modelines are used even when no autocommands were executed. (Daniel Hahler) Solution: Skip processing modelines. (closes #854)
-rw-r--r--src/ex_cmds.c2
-rw-r--r--src/ex_docmd.c8
-rw-r--r--src/fileio.c15
-rw-r--r--src/proto/fileio.pro2
-rw-r--r--src/version.c2
5 files changed, 20 insertions, 9 deletions
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 2c7742eab..5e56489a3 100644
--- 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);
}
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 4f501aa45..55c093fb0 100644
--- 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);
+ int did_aucmd;
- (void)do_doautocmd(arg, TRUE);
- if (call_do_modelines) /* Only when there is no <nomodeline>. */
+ (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);
}
}
diff --git a/src/fileio.c b/src/fileio.c
index c07acccca..37b43a39a 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -5162,7 +5162,7 @@ set_rw_fname(char_u *fname, char_u *sfname)
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);
+ 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
diff --git a/src/proto/fileio.pro b/src/proto/fileio.pro
index 9cd641436..c3cbca52b 100644
--- 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);
diff --git a/src/version.c b/src/version.c
index 9fdd93f17..563ac9f1a 100644
--- 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,