mirror of
https://github.com/folke/snacks.nvim
synced 2025-08-06 03:38:16 +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 })
|
setqflist(items, { win = picker.main })
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.yank(_, item)
|
function M.yank(picker, item, action)
|
||||||
if item then
|
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
|
||||||
end
|
end
|
||||||
M.copy = M.yank
|
M.copy = M.yank
|
||||||
|
|
|
@ -758,7 +758,14 @@ M.undo = {
|
||||||
format = "undo",
|
format = "undo",
|
||||||
preview = "preview",
|
preview = "preview",
|
||||||
confirm = "item_action",
|
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
|
icons = { tree = { last = "┌╴" } }, -- the tree is upside down
|
||||||
diff = {
|
diff = {
|
||||||
ctxlen = 4,
|
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 diff = vim.diff(table.concat(before, "\n") .. "\n", table.concat(after, "\n") .. "\n", opts.diff) --[[@as string]]
|
||||||
local changes = {} ---@type string[]
|
local changes = {} ---@type string[]
|
||||||
local added, removed = 0, 0
|
local added, removed = 0, 0
|
||||||
|
local added_lines = {} ---@type string[]
|
||||||
|
|
||||||
for _, line in ipairs(vim.split(diff, "\n")) do
|
for _, line in ipairs(vim.split(diff, "\n")) do
|
||||||
if line:sub(1, 1) == "+" then
|
if line:sub(1, 1) == "+" then
|
||||||
added = added + 1
|
added = added + 1
|
||||||
changes[#changes + 1] = line:sub(2)
|
changes[#changes + 1] = line:sub(2)
|
||||||
|
added_lines[#added_lines + 1] = line:sub(2)
|
||||||
elseif line:sub(1, 1) == "-" then
|
elseif line:sub(1, 1) == "-" then
|
||||||
removed = removed + 1
|
removed = removed + 1
|
||||||
changes[#changes + 1] = line:sub(2)
|
changes[#changes + 1] = line:sub(2)
|
||||||
|
@ -379,6 +381,7 @@ function M.undo(opts, ctx)
|
||||||
{ file = vim.fn.fnamemodify(file, ":."), diff = diff }
|
{ file = vim.fn.fnamemodify(file, ":."), diff = diff }
|
||||||
)
|
)
|
||||||
item.text = table.concat(changes, " ")
|
item.text = table.concat(changes, " ")
|
||||||
|
item.data = table.concat(added_lines, "\n")
|
||||||
item.added = added
|
item.added = added
|
||||||
item.removed = removed
|
item.removed = removed
|
||||||
item.preview = {
|
item.preview = {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue