aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/lua/executor.c
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2026-10-13 22:11:33 -0600
committerJosh Rahm <joshuarahm@gmail.com>2026-10-18 00:28:27 -0600
commit22d8bf3861234480aa6afed90a1faaaac3d49520 (patch)
tree097100fc5481f0a614c42f5409ed2ec1fa6d8b17 /src/nvim/lua/executor.c
parent0851e7dabed9fc9c019e22088029f36e9f3ec3e3 (diff)
downloadrneovim-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.c21
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);