feat(picker): added edit_win action bound to ctrl+enter to pick a window and edit

This commit is contained in:
Folke Lemaitre 2025-01-28 23:55:39 +01:00
parent 940b8844df
commit 2ba5be8491
No known key found for this signature in database
GPG key ID: 41F8B1FBACAE2040
3 changed files with 38 additions and 0 deletions

View file

@ -117,6 +117,42 @@ function M.toggle_preview(picker)
picker:show_preview()
end
function M.edit_win(picker, item, action)
local overlays = {} ---@type snacks.win[]
picker.layout:hide()
local chars = "asdfghjkl"
for _, win in ipairs(vim.api.nvim_list_wins()) do
if vim.api.nvim_win_get_config(win).relative == "" then
local c = chars:sub(1, 1)
chars = chars:sub(2)
overlays[c] = Snacks.win({
backdrop = false,
win = win,
focusable = false,
enter = false,
relative = "win",
width = 7,
height = 3,
text = (" \n %s \n "):format(c),
wo = {
winhighlight = "NormalFloat:SnacksPickerEditWin",
},
})
end
end
vim.cmd([[redraw!]])
local char = vim.fn.getcharstr()
for _, overlay in pairs(overlays) do
overlay:close()
end
picker.layout:unhide()
local win = overlays[char]
if win then
picker.main = win.opts.win
M.jump(picker, item, action)
end
end
function M.bufdelete(picker)
local non_buf_delete_requested = false
for _, item in ipairs(picker:selected({ fallback = true })) do

View file

@ -185,6 +185,7 @@ local defaults = {
["<a-p>"] = { "toggle_preview", mode = { "i", "n" } },
["<a-w>"] = { "cycle_win", mode = { "i", "n" } },
["<C-w>"] = { "<c-s-w>", mode = { "i" }, expr = true, desc = "delete word" },
["<S-CR>"] = { "edit_win", mode = { "n", "i" } },
["<C-Up>"] = { "history_back", mode = { "i", "n" } },
["<C-Down>"] = { "history_forward", mode = { "i", "n" } },
["<Tab>"] = { "select_and_next", mode = { "i", "n" } },

View file

@ -65,6 +65,7 @@ Snacks.util.set_hl({
GitStatusCopied = "SnacksPickerGitStatus",
GitStatusUntracked = "SnacksPickerGitStatus",
ManSection = "Number",
EditWin = "DiagnosticVirtualTextError",
ManPage = "Special",
-- Icons
Icon = "Special",