From af0739e297c343ecee9703d79341e4394c00410f Mon Sep 17 00:00:00 2001 From: Max Hohlfeld Date: Fri, 26 Jan 2024 17:10:36 +0100 Subject: [PATCH] feat: live preview for plantuml documents --- roles/nvim/files/init_pc.lua | 4 ++-- roles/nvim/files/lua/compileDoc.lua | 27 +++++++++++++++++++-------- roles/scripts/files/compiledoc | 1 + roles/scripts/tasks/main.yml | 2 ++ 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/roles/nvim/files/init_pc.lua b/roles/nvim/files/init_pc.lua index c46d0f0..751c61c 100644 --- a/roles/nvim/files/init_pc.lua +++ b/roles/nvim/files/init_pc.lua @@ -94,8 +94,8 @@ autocmd({ 'BufNewFile', 'BufRead' }, { }) autocmd({ 'BufNewFile', 'BufRead' }, { - desc = 'When editing .md and .tex files, register commands for live preview', - pattern = { '*.md', '*.tex' }, + desc = 'When editing compileable documents, register commands for live preview', + pattern = { '*.md', '*.tex', '*.puml' }, callback = function() buf_map(0, 'n', 'p', 'lua require("compileDoc").open_document_preview()', { noremap = true }) buf_map(0, 'n', 'P', 'lua require("compileDoc").close_document_preview()', { noremap = true }) diff --git a/roles/nvim/files/lua/compileDoc.lua b/roles/nvim/files/lua/compileDoc.lua index 5d1f3b6..8058386 100644 --- a/roles/nvim/files/lua/compileDoc.lua +++ b/roles/nvim/files/lua/compileDoc.lua @@ -1,6 +1,6 @@ local M = {} -local pdf_viewer_pid = 0 +local output_viewer_pid = 0 local compile = function(file) return vim.fn.jobstart({ "compiledoc", file }, { @@ -24,29 +24,40 @@ M.open_document_preview = function() vim.api.nvim_create_autocmd("BufWritePost", { group = "compileDoc", - pattern = { "*.tex", "*.md" }, + pattern = { "*.tex", "*.md", "*.puml" }, callback = function() compile(filename) end }) - local pdf_filename = string.gsub(filename, "%..+$", ".pdf") + local output_file_extension + local output_file_viewer + + if string.match(filename, "%.tex$") or string.match(filename, "%.md") then + output_file_extension = ".pdf" + output_file_viewer = "zathura" + elseif string.match(filename, "%.puml$") then + output_file_extension = ".png" + output_file_viewer = "feh" + end + + local output_filename = string.gsub(filename, "%..+$", output_file_extension) vim.fn.jobwait({compile_job}) - if not file_exists(pdf_filename) then + if not file_exists(output_filename) then local scan = require'plenary.scandir' local build_dir = scan.scan_dir({ '.', '..' }, { depth = 1, add_dirs = true, search_pattern = 'build' }) local result = scan.scan_dir(build_dir[1], { depth = 3, search_pattern = ".*%.pdf" }) - pdf_filename = result[1] + output_filename = result[1] end - pdf_viewer_pid = vim.fn.jobstart({ "zathura", pdf_filename }) + output_viewer_pid = vim.fn.jobstart({ output_file_viewer, output_filename }) end M.close_document_preview = function() vim.api.nvim_del_augroup_by_name("compileDoc") - if (pdf_viewer_pid ~= 0) then - vim.fn.jobstop(pdf_viewer_pid) + if (output_viewer_pid ~= 0) then + vim.fn.jobstop(output_viewer_pid) end end diff --git a/roles/scripts/files/compiledoc b/roles/scripts/files/compiledoc index 3865bab..e7bb5ba 100644 --- a/roles/scripts/files/compiledoc +++ b/roles/scripts/files/compiledoc @@ -33,4 +33,5 @@ case "$ext" in --include-in-header ~/.local/bin/inline_code.tex \ -o "$base".pdf "$file" ;; tex) compile_tex ;; + puml) plantuml "$file" ;; esac diff --git a/roles/scripts/tasks/main.yml b/roles/scripts/tasks/main.yml index 54eea99..c1942bc 100644 --- a/roles/scripts/tasks/main.yml +++ b/roles/scripts/tasks/main.yml @@ -7,6 +7,8 @@ - ttf-liberation - maim - xdotool + - plantuml + - graphviz state: present become: true tags: [pc, setup]