This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
-- Neovim preview for Luma files.
|
||||
--
|
||||
-- Set LUMA_MARKDOWN_BIN to the path of the generated executable, or make
|
||||
-- luma_markdown available on PATH:
|
||||
-- export LUMA_MARKDOWN_BIN="$PWD/luma_markdown"
|
||||
|
||||
local preview_buf = nil
|
||||
local preview_win = nil
|
||||
|
||||
local function update_luma_preview()
|
||||
local src_buf = vim.api.nvim_get_current_buf()
|
||||
local lines = vim.api.nvim_buf_get_lines(src_buf, 0, -1, false)
|
||||
local cmd = vim.env.LUMA_MARKDOWN_BIN or "luma_markdown"
|
||||
local output = vim.fn.systemlist(cmd, lines)
|
||||
|
||||
if not preview_buf or not vim.api.nvim_buf_is_valid(preview_buf) then
|
||||
preview_buf = vim.api.nvim_create_buf(false, true)
|
||||
vim.api.nvim_buf_set_option(preview_buf, "buftype", "nofile")
|
||||
vim.api.nvim_buf_set_option(preview_buf, "bufhidden", "hide")
|
||||
vim.api.nvim_buf_set_option(preview_buf, "swapfile", false)
|
||||
vim.api.nvim_buf_set_option(preview_buf, "filetype", "markdown")
|
||||
end
|
||||
|
||||
vim.api.nvim_buf_set_lines(preview_buf, 0, -1, false, output)
|
||||
|
||||
if not preview_win or not vim.api.nvim_win_is_valid(preview_win) then
|
||||
vim.cmd "rightbelow vsplit"
|
||||
preview_win = vim.api.nvim_get_current_win()
|
||||
vim.api.nvim_win_set_buf(preview_win, preview_buf)
|
||||
|
||||
local src_win = vim.fn.bufwinid(src_buf)
|
||||
if src_win ~= -1 then vim.api.nvim_set_current_win(src_win) end
|
||||
end
|
||||
end
|
||||
|
||||
vim.api.nvim_create_autocmd("BufWritePost", {
|
||||
pattern = "*.luma",
|
||||
callback = update_luma_preview,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_user_command("LumaPreview", update_luma_preview, {})
|
||||
|
||||
local timer = nil
|
||||
local function debounced_update()
|
||||
if timer then timer:stop() end
|
||||
timer = vim.defer_fn(update_luma_preview, 150)
|
||||
end
|
||||
|
||||
vim.api.nvim_create_autocmd({ "TextChanged", "TextChangedI" }, {
|
||||
pattern = "*.luma",
|
||||
callback = debounced_update,
|
||||
})
|
||||
Reference in New Issue
Block a user