aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/extreg.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/extreg.c')
-rw-r--r--src/nvim/extreg.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/nvim/extreg.c b/src/nvim/extreg.c
index b416ac8111..455a8e24e5 100644
--- a/src/nvim/extreg.c
+++ b/src/nvim/extreg.c
@@ -855,3 +855,36 @@ int nlua_extregs_get_provider(lua_State *lstate)
lua_pushlightuserdata(lstate, (void *)prov);
return 1;
}
+
+/// Lua: vim._extregs.get_provider_names()
+/// Returns a table of all registered extreg provider names
+int nlua_extregs_get_provider_names(lua_State *lstate)
+{
+ hash_lock(&extreg_providers);
+
+ // First, count the registered providers
+ size_t count = 0;
+ HASHTAB_ITER(&extreg_providers, hi, {
+ extreg_provider_t *prov = HASH_ITEM_TO_EXTREG_PROVIDER(hi);
+ if (prov->registered) {
+ count++;
+ }
+ });
+
+ // Create table with pre-allocated size
+ lua_createtable(lstate, (int)count, 0);
+
+ // Now fill the table
+ size_t idx = 1;
+ HASHTAB_ITER(&extreg_providers, hi, {
+ extreg_provider_t *prov = HASH_ITEM_TO_EXTREG_PROVIDER(hi);
+ if (prov->registered && idx <= count) {
+ lua_pushstring(lstate, prov->name);
+ lua_rawseti(lstate, -2, (int)idx++);
+ }
+ });
+
+ hash_unlock(&extreg_providers);
+
+ return 1; // return the table
+}