mirror of
https://github.com/folke/snacks.nvim
synced 2025-08-06 11:48:23 +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 reverse? boolean when true, the list will be reversed (bottom-up)
|
||||||
---@field fullscreen? boolean open in fullscreen
|
---@field fullscreen? boolean open in fullscreen
|
||||||
---@field cycle? boolean cycle through the list
|
---@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
|
---@field preset? string|fun(source:string):string
|
||||||
|
|
||||||
---@class snacks.picker.win.Config
|
---@class snacks.picker.win.Config
|
||||||
|
|
|
@ -86,6 +86,7 @@ end
|
||||||
---@param opts? snacks.picker.Config
|
---@param opts? snacks.picker.Config
|
||||||
---@return snacks.Picker
|
---@return snacks.Picker
|
||||||
function M.new(opts)
|
function M.new(opts)
|
||||||
|
---@type snacks.Picker
|
||||||
local self = setmetatable({}, M)
|
local self = setmetatable({}, M)
|
||||||
_id = _id + 1
|
_id = _id + 1
|
||||||
self.id = _id
|
self.id = _id
|
||||||
|
@ -173,7 +174,7 @@ function M.new(opts)
|
||||||
self.resolved_layout = layout
|
self.resolved_layout = layout
|
||||||
self.list = require("snacks.picker.core.list").new(self)
|
self.list = require("snacks.picker.core.list").new(self)
|
||||||
self.input = require("snacks.picker.core.input").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")
|
self.title = self.opts.title or Snacks.picker.util.title(self.opts.source or "search")
|
||||||
|
|
||||||
|
@ -199,7 +200,7 @@ function M.new(opts)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
if self.opts.auto_close == false then
|
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)
|
self:toggle_preview(false)
|
||||||
on_focus = vim.schedule_wrap(function()
|
on_focus = vim.schedule_wrap(function()
|
||||||
self:toggle_preview(true)
|
self:toggle_preview(true)
|
||||||
|
@ -255,6 +256,21 @@ function M:norm(cb)
|
||||||
return true
|
return true
|
||||||
end
|
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
|
---@param layout? snacks.picker.layout.Config
|
||||||
---@private
|
---@private
|
||||||
function M:init_layout(layout)
|
function M:init_layout(layout)
|
||||||
|
@ -262,8 +278,9 @@ function M:init_layout(layout)
|
||||||
self.resolved_layout = vim.deepcopy(layout)
|
self.resolved_layout = vim.deepcopy(layout)
|
||||||
self.resolved_layout.cycle = self.resolved_layout.cycle == true
|
self.resolved_layout.cycle = self.resolved_layout.cycle == true
|
||||||
local opts = layout --[[@as snacks.layout.Config]]
|
local opts = layout --[[@as snacks.layout.Config]]
|
||||||
local preview_main = layout.preview == "main"
|
local preview_opts = self:preview_opts()
|
||||||
local preview_hidden = layout.preview == false or preview_main
|
local preview_main = preview_opts.main
|
||||||
|
local preview_hidden = preview_main or not preview_opts.enabled
|
||||||
local backdrop = nil
|
local backdrop = nil
|
||||||
if preview_main then
|
if preview_main then
|
||||||
backdrop = false
|
backdrop = false
|
||||||
|
@ -334,7 +351,7 @@ function M:toggle_preview(enable)
|
||||||
if enable == showing then
|
if enable == showing then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
if self.resolved_layout.preview == "main" then
|
if self:preview_opts().main then
|
||||||
if enable then
|
if enable then
|
||||||
self.preview.win:show()
|
self.preview.win:show()
|
||||||
else
|
else
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue