From c5d7d542f32ccd113cfcfca365d17e4fb6393b9d Mon Sep 17 00:00:00 2001 From: Seong Yong-ju Date: Thu, 23 Jan 2025 23:29:16 +0900 Subject: [PATCH] feat(file_selector): add snacks picker as a file selector --- README.md | 2 +- lua/avante/config.lua | 2 +- lua/avante/file_selector.lua | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7390ad1..5bfcbcf 100644 --- a/README.md +++ b/README.md @@ -337,7 +337,7 @@ This is achieved but emulating nvim-cmp using blink.compat ```lua file_selector = { - --- @alias FileSelectorProvider "native" | "fzf" | "mini.pick" | "telescope" | string + --- @alias FileSelectorProvider "native" | "fzf" | "mini.pick" | "snacks" | "telescope" | string provider = "fzf", -- Options override for custom providers provider_opts = {}, diff --git a/lua/avante/config.lua b/lua/avante/config.lua index 39e0041..56a2f4a 100644 --- a/lua/avante/config.lua +++ b/lua/avante/config.lua @@ -248,7 +248,7 @@ M._defaults = { }, --- @class AvanteFileSelectorConfig file_selector = { - --- @alias FileSelectorProvider "native" | "fzf" | "mini.pick" | "telescope" | string + --- @alias FileSelectorProvider "native" | "fzf" | "mini.pick" | "snacks" | "telescope" | string provider = "native", -- Options override for custom providers provider_opts = {}, diff --git a/lua/avante/file_selector.lua b/lua/avante/file_selector.lua index 941efe2..17d41d3 100644 --- a/lua/avante/file_selector.lua +++ b/lua/avante/file_selector.lua @@ -167,6 +167,18 @@ function FileSelector:mini_pick_ui(handler) handler(mini_pick.builtin.files()) end +function FileSelector:snacks_picker_ui(handler) + Snacks.picker.files({ + exclude = self.selected_filepaths, + confirm = function(picker) + picker:close() + local items = picker:selected({ fallback = true }) + local files = vim.tbl_map(function(item) return item.file end, items) + handler(files) + end, + }) +end + function FileSelector:telescope_ui(handler) local success, _ = pcall(require, "telescope") if not success then @@ -256,6 +268,8 @@ function FileSelector:show_select_ui() self:fzf_ui(handler) elseif Config.file_selector.provider == "mini.pick" then self:mini_pick_ui(handler) + elseif Config.file_selector.provider == "snacks" then + self:snacks_picker_ui(handler) elseif Config.file_selector.provider == "telescope" then self:telescope_ui(handler) else