Skip to content

Commit

Permalink
patch 8.0.0649: when opening a help file the filetype is set several …
Browse files Browse the repository at this point in the history
…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.
  • Loading branch information
brammool committed Jun 22, 2017
1 parent fadacf0 commit 9049298
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 6 deletions.
5 changes: 4 additions & 1 deletion runtime/filetype.vim
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
" Vim support file to detect file types
"
" 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
if exists("did_load_filetypes")
Expand Down Expand Up @@ -48,6 +48,9 @@ func! s:StarSetf(ft)
endif
endfunc

" Vim help file
au BufNewFile,BufRead $VIMRUNTIME/doc/*.txt setf help

" Abaqus or Trasys
au BufNewFile,BufRead *.inp call s:Check_inp()

Expand Down
5 changes: 3 additions & 2 deletions src/ex_cmds.c
Original file line number Diff line number Diff line change
Expand Up @@ -6832,8 +6832,9 @@ fix_help_buffer(void)
char_u *rt;
int mustfree;

/* set filetype to "help". */
set_option_value((char_u *)"ft", 0L, (char_u *)"help", OPT_LOCAL);
/* Set filetype to "help" if still needed. */
if (STRCMP(curbuf->b_p_ft, "help") != 0)
set_option_value((char_u *)"ft", 0L, (char_u *)"help", OPT_LOCAL);

#ifdef FEAT_SYN_HL
if (!syntax_present(curwin))
Expand Down
16 changes: 13 additions & 3 deletions src/option.c
Original file line number Diff line number Diff line change
Expand Up @@ -6009,6 +6009,9 @@ did_set_string_option(
/* set when changing an option that only requires a redraw in the GUI */
int redraw_gui_only = FALSE;
#endif
#ifdef FEAT_AUTOCMD
int ft_changed = FALSE;
#endif

/* Get the global option to compare with, otherwise we would have to check
* two values for all local options. */
Expand Down Expand Up @@ -7418,6 +7421,8 @@ did_set_string_option(
{
if (!valid_filetype(*varp))
errmsg = e_invarg;
else
ft_changed = STRCMP(oldval, *varp) != 0;
}
#endif

Expand Down Expand Up @@ -7531,10 +7536,15 @@ did_set_string_option(
# endif
else if (varp == &(curbuf->b_p_ft))
{
/* 'filetype' is set, trigger the FileType autocommand */
did_filetype = TRUE;
apply_autocmds(EVENT_FILETYPE, curbuf->b_p_ft,
/* 'filetype' is set, trigger the FileType autocommand.
* Skip this when called from a modeline and the filetype was
* 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);
}
}
#endif
#ifdef FEAT_SPELL
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Original file line number Diff line number Diff line change
Expand Up @@ -764,6 +764,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
649,
/**/
648,
/**/
Expand Down

0 comments on commit 9049298

Please sign in to comment.