diff --git a/lua/avante/config.lua b/lua/avante/config.lua index 22a5225..f7a05b5 100644 --- a/lua/avante/config.lua +++ b/lua/avante/config.lua @@ -34,6 +34,7 @@ M.defaults = { mappings = { ask = "aa", edit = "ae", + refresh = "ar", diff = { ours = "co", theirs = "ct", diff --git a/lua/avante/init.lua b/lua/avante/init.lua index 00f2bf4..76a3717 100644 --- a/lua/avante/init.lua +++ b/lua/avante/init.lua @@ -34,10 +34,14 @@ H.commands = function() end sidebar:close() end, { desc = "avante: close chat window" }) + cmd("Refresh", function() + M.refresh() + end, { desc = "avante: refresh windows" }) end H.keymaps = function() vim.keymap.set({ "n", "v" }, Config.mappings.ask, M.toggle, { noremap = true }) + vim.keymap.set("n", Config.mappings.refresh, M.refresh, { noremap = true }) end H.autocmds = function() @@ -123,6 +127,32 @@ M.toggle = function() return sidebar:toggle() end +M.refresh = function() + local sidebar = M._get() + if not sidebar then + return + end + local curbuf = vim.api.nvim_get_current_buf() + + local focused = sidebar.view.buf == curbuf or sidebar.bufnr.result == curbuf or sidebar.bufnr.input == curbuf + if focused or not sidebar.view:is_open() then + return + end + + local ft = vim.api.nvim_get_option_value("filetype", { buf = curbuf }) + local listed = vim.api.nvim_get_option_value("buflisted", { buf = curbuf }) + + if ft == "Avante" or not listed then + return + end + + local curwin = vim.api.nvim_get_current_win() + + sidebar.code.win = curwin + sidebar.code.buf = curbuf + sidebar:render() +end + ---@param opts? avante.Config function M.setup(opts) ---PERF: we can still allow running require("avante").setup() multiple times to override config if users wish to diff --git a/lua/avante/range.lua b/lua/avante/range.lua index 652b919..1edd6e3 100644 --- a/lua/avante/range.lua +++ b/lua/avante/range.lua @@ -1,19 +1,16 @@ ---@class avante.Range ---@field start table Selection start point ---@field start.line number Line number of the selection start ---@field start.col number Column number of the selection start ---@field finish table Selection end point ---@field finish.line number Line number of the selection end ---@field finish.col number Column number of the selection end +---@class avante.Range +---@field start avante.RangeSelection start point +---@field finish avante.RangeSelection Selection end point local Range = {} Range.__index = Range --- Create a selection range --- @param start table Selection start point --- @param start.line number Line number of the selection start --- @param start.col number Column number of the selection start --- @param finish table Selection end point --- @param finish.line number Line number of the selection end --- @param finish.col number Column number of the selection end + +---@class avante.RangeSelection: table +---@field line number +---@field col number + +---Create a selection range +---@param start avante.RangeSelection Selection start point +---@param finish avante.RangeSelection Selection end point function Range.new(start, finish) local self = setmetatable({}, Range) self.start = start diff --git a/lua/avante/selection_result.lua b/lua/avante/selection_result.lua index e44d12d..ea891bf 100644 --- a/lua/avante/selection_result.lua +++ b/lua/avante/selection_result.lua @@ -1,12 +1,12 @@ ---@class avante.SelectionResult ---@field content string Selected content ---@field range avante.Range Selection range +---@class avante.SelectionResult +---@field content string Selected content +---@field range avante.Range Selection range local SelectionResult = {} SelectionResult.__index = SelectionResult -- Create a selection content and range ---@param content string Selected content ---@param range avante.Range Selection range +---@param content string Selected content +---@param range avante.Range Selection range function SelectionResult.new(content, range) local self = setmetatable({}, SelectionResult) self.content = content diff --git a/lua/avante/sidebar.lua b/lua/avante/sidebar.lua index 0a744b5..bd8e20d 100644 --- a/lua/avante/sidebar.lua +++ b/lua/avante/sidebar.lua @@ -141,7 +141,7 @@ function Sidebar:intialize() local filetype = api.nvim_get_option_value("filetype", { buf = self.code.buf }) local selected_code_buf = self.renderer:get_component_by_id("selected_code").bufnr - api.nvim_buf_set_option(selected_code_buf, "filetype", filetype) + api.nvim_set_option_value("filetype", filetype, { buf = selected_code_buf }) api.nvim_set_option_value("wrap", false, { win = self.renderer:get_component_by_id("selected_code").winid }) api.nvim_create_autocmd("BufEnter", { @@ -209,24 +209,6 @@ function Sidebar:intialize() return self end -function Sidebar:refresh() - local buf = vim.api.nvim_get_current_buf() - - local focused = self.view.buf == buf or self.bufnr.result == buf or self.bufnr.input == buf - if focused or not self.view:is_open() then - return - end - - local ft = vim.api.nvim_get_option_value("filetype", { buf = buf }) - local listed = vim.api.nvim_get_option_value("buflisted", { buf = buf }) - - if ft == "Avante" or not listed then - return - end - - return self -end - ---@param content string concatenated content of the buffer ---@param focus? boolean whether to focus the result view function Sidebar:update_content(content, focus, callback)