Skip to content

Commit

Permalink
feat: add snacks.nvim picker integration (#720)
Browse files Browse the repository at this point in the history
Co-authored-by: Tony Fischer (tku137) <[email protected]>
  • Loading branch information
tku137 and Tony Fischer (tku137) authored Jan 25, 2025
1 parent 2ebe591 commit d30b7af
Showing 1 changed file with 53 additions and 0 deletions.
53 changes: 53 additions & 0 deletions lua/CopilotChat/integrations/snacks.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
local snacks = require('snacks')
local chat = require('CopilotChat')
local utils = require('CopilotChat.utils')

local M = {}

--- Pick an action from a list of actions
---@param pick_actions CopilotChat.integrations.actions?: A table with the actions to pick from
---@param opts table?: snacks options
function M.pick(pick_actions, opts)
if not pick_actions or not pick_actions.actions or vim.tbl_isempty(pick_actions.actions) then
return
end

utils.return_to_normal_mode()
opts = vim.tbl_extend('force', {
items = vim.tbl_map(function(name)
return {
id = name,
text = name,
file = name,
preview = {
text = pick_actions.actions[name].prompt,
ft = 'text',
},
}
end, vim.tbl_keys(pick_actions.actions)),
preview = 'preview',
win = {
preview = {
wo = {
wrap = true,
linebreak = true,
},
},
},
title = pick_actions.prompt,
confirm = function(picker)
local selected = picker:current()
if selected then
local action = pick_actions.actions[selected.id]
vim.defer_fn(function()
chat.ask(action.prompt, action)
end, 100)
end
picker:close()
end,
}, opts or {})

snacks.picker(opts)
end

return M

0 comments on commit d30b7af

Please sign in to comment.