mirror of
https://github.com/folke/snacks.nvim
synced 2025-08-04 10:49:08 +00:00
feat(picker): added <a-w>
to cycle windows
This commit is contained in:
parent
c74b0869b8
commit
e43017af4b
4 changed files with 23 additions and 1 deletions
|
@ -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")
|
||||
|
|
|
@ -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",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue