@@ -3052,6 +3052,25 @@ do_in_runtimepath(
30523052 return do_in_path (p_rtp , name , all , callback , cookie );
30533053}
30543054
3055+ /*
3056+ * Source filetype detection scripts, if filetype.vim was already done.
3057+ */
3058+ static void
3059+ may_do_filetypes (char_u * pat )
3060+ {
3061+ char_u * cmd = vim_strsave ((char_u * )"did_load_filetypes" );
3062+
3063+ /* If runtime/filetype.vim wasn't loaded yet, the scripts will be found
3064+ * when it loads. */
3065+ if (cmd != NULL && eval_to_number (cmd ) > 0 )
3066+ {
3067+ do_cmdline_cmd ((char_u * )"augroup filetypedetect" );
3068+ source_runtime (pat , TRUE);
3069+ do_cmdline_cmd ((char_u * )"augroup END" );
3070+ }
3071+ vim_free (cmd );
3072+ }
3073+
30553074 static void
30563075source_pack_plugin (char_u * fname , void * cookie UNUSED )
30573076{
@@ -3122,6 +3141,7 @@ source_packages()
31223141{
31233142 do_in_path (p_pp , (char_u * )"pack/*/ever/*/plugin/*.vim" ,
31243143 TRUE, source_pack_plugin , NULL );
3144+ may_do_filetypes ((char_u * )"pack/*/ever/*/ftdetect/*.vim" );
31253145}
31263146
31273147/*
@@ -3130,16 +3150,21 @@ source_packages()
31303150 void
31313151ex_loadplugin (exarg_T * eap )
31323152{
3133- static char * pattern = "pack/*/opt/%s/plugin/*.vim" ;
3153+ static char * plugpat = "pack/*/opt/%s/plugin/*.vim" ;
3154+ static char * ftpat = "pack/*/opt/%s/ftdetect/*.vim" ;
31343155 int len ;
31353156 char * pat ;
31363157
3137- len = (int )STRLEN (pattern ) + (int )STRLEN (eap -> arg );
3158+ len = (int )STRLEN (ftpat ) + (int )STRLEN (eap -> arg );
31383159 pat = (char * )alloc (len );
31393160 if (pat == NULL )
31403161 return ;
3141- vim_snprintf (pat , len , pattern , eap -> arg );
3162+ vim_snprintf (pat , len , plugpat , eap -> arg );
31423163 do_in_path (p_pp , (char_u * )pat , TRUE, source_pack_plugin , NULL );
3164+
3165+ vim_snprintf (pat , len , ftpat , eap -> arg );
3166+ may_do_filetypes ((char_u * )pat );
3167+
31433168 vim_free (pat );
31443169}
31453170
0 commit comments