From 40e8287213d9a9bbc6e4937b8476994d5529140e Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sun, 12 Oct 2025 13:08:22 +0200 Subject: [PATCH] nvim: Add fidget spinner to codecompanion --- nvim/.config/nvim/lua/modules/llm.lua | 1 + nvim/.config/nvim/lua/personal/ccp-fidget.lua | 74 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 nvim/.config/nvim/lua/personal/ccp-fidget.lua diff --git a/nvim/.config/nvim/lua/modules/llm.lua b/nvim/.config/nvim/lua/modules/llm.lua index 7d90eaa..f02f5e6 100644 --- a/nvim/.config/nvim/lua/modules/llm.lua +++ b/nvim/.config/nvim/lua/modules/llm.lua @@ -111,6 +111,7 @@ return { if require("core.util").is_available("which-key") then require("which-key").add({ "a", group = "codecompanion" }) end + require("personal.ccp-fidget"):init() end, opts = { strategies = { diff --git a/nvim/.config/nvim/lua/personal/ccp-fidget.lua b/nvim/.config/nvim/lua/personal/ccp-fidget.lua new file mode 100644 index 0000000..28f2882 --- /dev/null +++ b/nvim/.config/nvim/lua/personal/ccp-fidget.lua @@ -0,0 +1,74 @@ +-- taken from https://github.com/olimorris/codecompanion.nvim/discussions/813#discussioncomment-12031954 +-- many thanks to @jessevdp! + +local progress = require("fidget.progress") + +local M = {} + +function M:init() + local group = vim.api.nvim_create_augroup("CodeCompanionFidgetHooks", {}) + + vim.api.nvim_create_autocmd({ "User" }, { + pattern = "CodeCompanionRequestStarted", + group = group, + callback = function(request) + local handle = M:create_progress_handle(request) + M:store_progress_handle(request.data.id, handle) + end, + }) + + vim.api.nvim_create_autocmd({ "User" }, { + pattern = "CodeCompanionRequestFinished", + group = group, + callback = function(request) + local handle = M:pop_progress_handle(request.data.id) + if handle then + M:report_exit_status(handle, request) + handle:finish() + end + end, + }) +end + +M.handles = {} + +function M:store_progress_handle(id, handle) + M.handles[id] = handle +end + +function M:pop_progress_handle(id) + local handle = M.handles[id] + M.handles[id] = nil + return handle +end + +function M:create_progress_handle(request) + return progress.handle.create({ + title = " Running (" .. request.data.strategy .. ")", + message = "In progress...", + lsp_client = { + name = M:llm_role_title(request.data.adapter), + }, + }) +end + +function M:llm_role_title(adapter) + local parts = {} + table.insert(parts, adapter.formatted_name) + if adapter.model and adapter.model ~= "" then + table.insert(parts, "(" .. adapter.model .. ")") + end + return table.concat(parts, " ") +end + +function M:report_exit_status(handle, request) + if request.data.status == "success" then + handle.message = "Completed" + elseif request.data.status == "error" then + handle.message = " Error" + else + handle.message = "󰜺 Cancelled" + end +end + +return M