summaryrefslogtreecommitdiff
path: root/plugin
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2025-04-10 00:20:28 -0600
committerJosh Rahm <joshuarahm@gmail.com>2025-04-10 00:20:28 -0600
commitd2325e040e2a4c2ea9d0d8c57af57bc13f7aeae7 (patch)
tree42cdc551faf3b3abbeb998166f00f937747fa6b1 /plugin
parentb3b09ff479510abc51ffb88743bb353bcc15e165 (diff)
downloadrneovim-userregs-main.tar.gz
rneovim-userregs-main.tar.bz2
rneovim-userregs-main.zip
Add some more user-defined registers:HEADmain
"| - file contents register " - visual selection register " - timestamp register " - uuid register " - dirname register
Diffstat (limited to 'plugin')
-rw-r--r--plugin/basename.lua26
-rw-r--r--plugin/fileregister.lua71
-rw-r--r--plugin/loader.vim7
3 files changed, 7 insertions, 97 deletions
diff --git a/plugin/basename.lua b/plugin/basename.lua
deleted file mode 100644
index 84d2991..0000000
--- a/plugin/basename.lua
+++ /dev/null
@@ -1,26 +0,0 @@
---- Basename Register: returns the current filename without path and extension.
----
---- This is similar to the "%" register (full filename), but returns only
---- the basename with one extension removed. Useful, for example, when referencing
---- Java class names based on the file name.
----
---- This register is read-only and assigned to the character '$'.
-
-local userregs = require("vim.userregs")
-local api = vim.api
-
----@type table<string, fun(regname: string): any>
-local handler = {}
-
---- Return the current buffer's basename without extension.
---- Equivalent to `expand('%:t:r')`
-function handler.put(regname)
- return vim.fn.expand('%:t:r')
-end
-
--- Make this register read-only by omitting the yank handler.
-handler.yank = nil
-
--- Register this handler under the user register '$'.
-userregs.register_handler('$', handler)
-
diff --git a/plugin/fileregister.lua b/plugin/fileregister.lua
deleted file mode 100644
index 08bdc5a..0000000
--- a/plugin/fileregister.lua
+++ /dev/null
@@ -1,71 +0,0 @@
---- Fileregister: maps the '&' register to an external file.
----
---- This register reads from or writes to a file defined by `g:fileregister_filename`
---- or defaults to `${RUN_DIRECTORY}/fileregister`.
----
---- On yank, the content is saved as JSON.
---- On put, the content is decoded from JSON (if valid) or interpreted as raw lines.
-
-local userregs = require("vim.userregs")
-local api = vim.api
-
-local handler = {}
-
---- Get the filename used for this register.
---- Defaults to /tmp/.vim.$USER.fileregister
----@return string
-local function get_file_name()
- return vim.g.fileregister_filename
- or (vim.fn.stdpath("run") .. "/fileregister")
-end
-
---- Write the yanked content into the fileregister as JSON.
----@param _ string register name (ignored)
----@param content table content from 'userregfunc'
-function handler.yank(_, content)
- local filename = get_file_name()
- local ok, encoded = pcall(vim.json.encode, content)
- if not ok then
- vim.notify("[fileregister] Failed to encode content to JSON", vim.log.levels.ERROR)
- return
- end
-
- local f = io.open(filename, "w")
- if not f then
- vim.notify("[fileregister] Could not open file for writing: " .. filename, vim.log.levels.ERROR)
- return
- end
-
- f:write(encoded)
- f:close()
-end
-
---- Read from the file. If it's valid JSON, decode as register content.
---- Otherwise, interpret it as a list of lines.
----@param _ string register name (ignored)
----@return table|string
-function handler.put(_)
- local filename = get_file_name()
- local f = io.open(filename, "r")
-
- if not f then
- return {}
- end
-
- local content = f:read("*a")
- f:close()
-
- if content:sub(1, 1) == "{" then
- local ok, decoded = pcall(vim.json.decode, content)
- if ok then return decoded end
- end
-
- local lines = {}
- for line in content:gmatch("[^\r\n]+") do
- table.insert(lines, line)
- end
- return lines
-end
-
--- Register the '&' fileregister
-userregs.register_handler('&', handler)
diff --git a/plugin/loader.vim b/plugin/loader.vim
new file mode 100644
index 0000000..a694db1
--- /dev/null
+++ b/plugin/loader.vim
@@ -0,0 +1,7 @@
+lua require('vim.userregs.impl.fileregister')
+lua require('vim.userregs.impl.uuid_register')
+lua require('vim.userregs.impl.basename')
+lua require('vim.userregs.impl.dirname')
+lua require('vim.userregs.impl.timestamp')
+lua require('vim.userregs.impl.buffercontents')
+lua require('vim.userregs.impl.visualselection')