Mercurial > vim
diff src/ex_cmds2.c @ 8526:981cc3bef9f3 v7.4.1553
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Mar 12 22:47:14 2016 +0100
patch 7.4.1553
Problem: ":runtime" does not use 'packpath'.
Solution: Add "what" argument.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 12 Mar 2016 23:00:04 +0100 |
parents | 2f57bbe870ea |
children | 63dc856bd13d |
line wrap: on
line diff
--- a/src/ex_cmds2.c +++ b/src/ex_cmds2.c @@ -2901,12 +2901,38 @@ ex_compiler(exarg_T *eap) #endif /* - * ":runtime {name}" + * ":runtime [what] {name}" */ void 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 @@ -3067,15 +3093,16 @@ do_in_runtimepath( void (*callback)(char_u *fname, void *ck), void *cookie) { - int done; + int done = FAIL; char_u *s; int len; char *start_dir = "pack/*/start/*/%s"; char *opt_dir = "pack/*/opt/*/%s"; - done = do_in_path(p_rtp, name, flags, callback, cookie); - - if (done == FAIL && (flags & DIP_START)) + if ((flags & DIP_NORTP) == 0) + done = do_in_path(p_rtp, name, flags, callback, cookie); + + if ((done == FAIL || (flags & DIP_ALL)) && (flags & DIP_START)) { len = STRLEN(start_dir) + STRLEN(name); s = alloc(len); @@ -3086,7 +3113,7 @@ do_in_runtimepath( vim_free(s); } - if (done == FAIL && (flags & DIP_OPT)) + if ((done == FAIL || (flags & DIP_ALL)) && (flags & DIP_OPT)) { len = STRLEN(opt_dir) + STRLEN(name); s = alloc(len);