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