mirror of
https://github.com/folke/snacks.nvim
synced 2025-08-04 10:49:08 +00:00
feat(picker.preview): allow confguring preview = {main = true, enabled = false}
This commit is contained in:
parent
4b9ea98007
commit
1839c65f67
2 changed files with 23 additions and 6 deletions
|
@ -52,7 +52,7 @@ local M = {}
|
|||
---@field reverse? boolean when true, the list will be reversed (bottom-up)
|
||||
---@field fullscreen? boolean open in fullscreen
|
||||
---@field cycle? boolean cycle through the list
|
||||
---@field preview? boolean|"main" show preview window in the picker or the main window
|
||||
---@field preview? boolean|"main"|{enabled?:boolean, main?:boolean} show preview window in the picker or the main window
|
||||
---@field preset? string|fun(source:string):string
|
||||
|
||||
---@class snacks.picker.win.Config
|
||||
|
|
|
@ -86,6 +86,7 @@ end
|
|||
---@param opts? snacks.picker.Config
|
||||
---@return snacks.Picker
|
||||
function M.new(opts)
|
||||
---@type snacks.Picker
|
||||
local self = setmetatable({}, M)
|
||||
_id = _id + 1
|
||||
self.id = _id
|
||||
|
@ -173,7 +174,7 @@ function M.new(opts)
|
|||
self.resolved_layout = layout
|
||||
self.list = require("snacks.picker.core.list").new(self)
|
||||
self.input = require("snacks.picker.core.input").new(self)
|
||||
self.preview = require("snacks.picker.core.preview").new(self.opts, layout.preview == "main" and self.main or nil)
|
||||
self.preview = require("snacks.picker.core.preview").new(self.opts, self:preview_opts().main and self.main or nil)
|
||||
|
||||
self.title = self.opts.title or Snacks.picker.util.title(self.opts.source or "search")
|
||||
|
||||
|
@ -199,7 +200,7 @@ function M.new(opts)
|
|||
return
|
||||
end
|
||||
if self.opts.auto_close == false then
|
||||
if self.resolved_layout.preview == "main" and self.preview.win:valid() then
|
||||
if self:preview_opts().main and self.preview.win:valid() then
|
||||
self:toggle_preview(false)
|
||||
on_focus = vim.schedule_wrap(function()
|
||||
self:toggle_preview(true)
|
||||
|
@ -255,6 +256,21 @@ function M:norm(cb)
|
|||
return true
|
||||
end
|
||||
|
||||
---@private
|
||||
function M:preview_opts()
|
||||
---@type {enabled: boolean, main: boolean}
|
||||
local ret = { enabled = true, main = false }
|
||||
local p = self.resolved_layout.preview
|
||||
if p == "main" then
|
||||
ret.main = true
|
||||
elseif p == false then
|
||||
ret.enabled = false
|
||||
elseif type(p) == "table" then
|
||||
ret.enabled, ret.main = p.enabled ~= false, p.main == true
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
---@param layout? snacks.picker.layout.Config
|
||||
---@private
|
||||
function M:init_layout(layout)
|
||||
|
@ -262,8 +278,9 @@ function M:init_layout(layout)
|
|||
self.resolved_layout = vim.deepcopy(layout)
|
||||
self.resolved_layout.cycle = self.resolved_layout.cycle == true
|
||||
local opts = layout --[[@as snacks.layout.Config]]
|
||||
local preview_main = layout.preview == "main"
|
||||
local preview_hidden = layout.preview == false or preview_main
|
||||
local preview_opts = self:preview_opts()
|
||||
local preview_main = preview_opts.main
|
||||
local preview_hidden = preview_main or not preview_opts.enabled
|
||||
local backdrop = nil
|
||||
if preview_main then
|
||||
backdrop = false
|
||||
|
@ -334,7 +351,7 @@ function M:toggle_preview(enable)
|
|||
if enable == showing then
|
||||
return
|
||||
end
|
||||
if self.resolved_layout.preview == "main" then
|
||||
if self:preview_opts().main then
|
||||
if enable then
|
||||
self.preview.win:show()
|
||||
else
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue