98 lines
2.7 KiB
Lua
98 lines
2.7 KiB
Lua
local M = {}
|
|
-- Remove local conf = config.load()
|
|
-- We'll have each function accept 'conf' from outside or handle it in init.lua
|
|
-- local config = require('chatgpt_nvim.config')
|
|
-- local conf = config.load()
|
|
local prompts = require('chatgpt_nvim.prompts')
|
|
|
|
local debug_bufnr = nil
|
|
|
|
-- We'll store a reference to conf at runtime
|
|
local runtime_conf = nil
|
|
|
|
function M.setup_ui(conf)
|
|
runtime_conf = conf
|
|
if runtime_conf.improved_debug then
|
|
for _, buf in ipairs(vim.api.nvim_list_bufs()) do
|
|
local name = vim.api.nvim_buf_get_name(buf)
|
|
if name == "ChatGPT_Debug_Log" then
|
|
vim.api.nvim_buf_delete(buf, {force = true})
|
|
end
|
|
end
|
|
debug_bufnr = vim.api.nvim_create_buf(false, true)
|
|
vim.api.nvim_buf_set_name(debug_bufnr, "ChatGPT_Debug_Log")
|
|
vim.api.nvim_buf_set_option(debug_bufnr, "filetype", "log")
|
|
end
|
|
end
|
|
|
|
function M.debug_log(msg)
|
|
if runtime_conf and runtime_conf.improved_debug and debug_bufnr then
|
|
vim.api.nvim_buf_set_lines(debug_bufnr, -1, -1, false, { msg })
|
|
else
|
|
if runtime_conf and runtime_conf.debug then
|
|
vim.api.nvim_out_write("[chatgpt_nvim:debug] " .. msg .. "\n")
|
|
end
|
|
end
|
|
end
|
|
|
|
function M.pick_directories(dirs, conf)
|
|
local selected_dirs = {}
|
|
local selection_instructions = prompts["file-selection-instructions"]
|
|
local lines = { selection_instructions }
|
|
|
|
for _, d in ipairs(dirs) do
|
|
table.insert(lines, d)
|
|
end
|
|
|
|
for _, buf in ipairs(vim.api.nvim_list_bufs()) do
|
|
local name = vim.api.nvim_buf_get_name(buf)
|
|
if name:match("ChatGPT_File_Selection") then
|
|
vim.api.nvim_buf_delete(buf, {force = true})
|
|
end
|
|
end
|
|
|
|
local bufnr = vim.api.nvim_create_buf(false, false)
|
|
vim.api.nvim_buf_set_name(bufnr, "ChatGPT_File_Selection")
|
|
vim.api.nvim_buf_set_option(bufnr, "filetype", "markdown")
|
|
vim.api.nvim_buf_set_option(bufnr, "bufhidden", "wipe")
|
|
vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, lines)
|
|
|
|
local function on_write()
|
|
local new_lines = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false)
|
|
local final_dirs = {}
|
|
for _, l in ipairs(new_lines) do
|
|
if l ~= "" and not l:match("^Delete lines") and not l:match("^#") then
|
|
table.insert(final_dirs, l)
|
|
end
|
|
end
|
|
selected_dirs = final_dirs
|
|
vim.api.nvim_buf_set_option(bufnr, "modified", false)
|
|
end
|
|
|
|
vim.api.nvim_create_autocmd("BufWriteCmd", {
|
|
buffer = bufnr,
|
|
once = true,
|
|
callback = function()
|
|
on_write()
|
|
vim.cmd("bd! " .. bufnr)
|
|
end
|
|
})
|
|
|
|
vim.cmd("split")
|
|
vim.cmd("buffer " .. bufnr)
|
|
|
|
vim.wait(30000, function()
|
|
local winids = vim.api.nvim_tabpage_list_wins(0)
|
|
for _, w in ipairs(winids) do
|
|
local b = vim.api.nvim_win_get_buf(w)
|
|
if b == bufnr then
|
|
return false
|
|
end
|
|
end
|
|
return true
|
|
end)
|
|
|
|
return selected_dirs
|
|
end
|
|
|
|
return M |