@@ -2901,12 +2901,38 @@ ex_compiler(exarg_T *eap)
2901
2901
#endif
2902
2902
2903
2903
/*
2904
- * ":runtime {name}"
2904
+ * ":runtime [what] {name}"
2905
2905
*/
2906
2906
void
2907
2907
ex_runtime (exarg_T * eap )
2908
2908
{
2909
- source_runtime (eap -> arg , eap -> forceit ? DIP_ALL : 0 );
2909
+ char_u * arg = eap -> arg ;
2910
+ char_u * p = skiptowhite (arg );
2911
+ int len = (int )(p - arg );
2912
+ int flags = eap -> forceit ? DIP_ALL : 0 ;
2913
+
2914
+ if (STRNCMP (arg , "START" , len ) == 0 )
2915
+ {
2916
+ flags += DIP_START + DIP_NORTP ;
2917
+ arg = skipwhite (arg + len );
2918
+ }
2919
+ else if (STRNCMP (arg , "OPT" , len ) == 0 )
2920
+ {
2921
+ flags += DIP_OPT + DIP_NORTP ;
2922
+ arg = skipwhite (arg + len );
2923
+ }
2924
+ else if (STRNCMP (arg , "PACK" , len ) == 0 )
2925
+ {
2926
+ flags += DIP_START + DIP_OPT + DIP_NORTP ;
2927
+ arg = skipwhite (arg + len );
2928
+ }
2929
+ else if (STRNCMP (arg , "ALL" , len ) == 0 )
2930
+ {
2931
+ flags += DIP_START + DIP_OPT ;
2932
+ arg = skipwhite (arg + len );
2933
+ }
2934
+
2935
+ source_runtime (arg , flags );
2910
2936
}
2911
2937
2912
2938
static void
@@ -3067,15 +3093,16 @@ do_in_runtimepath(
3067
3093
void (* callback )(char_u * fname , void * ck ),
3068
3094
void * cookie )
3069
3095
{
3070
- int done ;
3096
+ int done = FAIL ;
3071
3097
char_u * s ;
3072
3098
int len ;
3073
3099
char * start_dir = "pack/*/start/*/%s" ;
3074
3100
char * opt_dir = "pack/*/opt/*/%s" ;
3075
3101
3076
- done = do_in_path (p_rtp , name , flags , callback , cookie );
3102
+ if ((flags & DIP_NORTP ) == 0 )
3103
+ done = do_in_path (p_rtp , name , flags , callback , cookie );
3077
3104
3078
- if (done == FAIL && (flags & DIP_START ))
3105
+ if (( done == FAIL || ( flags & DIP_ALL )) && (flags & DIP_START ))
3079
3106
{
3080
3107
len = STRLEN (start_dir ) + STRLEN (name );
3081
3108
s = alloc (len );
@@ -3086,7 +3113,7 @@ do_in_runtimepath(
3086
3113
vim_free (s );
3087
3114
}
3088
3115
3089
- if (done == FAIL && (flags & DIP_OPT ))
3116
+ if (( done == FAIL || ( flags & DIP_ALL )) && (flags & DIP_OPT ))
3090
3117
{
3091
3118
len = STRLEN (opt_dir ) + STRLEN (name );
3092
3119
s = alloc (len );
0 commit comments