Files
2024-11-28 12:48:37 -07:00

104 lines
2.4 KiB
Lua

-- File: lua/lazyjj/init.lua
local M = {}
local function open_floating_window()
-- Get plenary's float window module which handles window creation
local plenary = require("plenary.window.float")
-- Create centered floating window at 90% of screen size with rounded borders
local win = plenary.percentage_range_window(0.9, 0.8, {
border = {
"╭",
"─",
"╮",
"│",
"│",
"╰",
"─",
"╯",
},
})
-- Set buffer filetype for syntax highlighting
vim.bo[win.bufnr].filetype = "lazyjj"
-- Ensure window is completely opaque
vim.wo[win.win_id].winblend = 0
-- Hide buffer when window closes rather than delete it
vim.cmd("setlocal bufhidden=hide")
-- Automatically hide window when focus is lost
vim.api.nvim_create_autocmd("WinLeave", {
buffer = win.bufnr,
callback = function()
vim.cmd("hide")
end,
once = true,
})
-- Return window and buffer handles for further manipulation if needed
return win.win_id, win.bufnr
end
function M.setup(opts)
-- Store user config for later use
M.config = vim.tbl_deep_extend("force", {
-- Default configuration options can go here
mapping = "<leader>jj", -- Default keymapping
}, opts or {})
-- Create user command
vim.api.nvim_create_user_command("LazyJJ", M.open, {})
-- Set up keymapping if provided
if M.config.mapping then
vim.keymap.set("n", M.config.mapping, M.open, {
noremap = true,
silent = true,
desc = "LazyJJ", -- This will work with WhichKey and similar plugins
})
end
end
function M.open()
-- Store current window ID for late -- Check if lazyjj is available
local cmd = "lazyjj"
if vim.fn.executable(cmd) ~= 1 then
vim.notify(
"lazyjj executable not found. Please install lazyjj and ensure it's in your PATH.",
vim.log.levels.ERROR
)
return
end
local prev_win = vim.api.nvim_get_current_win()
-- Create floating window
open_floating_window()
-- Execute lazyjj in the floating window
vim.fn.termopen(cmd, {
-- Return to previous window on exit
on_exit = function()
if vim.api.nvim_win_is_valid(prev_win) then
vim.api.nvim_set_current_win(prev_win)
end
end,
-- Handle potential errors
on_stderr = function(_, data)
for _, line in ipairs(data) do
if line:match("^Error:.*") then
vim.notify("lazyjj error: " .. line, vim.log.levels.ERROR)
end
end
end,
})
-- Enter insert mode to allow immediate interaction
vim.cmd("startinsert")
end
return M