Files
dotfiles/.config/nvim/lua/plugins/pi.lua
alex wiesner 18245c778e changes
2026-04-09 11:31:06 +01:00

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" },
},
}