78 lines
1.9 KiB
Lua
78 lines
1.9 KiB
Lua
return {
|
|
"pablopunk/pi.nvim",
|
|
opts = {},
|
|
config = function(_, opts)
|
|
require("pi").setup(opts)
|
|
|
|
local state = {
|
|
buf = nil,
|
|
win = nil,
|
|
}
|
|
|
|
local function pane_width()
|
|
return math.max(50, math.floor(vim.o.columns * 0.35))
|
|
end
|
|
|
|
local function style_pane(win)
|
|
if not win or not vim.api.nvim_win_is_valid(win) then
|
|
return
|
|
end
|
|
pcall(vim.api.nvim_win_set_width, win, pane_width())
|
|
vim.wo[win].number = false
|
|
vim.wo[win].relativenumber = false
|
|
vim.wo[win].signcolumn = "no"
|
|
vim.wo[win].winfixwidth = true
|
|
end
|
|
|
|
local function open_pi_pane()
|
|
if state.win and vim.api.nvim_win_is_valid(state.win) then
|
|
vim.api.nvim_set_current_win(state.win)
|
|
vim.cmd("startinsert")
|
|
return
|
|
end
|
|
|
|
vim.cmd("botright vsplit")
|
|
state.win = vim.api.nvim_get_current_win()
|
|
style_pane(state.win)
|
|
|
|
if state.buf and vim.api.nvim_buf_is_valid(state.buf) then
|
|
vim.api.nvim_win_set_buf(state.win, state.buf)
|
|
else
|
|
vim.cmd("terminal pi")
|
|
state.buf = vim.api.nvim_get_current_buf()
|
|
vim.bo[state.buf].buflisted = false
|
|
vim.bo[state.buf].bufhidden = "hide"
|
|
|
|
vim.api.nvim_create_autocmd({ "BufWipeout", "TermClose" }, {
|
|
buffer = state.buf,
|
|
callback = function()
|
|
state.buf = nil
|
|
state.win = nil
|
|
end,
|
|
})
|
|
end
|
|
|
|
style_pane(state.win)
|
|
vim.cmd("startinsert")
|
|
end
|
|
|
|
local function toggle_pi_pane()
|
|
if state.win and vim.api.nvim_win_is_valid(state.win) then
|
|
vim.api.nvim_win_close(state.win, true)
|
|
state.win = nil
|
|
return
|
|
end
|
|
|
|
open_pi_pane()
|
|
end
|
|
|
|
vim.api.nvim_create_user_command("PiPane", open_pi_pane, { desc = "Open pi in a right side pane" })
|
|
vim.api.nvim_create_user_command("PiPaneToggle", toggle_pi_pane, { desc = "Toggle pi right side pane" })
|
|
end,
|
|
keys = {
|
|
{ "<leader>p", "<cmd>PiAsk<cr>", desc = "Pi Ask" },
|
|
{ "<leader>pp", "<cmd>PiPaneToggle<cr>", desc = "Pi Pane" },
|
|
{ "<leader>ps", "<cmd>PiAskSelection<cr>", mode = "v", desc = "Pi Ask Selection" },
|
|
},
|
|
}
|