changeset 23821:bfc1ae959d9d v8.2.2452

patch 8.2.2452: no completion for the 'filetype' option Commit: https://github.com/vim/vim/commit/d5e8c92816f35ea1a9298084238a08f35958baa6 Author: Bram Moolenaar <Bram@vim.org> 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)
author Bram Moolenaar <Bram@vim.org>
date Tue, 02 Feb 2021 21:15:03 +0100
parents 8460878018c0
children b4e8bcf41ad8
files src/option.c src/optiondefs.h src/testdir/test_options.vim src/version.c
diffstat 4 files changed, 15 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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;
--- 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},
--- a/src/testdir/test_options.vim
+++ b/src/testdir/test_options.vim
@@ -332,6 +332,12 @@ func Test_set_completion()
   call feedkeys(":set key=\<Tab>\<C-B>\"\<CR>", 'xt')
   call assert_equal('"set key=*****', @:)
   set key=
+
+  " Expand values for 'filetype'
+  call feedkeys(":set filetype=sshdconfi\<Tab>\<C-B>\"\<CR>", 'xt')
+  call assert_equal('"set filetype=sshdconfig', @:)
+  call feedkeys(":set filetype=a\<C-A>\<C-B>\"\<CR>", 'xt')
+  call assert_equal('"set filetype=' .. getcompletion('a*', 'filetype')->join(), @:)
 endfunc
 
 func Test_set_errors()
--- 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,