mirror of
https://github.com/LazyVim/LazyVim.git
synced 2025-08-18 00:09:27 +02:00
Previously the picker selection was hardcoded to check for fzf-lua and snacks in a specific order. Now it uses the user's configured picker from LazyVim settings and validates it against supported pickers (currently telescope, fzf, snacks).
112 lines
2.9 KiB
Lua
112 lines
2.9 KiB
Lua
local M = {}
|
|
|
|
---@param kind string
|
|
function M.pick(kind)
|
|
return function()
|
|
local actions = require("CopilotChat.actions")
|
|
local items = actions[kind .. "_actions"]()
|
|
if not items then
|
|
LazyVim.warn("No " .. kind .. " found on the current line")
|
|
return
|
|
end
|
|
|
|
-- Get the picker wanted (configured) by the user
|
|
local configured_picker = LazyVim.pick.want()
|
|
|
|
-- Sanity check if a valid picker for CopilotChat is configured
|
|
local valid_pickers = { "telescope", "fzf", "snacks" }
|
|
|
|
if not vim.tbl_contains(valid_pickers, configured_picker) then
|
|
LazyVim.error(
|
|
("Invalid picker: '%s'. Ensure one of the following is installed and configured: %s"):format(
|
|
configured_picker,
|
|
table.concat(valid_pickers, ", ")
|
|
)
|
|
)
|
|
return
|
|
end
|
|
|
|
-- Use the valid picker
|
|
require("CopilotChat.integrations." .. configured_picker).pick(items)
|
|
end
|
|
end
|
|
|
|
return {
|
|
{
|
|
"CopilotC-Nvim/CopilotChat.nvim",
|
|
branch = "main",
|
|
cmd = "CopilotChat",
|
|
opts = function()
|
|
local user = vim.env.USER or "User"
|
|
user = user:sub(1, 1):upper() .. user:sub(2)
|
|
return {
|
|
auto_insert_mode = true,
|
|
question_header = " " .. user .. " ",
|
|
answer_header = " Copilot ",
|
|
window = {
|
|
width = 0.4,
|
|
},
|
|
}
|
|
end,
|
|
keys = {
|
|
{ "<c-s>", "<CR>", ft = "copilot-chat", desc = "Submit Prompt", remap = true },
|
|
{ "<leader>a", "", desc = "+ai", mode = { "n", "v" } },
|
|
{
|
|
"<leader>aa",
|
|
function()
|
|
return require("CopilotChat").toggle()
|
|
end,
|
|
desc = "Toggle (CopilotChat)",
|
|
mode = { "n", "v" },
|
|
},
|
|
{
|
|
"<leader>ax",
|
|
function()
|
|
return require("CopilotChat").reset()
|
|
end,
|
|
desc = "Clear (CopilotChat)",
|
|
mode = { "n", "v" },
|
|
},
|
|
{
|
|
"<leader>aq",
|
|
function()
|
|
local input = vim.fn.input("Quick Chat: ")
|
|
if input ~= "" then
|
|
require("CopilotChat").ask(input)
|
|
end
|
|
end,
|
|
desc = "Quick Chat (CopilotChat)",
|
|
mode = { "n", "v" },
|
|
},
|
|
-- Show prompts actions with telescope
|
|
{ "<leader>ap", M.pick("prompt"), desc = "Prompt Actions (CopilotChat)", mode = { "n", "v" } },
|
|
},
|
|
config = function(_, opts)
|
|
local chat = require("CopilotChat")
|
|
|
|
vim.api.nvim_create_autocmd("BufEnter", {
|
|
pattern = "copilot-chat",
|
|
callback = function()
|
|
vim.opt_local.relativenumber = false
|
|
vim.opt_local.number = false
|
|
end,
|
|
})
|
|
|
|
chat.setup(opts)
|
|
end,
|
|
},
|
|
|
|
-- Edgy integration
|
|
{
|
|
"folke/edgy.nvim",
|
|
optional = true,
|
|
opts = function(_, opts)
|
|
opts.right = opts.right or {}
|
|
table.insert(opts.right, {
|
|
ft = "copilot-chat",
|
|
title = "Copilot Chat",
|
|
size = { width = 50 },
|
|
})
|
|
end,
|
|
},
|
|
}
|