Skip to content

Commit

Permalink
Add GpChatLast command
Browse files Browse the repository at this point in the history
  • Loading branch information
myarcana committed Dec 15, 2024
1 parent 2372d53 commit 4b3c512
Showing 1 changed file with 42 additions and 1 deletion.
43 changes: 42 additions & 1 deletion lua/gp/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -642,7 +642,7 @@ end

---@param file_name string
---@param target number | nil # buf target
---@param kind number # nil or a toggle kind
---@param kind number | nil # nil or a toggle kind, must be toggle kind when toggle is true
---@param toggle boolean # whether to toggle
---@return number # buffer number
M.open_buf = function(file_name, target, kind, toggle)
Expand All @@ -652,6 +652,7 @@ M.open_buf = function(file_name, target, kind, toggle)
M._toggle_close(M._toggle_kind.popup)

if toggle then
---@cast kind number
M._toggle_close(kind)
end

Expand Down Expand Up @@ -865,6 +866,46 @@ M.cmd.ChatToggle = function(params, system_prompt, agent)
M.new_chat(params, true, system_prompt, agent)
end

---@param params table
---@return number | nil # buffer number or nil if no last chat
M.cmd.ChatLast = function(params)
local toggle = false
-- if the range is 2, we want to create a new chat file with the selection
if M._toggle_close(M._toggle_kind.chat) then
params.args = params.args or ""
if params.args == "" then
params.args = M.config.toggle_target
end
toggle = true
end
local last = M._state.last_chat
if last and vim.fn.filereadable(last) == 1 then
last = vim.fn.resolve(last)
-- get current buffer, for pasting selection if necessary
local cbuf = vim.api.nvim_get_current_buf()
local buf = M.helpers.get_buffer(last)
local win_found = false
if buf then
for _, w in ipairs(vim.api.nvim_list_wins()) do
if vim.api.nvim_win_get_buf(w) == buf then
vim.api.nvim_set_current_win(w)
vim.api.nvim_set_current_buf(buf)
win_found = true
break
end
end
end
buf = win_found and buf or M.open_buf(last, M.resolve_buf_target(params), toggle and M._toggle_kind.chat or nil, toggle)
-- if there is a selection, paste it
if params.range ~= 2 then
M.render.append_selection(params, cbuf, buf, M.config.template_selection)
M.helpers.feedkeys("G", "xn")
end
return buf
end
return nil
end

M.cmd.ChatPaste = function(params)
-- if there is no selection, do nothing
if params.range ~= 2 then
Expand Down

0 comments on commit 4b3c512

Please sign in to comment.