diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2023-11-30 10:50:16 -0700 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2023-11-30 10:50:16 -0700 |
commit | 8a98d50685575d20fcd6ad0dc7031d489d5e5361 (patch) | |
tree | 9a2b95594af2c6fc1128c7cbfb73b67c1a8749cc /runtime/lua/vim/userreg.lua | |
parent | 49fd5b067fed9744ee7e84f7db9209417023b5db (diff) | |
parent | 23fd9a2b29cedef01ad6597854bc42ffb1bab86a (diff) | |
download | rneovim-8a98d50685575d20fcd6ad0dc7031d489d5e5361.tar.gz rneovim-8a98d50685575d20fcd6ad0dc7031d489d5e5361.tar.bz2 rneovim-8a98d50685575d20fcd6ad0dc7031d489d5e5361.zip |
Merge branch 'userreg' into 20231130_mix
Diffstat (limited to 'runtime/lua/vim/userreg.lua')
-rw-r--r-- | runtime/lua/vim/userreg.lua | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/runtime/lua/vim/userreg.lua b/runtime/lua/vim/userreg.lua new file mode 100644 index 0000000000..5abcff0407 --- /dev/null +++ b/runtime/lua/vim/userreg.lua @@ -0,0 +1,51 @@ +-- Defualt implementation of the userregfunc. This default implementation is +-- extensible and allows other plugins to register handlers for different +-- registers. +-- +-- The default handler behaves just as a normal register would. + +local userreg = {} + +-- Returns a "default handler" which behaves exactly like the builtin registers +-- in Vim. Simply stores whatever was yanked and returns the last thing that was +-- yanked. +function userreg._default_handler() + local d = {} + + function d.do_yank(self, content) + self.content = content + end + + function d.do_put(self) + return self.content or {} + end + + return d +end + +-- The store for registers default handler +userreg._regtable = {} + +-- Function for the userreg. This function will defer to the handler registered +-- to the given register. If no handler is registered to the given register, the +-- default handler is used. +function userreg.fn(action, register, content) + if not userreg._regtable[register] then + userreg._regtable[register] = userreg._default_handler() + end + + if action == "yank" then + userreg._regtable[register]:do_yank(content) + return nil + else + return userreg._regtable[register]:do_put() + end +end + +-- Registers a handler with a register. Future yanks and puts will defer to the +-- handler when determining the content to put/yank. +function userreg.register_handler(register, handler) + userreg._regtable[register] = handler +end + +return userreg |