feat: live preview for plantuml documents

This commit is contained in:
Max Hohlfeld 2024-01-26 17:10:36 +01:00
parent 045de7a918
commit af0739e297
4 changed files with 24 additions and 10 deletions

View File

@ -94,8 +94,8 @@ autocmd({ 'BufNewFile', 'BufRead' }, {
}) })
autocmd({ 'BufNewFile', 'BufRead' }, { autocmd({ 'BufNewFile', 'BufRead' }, {
desc = 'When editing .md and .tex files, register commands for live preview', desc = 'When editing compileable documents, register commands for live preview',
pattern = { '*.md', '*.tex' }, pattern = { '*.md', '*.tex', '*.puml' },
callback = function() callback = function()
buf_map(0, 'n', '<leader>p', '<cmd>lua require("compileDoc").open_document_preview()<CR>', { noremap = true }) buf_map(0, 'n', '<leader>p', '<cmd>lua require("compileDoc").open_document_preview()<CR>', { noremap = true })
buf_map(0, 'n', '<leader>P', '<cmd>lua require("compileDoc").close_document_preview()<CR>', { noremap = true }) buf_map(0, 'n', '<leader>P', '<cmd>lua require("compileDoc").close_document_preview()<CR>', { noremap = true })

View File

@ -1,6 +1,6 @@
local M = {} local M = {}
local pdf_viewer_pid = 0 local output_viewer_pid = 0
local compile = function(file) local compile = function(file)
return vim.fn.jobstart({ "compiledoc", file }, { return vim.fn.jobstart({ "compiledoc", file }, {
@ -24,29 +24,40 @@ M.open_document_preview = function()
vim.api.nvim_create_autocmd("BufWritePost", { vim.api.nvim_create_autocmd("BufWritePost", {
group = "compileDoc", group = "compileDoc",
pattern = { "*.tex", "*.md" }, pattern = { "*.tex", "*.md", "*.puml" },
callback = function() compile(filename) end 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}) 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 scan = require'plenary.scandir'
local build_dir = scan.scan_dir({ '.', '..' }, { depth = 1, add_dirs = true, search_pattern = 'build' }) 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" }) local result = scan.scan_dir(build_dir[1], { depth = 3, search_pattern = ".*%.pdf" })
pdf_filename = result[1] output_filename = result[1]
end end
pdf_viewer_pid = vim.fn.jobstart({ "zathura", pdf_filename }) output_viewer_pid = vim.fn.jobstart({ output_file_viewer, output_filename })
end end
M.close_document_preview = function() M.close_document_preview = function()
vim.api.nvim_del_augroup_by_name("compileDoc") vim.api.nvim_del_augroup_by_name("compileDoc")
if (pdf_viewer_pid ~= 0) then if (output_viewer_pid ~= 0) then
vim.fn.jobstop(pdf_viewer_pid) vim.fn.jobstop(output_viewer_pid)
end end
end end

View File

@ -33,4 +33,5 @@ case "$ext" in
--include-in-header ~/.local/bin/inline_code.tex \ --include-in-header ~/.local/bin/inline_code.tex \
-o "$base".pdf "$file" ;; -o "$base".pdf "$file" ;;
tex) compile_tex ;; tex) compile_tex ;;
puml) plantuml "$file" ;;
esac esac

View File

@ -7,6 +7,8 @@
- ttf-liberation - ttf-liberation
- maim - maim
- xdotool - xdotool
- plantuml
- graphviz
state: present state: present
become: true become: true
tags: [pc, setup] tags: [pc, setup]