diff options
| author | Josh Rahm <joshuarahm@gmail.com> | 2026-10-18 18:43:26 -0600 |
|---|---|---|
| committer | Josh Rahm <joshuarahm@gmail.com> | 2026-10-18 18:43:26 -0600 |
| commit | 41be894eb2e8d02c052ad4e85962550c54ae4589 (patch) | |
| tree | 637542858b010b99eb0cfb7cdde8d9cdce057630 /src/nvim/extreg.c | |
| parent | e4a17c62aecdad0c90a08d43ce773316d27404f7 (diff) | |
| download | rneovim-extregs.tar.gz rneovim-extregs.tar.bz2 rneovim-extregs.zip | |
[extregs] implement tab completion for ~ menu.extregs
Diffstat (limited to 'src/nvim/extreg.c')
| -rw-r--r-- | src/nvim/extreg.c | 33 |
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 +} |