feat(picker): added <a-w> to cycle windows

This commit is contained in:
Folke Lemaitre 2025-01-13 21:49:56 +01:00
parent c74b0869b8
commit e43017af4b
No known key found for this signature in database
GPG key ID: 41F8B1FBACAE2040
4 changed files with 23 additions and 1 deletions

View file

@ -221,6 +221,23 @@ function M.toggle_focus(picker)
end
end
function M.cycle_win(picker)
local wins = { picker.input.win.win, picker.preview.win.win, picker.list.win.win }
local win = vim.api.nvim_get_current_win()
local idx = 1
for i, w in ipairs(wins) do
if w == win then
idx = i
break
end
end
win = wins[idx % #wins + 1] or 1 -- cycle
vim.api.nvim_set_current_win(win)
if win == picker.input.win.win then
vim.cmd("startinsert")
end
end
function M.focus_input(picker)
picker.input.win:focus()
vim.cmd("startinsert")

View file

@ -121,6 +121,7 @@ local defaults = {
["<c-k>"] = "list_up",
["<c-n>"] = "list_down",
["<c-p>"] = "list_up",
["<a-w>"] = "cycle_win",
},
},
input = {
@ -135,6 +136,7 @@ local defaults = {
["?"] = "toggle_help",
["<a-m>"] = { "toggle_maximize", mode = { "i", "n" } },
["<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" },
["<C-Up>"] = { "history_back", mode = { "i", "n" } },
["<C-Down>"] = { "history_forward", mode = { "i", "n" } },
@ -173,6 +175,7 @@ local defaults = {
["i"] = "focus_input",
["<ScrollWheelDown>"] = "list_scroll_wheel_down",
["<ScrollWheelUp>"] = "list_scroll_wheel_up",
["<a-w>"] = "cycle_win",
},
},
},

View file

@ -132,6 +132,7 @@ end
function M:init_layout(layout)
layout = layout or Snacks.picker.config.layout(self.opts)
self.resolved_layout = vim.deepcopy(layout)
self.resolved_layout.cycle = nil -- not needed for applying layout
local opts = layout --[[@as snacks.layout.Config]]
local preview_main = layout.preview == "main"
local preview_hidden = layout.preview == false or preview_main
@ -174,6 +175,7 @@ function M:set_layout(layout)
layout = layout or Snacks.picker.config.layout(self.opts)
layout = type(layout) == "string" and Snacks.picker.config.layout(layout) or layout
---@cast layout snacks.picker.Layout
layout.cycle = nil -- not needed for applying layout
if vim.deep_equal(layout, self.resolved_layout) then
-- no need to update
return

View file

@ -77,7 +77,7 @@ function M:update(main)
self.main = main
self.win_opts.main.win = main
self.win.opts = vim.tbl_deep_extend("force", self.win.opts, main and self.win_opts.main or self.win_opts.layout)
if main and self.win:valid() then
if main then
self.win:update()
end
end