Skip to content

Commit

Permalink
Merge branch 'simple_window' of github.com:huynle/ogpt.nvim into simp…
Browse files Browse the repository at this point in the history
…le_window
  • Loading branch information
huynle committed Jan 31, 2024
2 parents b3f70d9 + 5da0630 commit 82f2dd4
Show file tree
Hide file tree
Showing 7 changed files with 133 additions and 121 deletions.
76 changes: 64 additions & 12 deletions lua/ogpt/common/layouts.lua
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
local Config = require("ogpt.config")
local utils = require("ogpt.utils")
local SimpleParameters = require("ogpt.simple_parameters")
local Layout = require("nui.layout")

Expand Down Expand Up @@ -56,19 +57,12 @@ M.edit_with_nui_layout = function(layout, input, instruction, output, parameters
return layout
end

M.edit_with_no_layout = function(layout, input, instruction, output, parameters, opts)
M.edit_with_no_layout = function(layout, parent, input, instruction, output, parameters, opts)
opts = opts or {}
opts = vim.tbl_extend("force", opts, {
buf = {
vars = {
ogpt = true,
},
},
})

input:mount()
output:mount()
instruction:mount()
vim.schedule_wrap(input:mount())
vim.schedule_wrap(output:mount())
vim.schedule_wrap(instruction:mount())

if opts.show_parameters then
parameters:mount()
Expand All @@ -77,13 +71,71 @@ M.edit_with_no_layout = function(layout, input, instruction, output, parameters,
vim.api.nvim_buf_set_option(parameters.bufnr, "modifiable", false)
vim.api.nvim_win_set_option(parameters.winid, "cursorline", true)

parameters:map("n", "d", function()
local row, _ = unpack(vim.api.nvim_win_get_cursor(parameters.winid))

local existing_order = {}
for _, key in ipairs(SimpleParameters.params_order) do
if SimpleParameters.params[key] ~= nil then
table.insert(existing_order, key)
end
end

local key = existing_order[row]
SimpleParameters.update_property(key, row, nil)
SimpleParameters.refresh_panel()
end)

parameters:map("n", "a", function()
local row, _ = unpack(vim.api.nvim_win_get_cursor(parameters.winid))
SimpleParameters.select_parameter({
cb = function(key, value)
SimpleParameters.update_property(key, row + 1, value)
end,
})
end)

parameters:map("n", "<CR>", function()
local row, _ = unpack(vim.api.nvim_win_get_cursor(parameters.winid))

local existing_order = {}
for _, key in ipairs(SimpleParameters.params_order) do
if SimpleParameters.params[key] ~= nil then
table.insert(existing_order, key)
end
end

local key = existing_order[row]
if key == "model" then
local models = require("ogpt.models")
models.select_model(parent.provider, {
cb = function(display, value)
SimpleParameters.update_property(key, row, value)
end,
})
elseif key == "provider" then
local provider = require("ogpt.provider")
provider.select_provider({
cb = function(display, value)
SimpleParameters.update_property(key, row, value)
parent.provider = Config.get_provider(value)
end,
})
else
local value = SimpleParameters.params[key]
SimpleParameters.open_edit_property_input(key, value, row, function(new_value)
SimpleParameters.update_property(key, row, utils.process_string(new_value))
end)
end
end, {})

SimpleParameters.refresh_panel()
else
parameters:hide()
-- vim.api.nvim_set_current_win(instruction.winid)
end

return nil
return layout
end

return M
36 changes: 22 additions & 14 deletions lua/ogpt/common/simple_window.lua
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ local Config = require("ogpt.config")
local SimpleView = classes.class()

function SimpleView:init(name, opts)
-- Set default values for the options table if it's not provided.
opts = vim.tbl_extend("force", {
local _defaults = {

buf = {
swapfile = false,
bufhidden = "delete",
filetype = "markdown",
syntax = "markdown",
buftype = "nofile",
},
buf_vars = {},
Expand All @@ -29,8 +29,10 @@ function SimpleView:init(name, opts)
end,
},
},
}, opts or {})
self.opts = opts
}
-- Set default values for the options table if it's not provided.
local _opts = vim.tbl_deep_extend("force", _defaults, opts or {})
self.opts = _opts
self.name = name
self.bufnr = nil
self.winid = nil
Expand All @@ -39,7 +41,7 @@ end

function SimpleView:unmount()
local force = true
local winid = vim.fn.bufwinid(self.bufnr)
local winid = vim.fn.bufwinid(self.bufnr or -1)
if winid ~= -1 then
vim.api.nvim_win_close(self.winid, force)
end
Expand All @@ -65,7 +67,7 @@ function SimpleView:mount(name, opts)
end
self.visible = true
opts = opts or {}
opts = vim.tbl_extend("force", self.opts, opts)
opts = vim.tbl_deep_extend("force", self.opts, opts)
name = name or self.name
local start_win = vim.api.nvim_get_current_win()
local buf = vim.fn.bufnr(name)
Expand All @@ -82,9 +84,13 @@ function SimpleView:mount(name, opts)
self.bufnr = vim.api.nvim_get_current_buf()
self.winid = vim.api.nvim_get_current_win()

vim.api.nvim_buf_set_option(self.bufnr, "filetype", name)

-- vim.api.nvim_exec_autocmds("Syntax", { buffer = self.bufnr, Syntax = opts.buf.filetype })

-- Set the buffer type to "nofile" to prevent it from being saved.
-- vim.api.nvim_buf_set_option(self.bufnr, "buftype", "nofile")
for opt, val in pairs(self.opts.buf) do
for opt, val in pairs(opts.buf) do
vim.api.nvim_buf_set_option(self.bufnr, opt, val)
end

Expand All @@ -98,24 +104,26 @@ function SimpleView:mount(name, opts)
-- -- vim.api.nvim_win_set_option(win, "cursorline", opts.win.cursorline)
--
-- Set buffer variables as specified in the options table.
for key, value in pairs(self.opts.buf_vars or {}) do
for key, value in pairs(opts.buf_vars or {}) do
vim.api.nvim_buf_set_var(self.bufnr, key, value)
end

-- Set the keymaps for the window as specified in the options table.
for keymap, command in pairs(self.opts.keymaps) do
for keymap, command in pairs(opts.keymaps) do
vim.keymap.set("n", keymap, command, { noremap = true, buffer = self.bufnr })
end

local group = vim.api.nvim_create_augroup(name .. "_augroup", {})
for _, event in ipairs(self.opts.events) do
local event_names = event.events
event.events = nil
for _, event in ipairs(opts.events) do
local _copy = utils.shallow_copy(event)
-- local _copy = event
local event_names = _copy.events
_copy.events = nil
opts = vim.tbl_extend("force", opts or {}, {
group = group,
buffer = self.bufnr,
})
vim.api.nvim_create_autocmd(event_names, event)
vim.api.nvim_create_autocmd(event_names, _copy)
end

if not self.opts.enter then
Expand Down
4 changes: 2 additions & 2 deletions lua/ogpt/config.lua
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ function M.defaults()
close = "<C-c>",
accept = "<C-y>", -- accept the output and write to original buffer
toggle_diff = "<C-d>", -- view the diff between left and right panes and use diff-mode
toggle_parameters = "<C-o>", -- Toggle parameters window
toggle_parameters = "<C-p>", -- Toggle parameters window
cycle_windows = "<Tab>",
use_output_as_input = "<C-u>",
},
Expand Down Expand Up @@ -197,7 +197,7 @@ function M.defaults()
draft_message = "<C-d>",
edit_message = "e",
delete_message = "d",
toggle_parameters = "<C-o>",
toggle_parameters = "<C-p>",
toggle_message_role = "<C-r>",
toggle_system_role_open = "<C-s>",
stop_generating = "<C-x>",
Expand Down
49 changes: 25 additions & 24 deletions lua/ogpt/flows/actions/simple_edit/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,6 @@ local BaseAction = require("ogpt.flows.actions.base")
local layouts = require("ogpt.common.layouts")
local utils = require("ogpt.utils")
local Config = require("ogpt.config")
local Layout = require("nui.layout")
local Split = require("nui.split")
local Popup = require("nui.popup")
local ChatInput = require("ogpt.input")
local SimpleParameters = require("ogpt.simple_parameters")

local EditAction = classes.class(BaseAction)
Expand Down Expand Up @@ -75,11 +71,11 @@ local setup_and_mount = function(lines, output_lines, ...)
vim.api.nvim_buf_set_lines(output_window.bufnr, 0, -1, false, output_lines)
end

-- set input and output settings
for _, window in ipairs({ input_window, output_window }) do
vim.api.nvim_buf_set_option(window.bufnr, "filetype", "markdown")
vim.api.nvim_win_set_option(window.winid, "number", true)
end
-- -- set input and output settings
-- for _, window in ipairs({ input_window, output_window }) do
-- vim.api.nvim_buf_set_option(window.bufnr, "filetype", "markdown")
-- vim.api.nvim_win_set_option(window.winid, "number", true)
-- end
end

function EditAction:edit_with_instructions(output_lines, selection, opts, ...)
Expand All @@ -97,13 +93,17 @@ function EditAction:edit_with_instructions(output_lines, selection, opts, ...)
else
visual_lines, start_row, start_col, end_row, end_col = unpack(selection)
end
local parameters_panel = SimpleParameters.get_parameters_panel("edits", api_params)
input_window = SimpleWindow.new("ogpt_input", Config.options.popup_window)
output_window = SimpleWindow.new("ogpt_output", Config.options.popup_window)
local parameters_panel = SimpleParameters.get_parameters_panel("edits", api_params, nil, self)
input_window = SimpleWindow.new("ogpt_input", {
buf = {
syntax = vim.api.nvim_buf_get_option(0, "filetype"),
},
})
output_window = SimpleWindow.new("ogpt_output")
-- instructions_input = ChatInput(Config.options.popup_input, {
instructions_input = SimpleWindow.new("ogpt_instruction", {
keymaps = {
["<C-CR>"] = function()
["<CR>"] = function()
local function on_submit(instruction)
-- clear input
vim.api.nvim_buf_set_lines(instructions_input.bufnr, 0, -1, false, { "" })
Expand Down Expand Up @@ -164,7 +164,7 @@ function EditAction:edit_with_instructions(output_lines, selection, opts, ...)
{
events = { "BufUnload" },
callback = function()
vim.print("turning off spinner")
-- vim.print("turning off spinner")
self:run_spinner(false)
if timer ~= nil then
timer:stop()
Expand All @@ -178,9 +178,10 @@ function EditAction:edit_with_instructions(output_lines, selection, opts, ...)
-- instructions_input.opts.on_submit(table.concat(instructions, "\n"))
-- end)

layout = layouts.edit_with_no_layout(layout, input_window, instructions_input, output_window, parameters_panel, {
show_parameters = false,
})
layout =
layouts.edit_with_no_layout(layout, self, input_window, instructions_input, output_window, parameters_panel, {
show_parameters = false,
})

-- accept output window
for _, window in ipairs({ input_window, output_window, instructions_input }) do
Expand All @@ -206,7 +207,7 @@ function EditAction:edit_with_instructions(output_lines, selection, opts, ...)
end

-- close
for _, window in ipairs({ input_window, output_window, instructions_input }) do
for _, window in ipairs({ input_window, output_window, instructions_input, parameters_panel }) do
for _, mode in ipairs({ "n", "i" }) do
window:map(mode, Config.options.edit.keymaps.close, function()
self.spinner:stop()
Expand All @@ -228,22 +229,22 @@ function EditAction:edit_with_instructions(output_lines, selection, opts, ...)
for _, mode in ipairs({ "n", "i" }) do
popup:map(mode, Config.options.edit.keymaps.toggle_parameters, function()
if parameters_open then
layouts.edit_with_no_layout(layout, input_window, instructions_input, output_window, parameters_panel, {
layouts.edit_with_no_layout(layout, self, input_window, instructions_input, output_window, parameters_panel, {
show_parameters = false,
})
else
layouts.edit_with_no_layout(layout, input_window, instructions_input, output_window, parameters_panel, {
layouts.edit_with_no_layout(layout, self, input_window, instructions_input, output_window, parameters_panel, {
show_parameters = true,
})
SimpleParameters.refresh_panel()
end
parameters_open = not parameters_open
-- set input and output settings
-- TODO
for _, window in ipairs({ input_window, output_window }) do
vim.api.nvim_buf_set_option(window.bufnr, "filetype", filetype)
vim.api.nvim_win_set_option(window.winid, "number", true)
end
-- for _, window in ipairs({ input_window, output_window }) do
-- vim.api.nvim_buf_set_option(window.bufnr, "filetype", filetype)
-- vim.api.nvim_win_set_option(window.winid, "number", true)
-- end
end, {})
end
end
Expand Down
2 changes: 1 addition & 1 deletion lua/ogpt/models.lua
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ local finder = function(provider, opts)

if not ok then
vim.print(
"OGPT ERRPR: something happened when trying request for models from " .. providers.envs.MODELS_URL
"OGPT ERRPR: something happened when trying request for models from " .. provider.envs.MODELS_URL
)
process_complete()
job_completed = true
Expand Down
Loading

0 comments on commit 82f2dd4

Please sign in to comment.