feat: initial version

This commit is contained in:
swaits committed 2024-11-28 12:48:37 -07:00
commit bba66a1351
5 files changed
+234

No files matched your search

+30
View File
@@ -0,0 +1,30 @@
local M = {}
local health = vim.health or require("health")
function M.check()
-- Start health check
health.start("lazyjj.nvim")
-- Check for required plugins
if pcall(require, "plenary") then
health.ok("plenary.nvim installed")
else
health.error("plenary.nvim not installed", {
"Install plenary.nvim",
"https://github.com/nvim-lua/plenary.nvim",
})
end
-- Check for lazyjj executable
if vim.fn.executable("lazyjj") == 1 then
health.ok("lazyjj executable found in PATH")
else
health.error("lazyjj executable not found", {
"Install lazyjj",
"Ensure lazyjj is in your PATH",
})
end
end
return M
+103
View File
@@ -0,0 +1,103 @@
-- 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