diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-06-09 22:53:01 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-06-09 22:53:01 +0200 |
commit | 1610d052413e0ed664498853a47acc2d677a22d1 (patch) | |
tree | 1c12cf44d17c386f031e9f5bbece5a0497a90a23 | |
parent | 1cee693b310e1494115a1677fac064941092e1bb (diff) | |
download | vim-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.c | 2 | ||||
-rw-r--r-- | src/ex_docmd.c | 8 | ||||
-rw-r--r-- | src/fileio.c | 15 | ||||
-rw-r--r-- | src/proto/fileio.pro | 2 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |