From ed3f218dfb69501c5db951fcdca5e61aa1eb58ed Mon Sep 17 00:00:00 2001 From: Folkert Kevelam Date: Fri, 12 Sep 2025 17:21:05 +0200 Subject: [PATCH] add buffer change event callback --- lua/MarkdownPreviewer/init.lua | 64 ++++++++++++++++++++++++++-------- 1 file changed, 49 insertions(+), 15 deletions(-) diff --git a/lua/MarkdownPreviewer/init.lua b/lua/MarkdownPreviewer/init.lua index b932c39..5c78a83 100644 --- a/lua/MarkdownPreviewer/init.lua +++ b/lua/MarkdownPreviewer/init.lua @@ -20,23 +20,12 @@ 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:base(vim.fn.fnamemodify(vim.uri_to_fname(vim.uri_from_bufnr(bufnr)), 'p:h')) - server_connection:show(get_buf_content(bufnr)) - server_connection:scroll(vim.fn.line('.')) - +local function SetAutoCmd(augroup, server, bufnr) nvim_create_autocmd("BufWritePost", { group = augroup, buffer = bufnr, callback = function() - server_connection:show(get_buf_content(bufnr)) + server:show(get_buf_content(bufnr)) end, }) @@ -44,12 +33,12 @@ function module.open() group = augroup, buffer = bufnr, callback = function() - server_connection:scroll({vim.fn.line('.'), vim.fn.line('$')}) + server:scroll({vim.fn.line('.'), vim.fn.line('$')}) end, }) local function show() - server_connection:show(get_buf_content(bufnr)) + server:show(get_buf_content(bufnr)) end nvim_create_autocmd({"TextChanged", "TextChangedI", "TextChangedP" }, { @@ -59,7 +48,52 @@ function module.open() throttle.run_fn(show) end, }) +end +local function FirstSend(server, bufnr) + print("Sending data to server from buffer " .. bufnr) + server:base(vim.fn.fnamemodify(vim.uri_to_fname(vim.uri_from_bufnr(bufnr)), 'p:h')) + server:show(get_buf_content(bufnr)) + server:scroll(vim.fn.line('.')) +end + +function module.open() + augroup = nvim_create_augroup("MarkdownPreviewActiveAugroup", {clear = true}) + chgbuffergroup = nvim_create_augroup("MarkdownChangeBufferActiveAugroup", {clear = true}) + + server_connection:init(function() + if augroup then + augroup = nvim_del_augroup_by_id(augroup) + end + + if chgbuffergroup then + chgbuffergroup = nvim_del_augroup_by_id(chgbuffergroup) + end + end) + + local bufnr = vim.api.nvim_get_current_buf() + FirstSend(server_connection, bufnr) + SetAutoCmd(augroup, server_connection, bufnr) + + nvim_create_autocmd("BufEnter", { + group = chgbuffergroup, + callback = function() + local new_buf_nr = vim.api.nvim_get_current_buf() + local ft = vim.api.nvim_buf_get_option(new_buf_nr, "filetype") + if ft == "markdown" then + print("filetype new buffer: " .. ft) + FirstSend(server_connection, new_buf_nr) + if augroup then + augroup = nvim_del_augroup_by_id(augroup) + end + augroup = nvim_create_augroup("MarkdownPreviewActiveAugroup", {clear = True}) + SetAutoCmd(augroup, server_connection, new_buf_nr) + else + print("Not a markdown buffer") + augroup = nvim_del_augroup_by_id(augroup) + end + end, + }) end function module.close()