From c0c1577a4687c60cb186173ba6c99f5cf6d5c2c4 Mon Sep 17 00:00:00 2001 From: Huy Le Date: Sun, 4 Feb 2024 14:46:43 -0700 Subject: [PATCH] fixing sessions --- lua/ogpt/flows/chat/base.lua | 5 ++-- lua/ogpt/flows/chat/sessions.lua | 46 +++++++++++++------------------- 2 files changed, 21 insertions(+), 30 deletions(-) diff --git a/lua/ogpt/flows/chat/base.lua b/lua/ogpt/flows/chat/base.lua index db755be..515c73d 100644 --- a/lua/ogpt/flows/chat/base.lua +++ b/lua/ogpt/flows/chat/base.lua @@ -69,7 +69,8 @@ function Chat:welcome() self:set_cursor({ 1, 0 }) self:set_system_message(nil, true) - if #self.session.conversation > 0 then + local conversation = self.session.conversation or {} + if #conversation > 0 then for idx, item in ipairs(self.session.conversation) do if item.type == SYSTEM then self:set_system_message(item.text, true) @@ -852,7 +853,7 @@ function Chat:set_keymaps() -- new session self:map(Config.options.chat.keymaps.new_session, function() self:new_session() - Sessions:refresh() + self.sessions_panel:refresh() end, { self.parameters_panel, self.chat_input, self.chat_window }) -- cycle panes diff --git a/lua/ogpt/flows/chat/sessions.lua b/lua/ogpt/flows/chat/sessions.lua index 04ec2b1..5013d4f 100644 --- a/lua/ogpt/flows/chat/sessions.lua +++ b/lua/ogpt/flows/chat/sessions.lua @@ -1,6 +1,3 @@ -local Popup = require("ogpt.common.popup") -local Sessions = Popup:extend("Parameters") - local Popup = require("ogpt.common.popup") local Config = require("ogpt.config") local Session = require("ogpt.flows.chat.session") @@ -9,8 +6,10 @@ local InputWidget = require("ogpt.common.input_widget") local namespace_id = vim.api.nvim_create_namespace("OGPTNS") +local Sessions = Popup:extend("Sessions") + function Sessions:set_current_line() - self.current_line, _ = unpack(vim.api.nvim_win_get_cursor(self.panel.winid)) + self.current_line, _ = unpack(vim.api.nvim_win_get_cursor(self.winid)) self:render_list() end @@ -52,7 +51,7 @@ function Sessions:delete_session() end function Sessions:render_list() - vim.api.nvim_buf_clear_namespace(self.panel.bufnr, namespace_id, 0, -1) + vim.api.nvim_buf_clear_namespace(self.bufnr, namespace_id, 0, -1) local details = {} for i, session in pairs(self.sessions) do @@ -75,15 +74,10 @@ function Sessions:render_list() table.insert(empty_lines, "") end - vim.api.nvim_buf_set_lines(self.panel.bufnr, line - 1, line - 1 + #empty_lines, false, empty_lines) + vim.api.nvim_buf_set_lines(self.bufnr, line - 1, line - 1 + #empty_lines, false, empty_lines) for _, d in ipairs(details) do - self.vts[line - 1] = vim.api.nvim_buf_set_extmark( - self.panel.bufnr, - namespace_id, - line - 1, - 0, - { virt_text = d, virt_text_pos = "overlay" } - ) + self.vts[line - 1] = + vim.api.nvim_buf_set_extmark(self.bufnr, namespace_id, line - 1, 0, { virt_text = d, virt_text_pos = "overlay" }) line = line + 1 end end @@ -98,39 +92,35 @@ end function Sessions:init(opts) Sessions.super.init(self, vim.tbl_extend("force", Config.options.chat.sessions_window, opts), opts.edgy) self.vts = {} - self:get_panel(opts) -end -function Sessions:get_panel(opts) local set_session_cb = opts.set_session_cb - self.sessions = Session.list_sessions() self.active_line = 1 self.current_line = 1 self.set_session_cb = set_session_cb + self:set_keymaps(opts) + self:render_list() +end - self.panel = Popup(Config.options.chat.sessions_window, Config.options.chat.edgy) - - self.panel:map("n", Config.options.chat.keymaps.select_session, function() +function Sessions:set_keymaps(opts) + self:map("n", Config.options.chat.keymaps.select_session, function() self:set_session() end, { noremap = true }) - self.panel:map("n", Config.options.chat.keymaps.rename_session, function() + self:map("n", Config.options.chat.keymaps.rename_session, function() self:rename_session() end, { noremap = true }) - self.panel:map("n", Config.options.chat.keymaps.delete_session, function() + self:map("n", Config.options.chat.keymaps.delete_session, function() self:delete_session() end, { noremap = true, silent = true }) vim.api.nvim_create_autocmd("CursorMoved", { - buffer = self.panel.bufnr, - callback = self.set_current_line, + buffer = self.bufnr, + callback = function() + self:set_current_line() + end, }) - - self:render_list() - - return self.panel end return Sessions