diff --git a/README.md b/README.md index 675ee135..07cfb197 100644 --- a/README.md +++ b/README.md @@ -371,7 +371,7 @@ local defaults = { class = "{class}", }, -- preferred picker for selecting files - ---@alias sidekick.picker "snacks"|"telescope"|"fzf-lua" + ---@alias sidekick.picker "snacks"|"telescope"|"fzf-lua"|"mini.pick" picker = "snacks", ---@type sidekick.picker }, copilot = { diff --git a/lua/sidekick/cli/picker/init.lua b/lua/sidekick/cli/picker/init.lua index 338f5340..c56b9e70 100644 --- a/lua/sidekick/cli/picker/init.lua +++ b/lua/sidekick/cli/picker/init.lua @@ -17,7 +17,7 @@ function P.action(cb) end ---@param picker? string function M.get(picker) - local pickers = picker and { picker } or { Config.cli.picker, "snacks", "telescope", "fzf-lua" } + local pickers = picker and { picker } or { Config.cli.picker, "snacks", "telescope", "fzf-lua", "mini.pick" } for _, name in ipairs(pickers) do ---@type boolean, sidekick.Picker local ok, mod = pcall(require, "sidekick.cli.picker." .. name) diff --git a/lua/sidekick/cli/picker/mini/pick.lua b/lua/sidekick/cli/picker/mini/pick.lua new file mode 100644 index 00000000..1191ab0a --- /dev/null +++ b/lua/sidekick/cli/picker/mini/pick.lua @@ -0,0 +1,43 @@ +---@type sidekick.Picker +local M = {} + +local typeMapFn = { + -- MiniPick.builtin.files() deals with list of file paths + ["string"] = function(value) + return { name = value } + end, + -- MiniPick.builtin.buffers() deals with list of tables that include buffer number and file name + ["table"] = function(value) + return { + name = value.text, + bufnr = value.bufnr, + } + end, +} + +---@param source string +---@param cb fun(items:sidekick.context.Loc[]) +---@param opts? table +function M.open(source, cb, opts) + local choose_marked_fn = M.action(cb) + require("mini.pick").builtin[source]({}, { + source = { + choose = function(item) + choose_marked_fn({ item }) + end, + choose_marked = choose_marked_fn, + }, + }) +end + +---@param cb fun(items:sidekick.context.Loc[]) +---@return fun(items:any[]) +function M.action(cb) + return function(items) + cb(vim.tbl_map(function(value) + return typeMapFn[type(value)](value) + end, items)) + end +end + +return M diff --git a/lua/sidekick/config.lua b/lua/sidekick/config.lua index d30e92e8..14dea426 100644 --- a/lua/sidekick/config.lua +++ b/lua/sidekick/config.lua @@ -143,7 +143,7 @@ local defaults = { class = "{class}", }, -- preferred picker for selecting files - ---@alias sidekick.picker "snacks"|"telescope"|"fzf-lua" + ---@alias sidekick.picker "snacks"|"telescope"|"fzf-lua"|"mini.pick" picker = "snacks", ---@type sidekick.picker }, copilot = {