0
0
mirror of https://github.com/vim/vim.git synced 2025-10-05 05:34:07 -04:00

updated for version 7.3.442

Problem:    Still read modelines for ":doautocmd".
Solution:   Move check for <nomodeline> to separate function.
This commit is contained in:
Bram Moolenaar
2012-02-12 20:14:01 +01:00
parent bbc98db7c4
commit 60542ac9fd
5 changed files with 36 additions and 16 deletions

View File

@@ -1072,6 +1072,14 @@ option will not cause any commands to be executed.
argument is included, Vim executes only the matching
autocommands for that group. Note: if you use an
undefined group name, Vim gives you an error message.
*<nomodeline>*
After applying the autocommands the modelines are
processed, so that their settings overrule the
settings from autocommands, like what happens when
editing a file. This is skipped when the <nomodeline>
argument is present. You probably want to use
<nomodeline> for events that are not used when loading
a buffer, such as |User|.
*:doautoa* *:doautoall*
:doautoa[ll] [<nomodeline>] [group] {event} [fname]
@@ -1085,12 +1093,6 @@ option will not cause any commands to be executed.
This command is intended for autocommands that set
options, change highlighting, and things like that.
After applying the autocommands the modelines are
processed, so that their settings overrule the
settings from autocommands, like what happens when
editing a file. This is skipped when the <nomodeline>
argument is present.
==============================================================================
10. Using autocommands *autocmd-use*

View File

@@ -4955,7 +4955,7 @@ ex_abclear(eap)
map_clear(eap->cmd, eap->arg, TRUE, TRUE);
}
#ifdef FEAT_AUTOCMD
#if defined(FEAT_AUTOCMD) || defined(PROTO)
static void
ex_autocmd(eap)
exarg_T *eap;
@@ -4982,8 +4982,12 @@ ex_autocmd(eap)
ex_doautocmd(eap)
exarg_T *eap;
{
(void)do_doautocmd(eap->arg, TRUE);
do_modelines(0);
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>. */
do_modelines(0);
}
#endif

View File

@@ -8740,13 +8740,7 @@ ex_doautoall(eap)
aco_save_T aco;
buf_T *buf;
char_u *arg = eap->arg;
int call_do_modelines = TRUE;
if (STRNCMP(arg, "<nomodeline>", 12) == 0)
{
call_do_modelines = FALSE;
arg = skipwhite(arg + 12);
}
int call_do_modelines = check_nomodeline(&arg);
/*
* This is a bit tricky: For some commands curwin->w_buffer needs to be
@@ -8785,6 +8779,23 @@ ex_doautoall(eap)
check_cursor(); /* just in case lines got deleted */
}
/*
* Check *argp for <nomodeline>. When it is present return FALSE, otherwise
* return TRUE and advance *argp to after it.
* Thus return TRUE when do_modelines() should be called.
*/
int
check_nomodeline(argp)
char_u **argp;
{
if (STRNCMP(*argp, "<nomodeline>", 12) == 0)
{
*argp = skipwhite(*argp + 12);
return FALSE;
}
return TRUE;
}
/*
* Prepare for executing autocommands for (hidden) buffer "buf".
* Search for a visible window containing the current buffer. If there isn't

View File

@@ -35,6 +35,7 @@ void au_event_restore __ARGS((char_u *old_ei));
void do_autocmd __ARGS((char_u *arg, int forceit));
int do_doautocmd __ARGS((char_u *arg, int do_msg));
void ex_doautoall __ARGS((exarg_T *eap));
int check_nomodeline __ARGS((char_u **argp));
void aucmd_prepbuf __ARGS((aco_save_T *aco, buf_T *buf));
void aucmd_restbuf __ARGS((aco_save_T *aco));
int apply_autocmds __ARGS((event_T event, char_u *fname, char_u *fname_io, int force, buf_T *buf));

View File

@@ -714,6 +714,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
442,
/**/
441,
/**/