mirror of
https://github.com/folke/snacks.nvim
synced 2025-08-05 03:08:13 +00:00
feat(picker.undo): added ctrl+y to yank added lines from undo
This commit is contained in:
parent
bc087d36d6
commit
811a24cc16
3 changed files with 18 additions and 3 deletions
|
@ -421,9 +421,14 @@ function M.loclist(picker)
|
|||
setqflist(items, { win = picker.main })
|
||||
end
|
||||
|
||||
function M.yank(_, item)
|
||||
function M.yank(picker, item, action)
|
||||
if item then
|
||||
vim.fn.setreg("+", item.data or item.text)
|
||||
local reg = action.reg or "+"
|
||||
local value = item.data or item.text
|
||||
vim.fn.setreg(reg, value)
|
||||
local buf = item.buf or vim.api.nvim_win_get_buf(picker.main)
|
||||
local ft = vim.bo[buf].filetype
|
||||
Snacks.notify(("Yanked to register `%s`:\n```%s\n%s\n```"):format(reg, ft, value), { title = "Snacks Picker" })
|
||||
end
|
||||
end
|
||||
M.copy = M.yank
|
||||
|
|
|
@ -758,7 +758,14 @@ M.undo = {
|
|||
format = "undo",
|
||||
preview = "preview",
|
||||
confirm = "item_action",
|
||||
win = { preview = { wo = { number = false, relativenumber = false, signcolumn = "no" } } },
|
||||
win = {
|
||||
preview = { wo = { number = false, relativenumber = false, signcolumn = "no" } },
|
||||
input = {
|
||||
keys = {
|
||||
["<c-y>"] = { "yank", mode = { "n", "i" } },
|
||||
},
|
||||
},
|
||||
},
|
||||
icons = { tree = { last = "┌╴" } }, -- the tree is upside down
|
||||
diff = {
|
||||
ctxlen = 4,
|
||||
|
|
|
@ -364,11 +364,13 @@ function M.undo(opts, ctx)
|
|||
local diff = vim.diff(table.concat(before, "\n") .. "\n", table.concat(after, "\n") .. "\n", opts.diff) --[[@as string]]
|
||||
local changes = {} ---@type string[]
|
||||
local added, removed = 0, 0
|
||||
local added_lines = {} ---@type string[]
|
||||
|
||||
for _, line in ipairs(vim.split(diff, "\n")) do
|
||||
if line:sub(1, 1) == "+" then
|
||||
added = added + 1
|
||||
changes[#changes + 1] = line:sub(2)
|
||||
added_lines[#added_lines + 1] = line:sub(2)
|
||||
elseif line:sub(1, 1) == "-" then
|
||||
removed = removed + 1
|
||||
changes[#changes + 1] = line:sub(2)
|
||||
|
@ -379,6 +381,7 @@ function M.undo(opts, ctx)
|
|||
{ file = vim.fn.fnamemodify(file, ":."), diff = diff }
|
||||
)
|
||||
item.text = table.concat(changes, " ")
|
||||
item.data = table.concat(added_lines, "\n")
|
||||
item.added = added
|
||||
item.removed = removed
|
||||
item.preview = {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue