Mercurial > vim
diff src/fileio.c @ 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 | d2b9e454c73d |
children | bff3cd5cf922 |
line wrap: on
line diff
--- 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