# HG changeset patch # User Bram Moolenaar # Date 1612296903 -3600 # Node ID bfc1ae959d9d7cac63ea0c4f0ef344a9e6797e13 # Parent 8460878018c06d7627e35687761dbd6e22f16d5f patch 8.2.2452: no completion for the 'filetype' option Commit: https://github.com/vim/vim/commit/d5e8c92816f35ea1a9298084238a08f35958baa6 Author: Bram Moolenaar Date: Tue Feb 2 21:10:01 2021 +0100 patch 8.2.2452: no completion for the 'filetype' option Problem: No completion for the 'filetype' option. Solution: Add filetype completion. (Martin Tournoij, closes https://github.com/vim/vim/issues/7747) diff --git a/src/option.c b/src/option.c --- a/src/option.c +++ b/src/option.c @@ -2419,6 +2419,8 @@ was_set_insecurely(char_u *opt, int opt_ /* * Get a pointer to the flags used for the P_INSECURE flag of option * "opt_idx". For some local options a local flags field is used. + * NOTE: Caller must make sure that "curwin" is set to the window from which + * the option is used. */ static long_u * insecure_flag(int opt_idx, int opt_flags) @@ -6209,6 +6211,10 @@ set_context_in_set_cmd( else xp->xp_backslash = XP_BS_ONE; } + else if (p == (char_u *)&p_ft) + { + xp->xp_context = EXPAND_FILETYPE; + } else { xp->xp_context = EXPAND_FILES; diff --git a/src/optiondefs.h b/src/optiondefs.h --- a/src/optiondefs.h +++ b/src/optiondefs.h @@ -946,7 +946,7 @@ static struct vimoption options[] = (char_u *)FALSE, #endif (char_u *)0L} SCTX_INIT}, - {"filetype", "ft", P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME, + {"filetype", "ft", P_STRING|P_EXPAND|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME, (char_u *)&p_ft, PV_FT, {(char_u *)"", (char_u *)0L} SCTX_INIT}, diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim --- a/src/testdir/test_options.vim +++ b/src/testdir/test_options.vim @@ -332,6 +332,12 @@ func Test_set_completion() call feedkeys(":set key=\\\"\", 'xt') call assert_equal('"set key=*****', @:) set key= + + " Expand values for 'filetype' + call feedkeys(":set filetype=sshdconfi\\\"\", 'xt') + call assert_equal('"set filetype=sshdconfig', @:) + call feedkeys(":set filetype=a\\\"\", 'xt') + call assert_equal('"set filetype=' .. getcompletion('a*', 'filetype')->join(), @:) endfunc func Test_set_errors() diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2452, +/**/ 2451, /**/ 2450,