diff options
-rw-r--r-- | runtime/autoload/userreg.vim | 7 | ||||
-rw-r--r-- | runtime/lua/vim/userreg.lua | 27 | ||||
-rw-r--r-- | runtime/plugin/userreg.vim | 1 |
3 files changed, 35 insertions, 0 deletions
diff --git a/runtime/autoload/userreg.vim b/runtime/autoload/userreg.vim new file mode 100644 index 0000000000..fd026a12e6 --- /dev/null +++ b/runtime/autoload/userreg.vim @@ -0,0 +1,7 @@ +" This is used for the default userreg function. + +lua vim.userreg = require('vim.userreg') + +function! userreg#func(action, register, content) abort + return v:lua.vim.userreg.fn(a:action, a:register, a:content) +endfunction diff --git a/runtime/lua/vim/userreg.lua b/runtime/lua/vim/userreg.lua new file mode 100644 index 0000000000..d1062dea73 --- /dev/null +++ b/runtime/lua/vim/userreg.lua @@ -0,0 +1,27 @@ +local userreg = {} + +userreg.store = {} +userreg.regtable = {} + +function userreg.fn(action, register, content) + if action == "yank" then + if userreg.regtable[register] then + userreg.regtable[register]:do_yank(content) + else + userreg.store[register] = content + end + return nil + else + if userreg.regtable[register] then + return userreg.regtable[register]:do_put() + else + return userreg.store[register] or {} + end + end +end + +function userreg.register_handler(register, handler) + userreg.regtable[register] = handler +end + +return userreg diff --git a/runtime/plugin/userreg.vim b/runtime/plugin/userreg.vim new file mode 100644 index 0000000000..c2a0e71fea --- /dev/null +++ b/runtime/plugin/userreg.vim @@ -0,0 +1 @@ +set userregfun=userreg#func |