startup: load files from &packpath . '/start/{pluginname}'

Quoting the existing docs:

    Packages are loaded.  These are plugins, as above [&runtimepath], but
    found in the "start" directory of each entry in 'packpath'.  Every
    plugin directory found is added in 'runtimepath' and then the plugins
    are sourced.

Also tj didn't think I could do it.
This commit is contained in:
Björn Linse
2020-11-18 20:02:44 +01:00
parent 569e5c86bf
commit a119fe15da
5 changed files with 71 additions and 3 deletions

View File

@@ -2551,6 +2551,17 @@ int do_in_path_and_pp(char_u *path, char_u *name, int flags,
done = do_in_path(p_pp, s, flags, callback, cookie);
xfree(s);
if (done == FAIL|| (flags & DIP_ALL)) {
start_dir = "start/*/%s"; // NOLINT
len = STRLEN(start_dir) + STRLEN(name);
s = xmallocz(len);
vim_snprintf((char *)s, len, start_dir, name);
done = do_in_path(p_pp, s, flags, callback, cookie);
xfree(s);
}
}
if ((done == FAIL || (flags & DIP_ALL)) && (flags & DIP_OPT)) {
@@ -2562,6 +2573,17 @@ int do_in_path_and_pp(char_u *path, char_u *name, int flags,
done = do_in_path(p_pp, s, flags, callback, cookie);
xfree(s);
if (done == FAIL || (flags & DIP_ALL)) {
opt_dir = "opt/*/%s"; // NOLINT
len = STRLEN(opt_dir) + STRLEN(name);
s = xmallocz(len);
vim_snprintf((char *)s, len, opt_dir, name);
done = do_in_path(p_pp, s, flags, callback, cookie);
xfree(s);
}
}
return done;
@@ -2822,6 +2844,8 @@ void add_pack_start_dirs(void)
{
do_in_path(p_pp, (char_u *)"pack/*/start/*", DIP_ALL + DIP_DIR, // NOLINT
add_pack_plugin, &APP_ADD_DIR);
do_in_path(p_pp, (char_u *)"start/*", DIP_ALL + DIP_DIR, // NOLINT
add_pack_plugin, &APP_ADD_DIR);
}
/// Load plugins from all packages in the "start" directory.
@@ -2830,6 +2854,8 @@ void load_start_packages(void)
did_source_packages = true;
do_in_path(p_pp, (char_u *)"pack/*/start/*", DIP_ALL + DIP_DIR, // NOLINT
add_pack_plugin, &APP_LOAD);
do_in_path(p_pp, (char_u *)"start/*", DIP_ALL + DIP_DIR, // NOLINT
add_pack_plugin, &APP_LOAD);
}
// ":packloadall"