diff options
| author | Josh Rahm <joshuarahm@gmail.com> | 2026-10-13 22:11:33 -0600 |
|---|---|---|
| committer | Josh Rahm <joshuarahm@gmail.com> | 2026-10-18 00:28:27 -0600 |
| commit | 22d8bf3861234480aa6afed90a1faaaac3d49520 (patch) | |
| tree | 097100fc5481f0a614c42f5409ed2ec1fa6d8b17 /src/nvim/lua/executor.c | |
| parent | 0851e7dabed9fc9c019e22088029f36e9f3ec3e3 (diff) | |
| download | rneovim-22d8bf3861234480aa6afed90a1faaaac3d49520.tar.gz rneovim-22d8bf3861234480aa6afed90a1faaaac3d49520.tar.bz2 rneovim-22d8bf3861234480aa6afed90a1faaaac3d49520.zip | |
[feat] extregisters
Implements "extended registers"
Extended registers provide access to a separate namespace of registers
backed by custom lua callback functions.
A new special register ("~) is introduced, which prompts the user for
the name of an extregistr to yank or paste from.
This enables file-backed or cloud-synced or other arbitrary register
behavior.
One can now use:
`"~file_extreg<cr>yy`
to yank into the "file_extreg" register.
AI-assisted: Qwen3-Coder
Diffstat (limited to 'src/nvim/lua/executor.c')
| -rw-r--r-- | src/nvim/lua/executor.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/nvim/lua/executor.c b/src/nvim/lua/executor.c index d076e53062..593cb8ebe5 100644 --- a/src/nvim/lua/executor.c +++ b/src/nvim/lua/executor.c @@ -17,6 +17,7 @@ #include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" #include "nvim/api/ui.h" +#include "nvim/extreg.h" #include "nvim/ascii_defs.h" #include "nvim/buffer_defs.h" #include "nvim/change.h" @@ -758,6 +759,26 @@ static void nlua_common_vim_init(lua_State *lstate, bool is_thread) lua_setfield(lstate, LUA_REGISTRYINDEX, "mpack.empty_dict"); lua_setfield(lstate, -2, "_empty_dict_mt"); + // vim._extregs + lua_createtable(lstate, 0, 7); + lua_pushcfunction(lstate, &nlua_extregs_register); + lua_setfield(lstate, -2, "register"); + lua_pushcfunction(lstate, &nlua_extregs_unregister); + lua_setfield(lstate, -2, "unregister"); + lua_pushcfunction(lstate, &nlua_extregs_bind); + lua_setfield(lstate, -2, "bind"); + lua_pushcfunction(lstate, &nlua_extregs_unbind); + lua_setfield(lstate, -2, "unbind"); + lua_pushcfunction(lstate, &nlua_extregs_is_alias); + lua_setfield(lstate, -2, "is_alias"); + lua_pushcfunction(lstate, &nlua_extregs_get_provider_id); + lua_setfield(lstate, -2, "get_provider_id"); + lua_pushcfunction(lstate, &nlua_extregs_get_provider_by_id); + lua_setfield(lstate, -2, "get_provider_by_id"); + lua_pushcfunction(lstate, &nlua_extregs_get_provider); + lua_setfield(lstate, -2, "get_provider"); + lua_setfield(lstate, -2, "_extregs"); + // vim.uv if (is_thread) { luv_set_callback(lstate, nlua_luv_thread_cb_cfpcall); |