aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2022-05-05 12:33:35 +0200
committerbfredl <bjorn.linse@gmail.com>2022-06-11 10:25:59 +0200
commite92fcdbab204f49c542ba4cf330aba1258fb2968 (patch)
treed704fb21c1a3d47e82703edda1fc0102bff249eb
parent2b539d6fdf985d765ce03964be320c69d02b376c (diff)
downloadrneovim-e92fcdbab204f49c542ba4cf330aba1258fb2968.tar.gz
rneovim-e92fcdbab204f49c542ba4cf330aba1258fb2968.tar.bz2
rneovim-e92fcdbab204f49c542ba4cf330aba1258fb2968.zip
feat(api): nvim__get_runtime do_source
-rw-r--r--src/nvim/api/keysets.lua1
-rw-r--r--src/nvim/api/vim.c17
2 files changed, 17 insertions, 1 deletions
diff --git a/src/nvim/api/keysets.lua b/src/nvim/api/keysets.lua
index 881a83e606..70e91dd844 100644
--- a/src/nvim/api/keysets.lua
+++ b/src/nvim/api/keysets.lua
@@ -75,6 +75,7 @@ return {
};
runtime = {
"is_lua";
+ "do_source";
};
eval_statusline = {
"winid";
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c
index 9430a37d27..1e44250ec3 100644
--- a/src/nvim/api/vim.c
+++ b/src/nvim/api/vim.c
@@ -562,10 +562,25 @@ ArrayOf(String) nvim__get_runtime(Array pat, Boolean all, Dict(runtime) *opts, E
FUNC_API_FAST
{
bool is_lua = api_object_to_bool(opts->is_lua, "is_lua", false, err);
+ bool source = api_object_to_bool(opts->do_source, "do_source", false, err);
+ if (source && !nlua_is_deferred_safe()) {
+ api_set_error(err, kErrorTypeValidation, "'do_source' cannot be used in fast callback");
+ }
+
if (ERROR_SET(err)) {
return (Array)ARRAY_DICT_INIT;
}
- return runtime_get_named(is_lua, pat, all);
+
+ ArrayOf(String) res = runtime_get_named(is_lua, pat, all);
+
+ if (source) {
+ for (size_t i = 0; i < res.size; i++) {
+ String name = res.items[i].data.string;
+ (void)do_source(name.data, false, DOSO_NONE);
+ }
+ }
+
+ return res;
}
/// Changes the global working directory.