feat(pickers.format): added opts.picker.formatters.file.filename_first

This commit is contained in:
Folke Lemaitre 2025-01-15 19:50:10 +01:00
parent 09d563e223
commit 98562ae6a1
No known key found for this signature in database
GPG key ID: 41F8B1FBACAE2040
2 changed files with 31 additions and 30 deletions

View file

@ -33,21 +33,6 @@ local M = {}
---@field idx? number
---@field score? number
---@class snacks.picker.sources.Config
---@class snacks.picker.preview.Config
---@field man_pager? string MANPAGER env to use for `man` preview
---@field file snacks.picker.preview.file.Config
---@field git snacks.picker.preview.git.Config
---@class snacks.picker.preview.file.Config
---@field max_size? number default 1MB
---@field max_line_length? number defaults to 500
---@field ft? string defaults to auto-detect
---@class snacks.picker.preview.git.Config
---@field native? boolean use terminal or Neovim for previewing git diffs and commits
---@class snacks.picker.layout.Config
---@field layout snacks.layout.Box
---@field reverse? boolean when true, the list will be reversed (bottom-up)
@ -82,7 +67,8 @@ local M = {}
---@field icons? snacks.picker.icons
---@field prompt? string prompt text / icon
--- Preset options
---@field previewers? snacks.picker.preview.Config
---@field previewers? snacks.picker.previewers.Config|{}
---@field formatters? snacks.picker.formatters.Config|{}
---@field sources? snacks.picker.sources.Config|{}
---@field layouts? table<string, snacks.picker.layout.Config>
--- Actions
@ -103,14 +89,23 @@ local defaults = {
end,
},
ui_select = true, -- replace `vim.ui.select` with the snacks picker
---@class snacks.picker.formatters.Config
formatters = {
file = {
filename_first = false, -- display filename before the file path
},
},
---@class snacks.picker.previewers.Config
previewers = {
git = {
native = false, -- use native (terminal) or Neovim for previewing git diffs and commits
},
file = {
max_size = 1024 * 1024, -- 1MB
max_line_length = 500,
max_line_length = 500, -- max line length
ft = nil, ---@type string? filetype for highlighting. Use `nil` for auto detect
},
man_pager = nil, ---@type string? MANPAGER env to use for `man` preview
},
win = {
-- input window

View file

@ -41,18 +41,24 @@ function M.filename(item, picker)
end
local dir, file = path:match("^(.*)/(.+)$")
if dir then
table.insert(ret, { dir .. "/", "SnacksPickerDir" })
table.insert(ret, { file, "SnacksPickerFile" })
if file and dir then
if picker.opts.formatters.file.filename_first then
ret[#ret + 1] = { file, "SnacksPickerFile" }
ret[#ret + 1] = { " " }
ret[#ret + 1] = { dir, "SnacksPickerDir" }
else
ret[#ret + 1] = { dir .. "/", "SnacksPickerDir" }
ret[#ret + 1] = { file, "SnacksPickerFile" }
end
else
table.insert(ret, { path, "SnacksPickerFile" })
ret[#ret + 1] = { path, "SnacksPickerFile" }
end
if item.pos then
table.insert(ret, { ":", "SnacksPickerDelim" })
table.insert(ret, { tostring(item.pos[1]), "SnacksPickerRow" })
ret[#ret + 1] = { ":", "SnacksPickerDelim" }
ret[#ret + 1] = { tostring(item.pos[1]), "SnacksPickerRow" }
if item.pos[2] > 0 then
table.insert(ret, { ":", "SnacksPickerDelim" })
table.insert(ret, { tostring(item.pos[2]), "SnacksPickerCol" })
ret[#ret + 1] = { ":", "SnacksPickerDelim" }
ret[#ret + 1] = { tostring(item.pos[2]), "SnacksPickerCol" }
end
end
ret[#ret + 1] = { " " }
@ -63,13 +69,13 @@ function M.file(item, picker)
---@type snacks.picker.Highlight[]
local ret = {}
if item.severity then
vim.list_extend(ret, M.severity(item, picker))
if item.label then
ret[#ret + 1] = { item.label, "SnacksPickerLabel" }
ret[#ret + 1] = { " ", virtual = true }
end
if item.label then
table.insert(ret, 1, { item.label, "SnacksPickerLabel" })
table.insert(ret, 2, { " ", virtual = true })
if item.severity then
vim.list_extend(ret, M.severity(item, picker))
end
vim.list_extend(ret, M.filename(item, picker))