MarkdownPreviewer/lua/MarkdownPreviewer/init.lua
2025-08-28 20:18:42 +02:00

71 lines
1.8 KiB
Lua

local client = require"MarkdownPreviewer.app"
local throttle = require"MarkdownPreviewer.throttle"
local nvim_buf_get_lines = vim.api.nvim_buf_get_lines
local nvim_create_augroup = vim.api.nvim_create_augroup
local nvim_create_autocmd = vim.api.nvim_create_autocmd
local nvim_del_augroup_by_id = vim.api.nvim_del_augroup_by_id
local concat = table.concat
local function get_buf_content(bufnr)
local data = concat(nvim_buf_get_lines(bufnr, 0, -1, false), '\n'):gsub('%s*$', '')
return data
end
module = {}
local server_connection
function module.setup()
server_connection = client.setup()
end
function module.open()
augroup = nvim_create_augroup("MarkdownPreviewActiveAugroup", {clear = true})
server_connection:init(function()
augroup = nvim_del_augroup_by_id(augroup)
end)
local bufnr = vim.api.nvim_get_current_buf()
server_connection:show(get_buf_content(bufnr))
server_connection:scroll(vim.fn.line('.'))
nvim_create_autocmd("BufWritePost", {
group = augroup,
buffer = bufnr,
callback = function()
server_connection:show(get_buf_content(bufnr))
end,
})
nvim_create_autocmd({"CursorMoved", "CursorMovedI"}, {
group = augroup,
buffer = bufnr,
callback = function()
server_connection:scroll({vim.fn.line('.'), vim.fn.line('$')})
end,
})
local function show()
server_connection:show(get_buf_content(bufnr))
end
nvim_create_autocmd({"TextChanged", "TextChangedI", "TextChangedP" }, {
group = augroup,
buffer = bufnr,
callback = function()
throttle.run_fn(show)
end,
})
end
function module.close()
if server_connection then
server_connection:stop()
end
end
return module