patch 7.4.1553
Problem: ":runtime" does not use 'packpath'. Solution: Add "what" argument.
This commit is contained in:
		| @ -182,10 +182,12 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|. | |||||||
| 			{not in Vi} | 			{not in Vi} | ||||||
|  |  | ||||||
| 							*:ru* *:runtime* | 							*:ru* *:runtime* | ||||||
| :ru[ntime][!] {file} .. | :ru[ntime][!] [where] {file} .. | ||||||
| 			Read Ex commands from {file} in each directory given | 			Read Ex commands from {file} in each directory given | ||||||
| 			by 'runtimepath'.  There is no error for non-existing | 			by 'runtimepath' and/or 'packpath'.  There is no error | ||||||
| 			files.  Example: > | 			for non-existing files. | ||||||
|  | 			 | ||||||
|  | 			Example: > | ||||||
| 				:runtime syntax/c.vim | 				:runtime syntax/c.vim | ||||||
|  |  | ||||||
| <			There can be multiple {file} arguments, separated by | <			There can be multiple {file} arguments, separated by | ||||||
| @ -199,6 +201,15 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|. | |||||||
| 			When it is not included only the first found file is | 			When it is not included only the first found file is | ||||||
| 			sourced. | 			sourced. | ||||||
|  |  | ||||||
|  | 			When [where] is omitted only 'runtimepath' is used. | ||||||
|  | 			Other values: | ||||||
|  | 				START	search under "start" in 'packpath' | ||||||
|  | 				OPT 	search under "opt" in 'packpath' | ||||||
|  | 				PACK	search under "start" and "opt" in | ||||||
|  | 					'packpath' | ||||||
|  | 				ALL	first use 'runtimepath', then search | ||||||
|  | 					under "start" and "opt" in 'packpath' | ||||||
|  |  | ||||||
| 			When {file} contains wildcards it is expanded to all | 			When {file} contains wildcards it is expanded to all | ||||||
| 			matching files.  Example: > | 			matching files.  Example: > | ||||||
| 				:runtime! plugin/*.vim | 				:runtime! plugin/*.vim | ||||||
| @ -238,6 +249,16 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|. | |||||||
|  |  | ||||||
| 			Also see |pack-add|. | 			Also see |pack-add|. | ||||||
|  |  | ||||||
|  | :packloadall[!]		Load all packages in the "start" directories under | ||||||
|  | 			'packpath'.  The directories found are added to | ||||||
|  | 			'runtimepath'. | ||||||
|  | 			This normally done during startup, after loading your | ||||||
|  | 			.vimrc file.  With this command it can be done | ||||||
|  | 			earlier. | ||||||
|  | 			Packages will be loaded only once.  After this command | ||||||
|  | 			it won't happen again.  When the optional ! is added | ||||||
|  | 			this command will load packages even when done before. | ||||||
|  | 			See |packages|. | ||||||
|  |  | ||||||
| :scripte[ncoding] [encoding]		*:scripte* *:scriptencoding* *E167* | :scripte[ncoding] [encoding]		*:scripte* *:scriptencoding* *E167* | ||||||
| 			Specify the character encoding used in the script. | 			Specify the character encoding used in the script. | ||||||
| @ -461,8 +482,13 @@ Note that the files under "pack/foo/opt" or not loaded automatically, only the | |||||||
| ones under "pack/foo/start".  See |pack-add| below for how the "opt" directory | ones under "pack/foo/start".  See |pack-add| below for how the "opt" directory | ||||||
| is used. | is used. | ||||||
|  |  | ||||||
| Loading packages will not happen if loading plugins is disabled, see | Loading packages automatically will not happen if loading plugins is disabled, | ||||||
| |load-plugins|. | see |load-plugins|. | ||||||
|  |  | ||||||
|  | To load packages earlier, so that 'runtimepath' gets updated: > | ||||||
|  | 	:packloadall | ||||||
|  | This also works when loading plugins is disabled.  The automatic loading will | ||||||
|  | only happen once. | ||||||
|  |  | ||||||
|  |  | ||||||
| Using a single plugin and loading it automatically ~ | Using a single plugin and loading it automatically ~ | ||||||
|  | |||||||
| @ -2901,12 +2901,38 @@ ex_compiler(exarg_T *eap) | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * ":runtime {name}" |  * ":runtime [what] {name}" | ||||||
|  */ |  */ | ||||||
|     void |     void | ||||||
| ex_runtime(exarg_T *eap) | ex_runtime(exarg_T *eap) | ||||||
| { | { | ||||||
|     source_runtime(eap->arg, eap->forceit ? DIP_ALL : 0); |     char_u  *arg = eap->arg; | ||||||
|  |     char_u  *p = skiptowhite(arg); | ||||||
|  |     int	    len = (int)(p - arg); | ||||||
|  |     int	    flags = eap->forceit ? DIP_ALL : 0; | ||||||
|  |  | ||||||
|  |     if (STRNCMP(arg, "START", len) == 0) | ||||||
|  |     { | ||||||
|  | 	flags += DIP_START + DIP_NORTP; | ||||||
|  | 	arg = skipwhite(arg + len); | ||||||
|  |     } | ||||||
|  |     else if (STRNCMP(arg, "OPT", len) == 0) | ||||||
|  |     { | ||||||
|  | 	flags += DIP_OPT + DIP_NORTP; | ||||||
|  | 	arg = skipwhite(arg + len); | ||||||
|  |     } | ||||||
|  |     else if (STRNCMP(arg, "PACK", len) == 0) | ||||||
|  |     { | ||||||
|  | 	flags += DIP_START + DIP_OPT + DIP_NORTP; | ||||||
|  | 	arg = skipwhite(arg + len); | ||||||
|  |     } | ||||||
|  |     else if (STRNCMP(arg, "ALL", len) == 0) | ||||||
|  |     { | ||||||
|  | 	flags += DIP_START + DIP_OPT; | ||||||
|  | 	arg = skipwhite(arg + len); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     source_runtime(arg, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
|     static void |     static void | ||||||
| @ -3067,15 +3093,16 @@ do_in_runtimepath( | |||||||
|     void	(*callback)(char_u *fname, void *ck), |     void	(*callback)(char_u *fname, void *ck), | ||||||
|     void	*cookie) |     void	*cookie) | ||||||
| { | { | ||||||
|     int		done; |     int		done = FAIL; | ||||||
|     char_u	*s; |     char_u	*s; | ||||||
|     int		len; |     int		len; | ||||||
|     char	*start_dir = "pack/*/start/*/%s"; |     char	*start_dir = "pack/*/start/*/%s"; | ||||||
|     char	*opt_dir = "pack/*/opt/*/%s"; |     char	*opt_dir = "pack/*/opt/*/%s"; | ||||||
|  |  | ||||||
|     done = do_in_path(p_rtp, name, flags, callback, cookie); |     if ((flags & DIP_NORTP) == 0) | ||||||
|  | 	done = do_in_path(p_rtp, name, flags, callback, cookie); | ||||||
|  |  | ||||||
|     if (done == FAIL && (flags & DIP_START)) |     if ((done == FAIL || (flags & DIP_ALL)) && (flags & DIP_START)) | ||||||
|     { |     { | ||||||
| 	len = STRLEN(start_dir) + STRLEN(name); | 	len = STRLEN(start_dir) + STRLEN(name); | ||||||
| 	s = alloc(len); | 	s = alloc(len); | ||||||
| @ -3086,7 +3113,7 @@ do_in_runtimepath( | |||||||
| 	vim_free(s); | 	vim_free(s); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (done == FAIL && (flags & DIP_OPT)) |     if ((done == FAIL || (flags & DIP_ALL)) && (flags & DIP_OPT)) | ||||||
|     { |     { | ||||||
| 	len = STRLEN(opt_dir) + STRLEN(name); | 	len = STRLEN(opt_dir) + STRLEN(name); | ||||||
| 	s = alloc(len); | 	s = alloc(len); | ||||||
|  | |||||||
| @ -134,3 +134,50 @@ func Test_colorscheme() | |||||||
|   colorscheme three |   colorscheme three | ||||||
|   call assert_equal(1, g:found_three) |   call assert_equal(1, g:found_three) | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
|  | func Test_runtime() | ||||||
|  |   let rundir = &packpath . '/runtime/extra' | ||||||
|  |   let startdir = &packpath . '/pack/mine/start/foo/extra' | ||||||
|  |   let optdir = &packpath . '/pack/mine/opt/bar/extra' | ||||||
|  |   call mkdir(rundir, 'p') | ||||||
|  |   call mkdir(startdir, 'p') | ||||||
|  |   call mkdir(optdir, 'p') | ||||||
|  |   call writefile(['let g:sequence .= "run"'], rundir . '/bar.vim') | ||||||
|  |   call writefile(['let g:sequence .= "start"'], startdir . '/bar.vim') | ||||||
|  |   call writefile(['let g:sequence .= "foostart"'], startdir . '/foo.vim') | ||||||
|  |   call writefile(['let g:sequence .= "opt"'], optdir . '/bar.vim') | ||||||
|  |   call writefile(['let g:sequence .= "xxxopt"'], optdir . '/xxx.vim') | ||||||
|  |   exe 'set rtp=' . &packpath . '/runtime' | ||||||
|  |  | ||||||
|  |   let g:sequence = '' | ||||||
|  |   runtime extra/bar.vim | ||||||
|  |   call assert_equal('run', g:sequence) | ||||||
|  |   let g:sequence = '' | ||||||
|  |   runtime START extra/bar.vim | ||||||
|  |   call assert_equal('start', g:sequence) | ||||||
|  |   let g:sequence = '' | ||||||
|  |   runtime OPT extra/bar.vim | ||||||
|  |   call assert_equal('opt', g:sequence) | ||||||
|  |   let g:sequence = '' | ||||||
|  |   runtime PACK extra/bar.vim | ||||||
|  |   call assert_equal('start', g:sequence) | ||||||
|  |   let g:sequence = '' | ||||||
|  |   runtime! PACK extra/bar.vim | ||||||
|  |   call assert_equal('startopt', g:sequence) | ||||||
|  |   let g:sequence = '' | ||||||
|  |   runtime PACK extra/xxx.vim | ||||||
|  |   call assert_equal('xxxopt', g:sequence) | ||||||
|  |  | ||||||
|  |   let g:sequence = '' | ||||||
|  |   runtime ALL extra/bar.vim | ||||||
|  |   call assert_equal('run', g:sequence) | ||||||
|  |   let g:sequence = '' | ||||||
|  |   runtime ALL extra/foo.vim | ||||||
|  |   call assert_equal('foostart', g:sequence) | ||||||
|  |   let g:sequence = '' | ||||||
|  |   runtime! ALL extra/xxx.vim | ||||||
|  |   call assert_equal('xxxopt', g:sequence) | ||||||
|  |   let g:sequence = '' | ||||||
|  |   runtime! ALL extra/bar.vim | ||||||
|  |   call assert_equal('runstartopt', g:sequence) | ||||||
|  | endfunc | ||||||
|  | |||||||
| @ -743,6 +743,8 @@ static char *(features[]) = | |||||||
|  |  | ||||||
| static int included_patches[] = | static int included_patches[] = | ||||||
| {   /* Add new patch number below this line */ | {   /* Add new patch number below this line */ | ||||||
|  | /**/ | ||||||
|  |     1553, | ||||||
| /**/ | /**/ | ||||||
|     1552, |     1552, | ||||||
| /**/ | /**/ | ||||||
|  | |||||||
| @ -2294,5 +2294,6 @@ int vim_main2(int argc, char **argv); | |||||||
| #define DIP_ERR	    0x04	/* give an error message when none found. */ | #define DIP_ERR	    0x04	/* give an error message when none found. */ | ||||||
| #define DIP_START   0x08	/* also use "start" directory in 'packpath' */ | #define DIP_START   0x08	/* also use "start" directory in 'packpath' */ | ||||||
| #define DIP_OPT	    0x10	/* also use "opt" directory in 'packpath' */ | #define DIP_OPT	    0x10	/* also use "opt" directory in 'packpath' */ | ||||||
|  | #define DIP_NORTP   0x20	/* do not use 'runtimepath' */ | ||||||
|  |  | ||||||
| #endif /* VIM__H */ | #endif /* VIM__H */ | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user