diff options
Diffstat (limited to 'plugin')
-rw-r--r-- | plugin/basename.lua | 26 | ||||
-rw-r--r-- | plugin/fileregister.lua | 71 | ||||
-rw-r--r-- | plugin/loader.vim | 7 |
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') |