diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2022-08-18 23:54:04 -0600 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2022-08-18 23:54:04 -0600 |
commit | b1eabf998cbb159a32a0ad237a614257a38e6544 (patch) | |
tree | 852839a0577be45903e9959a6f0bad601879e337 | |
parent | b7362a2daf0eb434fffd2aaec7cfe8c12b0ed6d1 (diff) | |
download | rneovim-b1eabf998cbb159a32a0ad237a614257a38e6544.tar.gz rneovim-b1eabf998cbb159a32a0ad237a614257a38e6544.tar.bz2 rneovim-b1eabf998cbb159a32a0ad237a614257a38e6544.zip |
Make userreg.lua more concise.
-rw-r--r-- | runtime/lua/vim/userreg.lua | 50 |
1 files changed, 37 insertions, 13 deletions
diff --git a/runtime/lua/vim/userreg.lua b/runtime/lua/vim/userreg.lua index d1062dea73..5abcff0407 100644 --- a/runtime/lua/vim/userreg.lua +++ b/runtime/lua/vim/userreg.lua @@ -1,27 +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 = {} -userreg.store = {} -userreg.regtable = {} +-- 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 - if userreg.regtable[register] then - userreg.regtable[register]:do_yank(content) - else - userreg.store[register] = content - end + userreg._regtable[register]:do_yank(content) return nil else - if userreg.regtable[register] then - return userreg.regtable[register]:do_put() - else - return userreg.store[register] or {} - end + 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 + userreg._regtable[register] = handler end return userreg |