0
0
mirror of https://github.com/vim/vim.git synced 2025-09-04 21:33:48 -04:00

patch 8.0.0649: when opening a help file the filetype is set several times

Problem:    When opening a help file the filetype is set several times.
Solution:   When setting the filetype to the same value from a modeline, don't
            trigger FileType autocommands.  Don't set the filetype to "help"
            when it's already set correctly.
This commit is contained in:
Bram Moolenaar 2017-06-22 14:16:31 +02:00
parent fadacf01d0
commit 9049298f8d
4 changed files with 22 additions and 6 deletions

View File

@ -1,7 +1,7 @@
" Vim support file to detect file types " Vim support file to detect file types
" "
" Maintainer: Bram Moolenaar <Bram@vim.org> " Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2017 Jun 12 " Last Change: 2017 Jun 20
" Listen very carefully, I will say this only once " Listen very carefully, I will say this only once
if exists("did_load_filetypes") if exists("did_load_filetypes")
@ -48,6 +48,9 @@ func! s:StarSetf(ft)
endif endif
endfunc endfunc
" Vim help file
au BufNewFile,BufRead $VIMRUNTIME/doc/*.txt setf help
" Abaqus or Trasys " Abaqus or Trasys
au BufNewFile,BufRead *.inp call s:Check_inp() au BufNewFile,BufRead *.inp call s:Check_inp()

View File

@ -6832,8 +6832,9 @@ fix_help_buffer(void)
char_u *rt; char_u *rt;
int mustfree; int mustfree;
/* set filetype to "help". */ /* Set filetype to "help" if still needed. */
set_option_value((char_u *)"ft", 0L, (char_u *)"help", OPT_LOCAL); if (STRCMP(curbuf->b_p_ft, "help") != 0)
set_option_value((char_u *)"ft", 0L, (char_u *)"help", OPT_LOCAL);
#ifdef FEAT_SYN_HL #ifdef FEAT_SYN_HL
if (!syntax_present(curwin)) if (!syntax_present(curwin))

View File

@ -6009,6 +6009,9 @@ did_set_string_option(
/* set when changing an option that only requires a redraw in the GUI */ /* set when changing an option that only requires a redraw in the GUI */
int redraw_gui_only = FALSE; int redraw_gui_only = FALSE;
#endif #endif
#ifdef FEAT_AUTOCMD
int ft_changed = FALSE;
#endif
/* Get the global option to compare with, otherwise we would have to check /* Get the global option to compare with, otherwise we would have to check
* two values for all local options. */ * two values for all local options. */
@ -7418,6 +7421,8 @@ did_set_string_option(
{ {
if (!valid_filetype(*varp)) if (!valid_filetype(*varp))
errmsg = e_invarg; errmsg = e_invarg;
else
ft_changed = STRCMP(oldval, *varp) != 0;
} }
#endif #endif
@ -7531,10 +7536,15 @@ did_set_string_option(
# endif # endif
else if (varp == &(curbuf->b_p_ft)) else if (varp == &(curbuf->b_p_ft))
{ {
/* 'filetype' is set, trigger the FileType autocommand */ /* 'filetype' is set, trigger the FileType autocommand.
did_filetype = TRUE; * Skip this when called from a modeline and the filetype was
apply_autocmds(EVENT_FILETYPE, curbuf->b_p_ft, * already set to this value. */
if (!(opt_flags & OPT_MODELINE) || ft_changed)
{
did_filetype = TRUE;
apply_autocmds(EVENT_FILETYPE, curbuf->b_p_ft,
curbuf->b_fname, TRUE, curbuf); curbuf->b_fname, TRUE, curbuf);
}
} }
#endif #endif
#ifdef FEAT_SPELL #ifdef FEAT_SPELL

View File

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