diff options
-rw-r--r-- | src/nvim/api/keysets.lua | 1 | ||||
-rw-r--r-- | src/nvim/api/vim.c | 17 |
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. |