Problem: :Preview watch only registered a BufWritePost autocmd without
compiling immediately, required boilerplate to open output files after
first compilation, and was misleadingly named.
Solution: Rename watch → toggle throughout. M.toggle now compiles
immediately on activation. Add an open field to ProviderConfig: true
calls vim.ui.open(), a string[] runs the command with the output path
appended, tracked per-buffer so the file opens only once. All presets
default to { 'xdg-open' }. Health check validates opener binaries.
Guard the async compile callback against invalid buffer ids.
74 lines
1.6 KiB
Lua
74 lines
1.6 KiB
Lua
local M = {}
|
|
|
|
---@type preview.ProviderConfig
|
|
M.typst = {
|
|
ft = 'typst',
|
|
cmd = { 'typst', 'compile' },
|
|
args = function(ctx)
|
|
return { ctx.file }
|
|
end,
|
|
output = function(ctx)
|
|
return ctx.file:gsub('%.typ$', '.pdf')
|
|
end,
|
|
open = { 'xdg-open' },
|
|
}
|
|
|
|
---@type preview.ProviderConfig
|
|
M.latex = {
|
|
ft = 'tex',
|
|
cmd = { 'latexmk' },
|
|
args = function(ctx)
|
|
return { '-pdf', '-interaction=nonstopmode', ctx.file }
|
|
end,
|
|
output = function(ctx)
|
|
return ctx.file:gsub('%.tex$', '.pdf')
|
|
end,
|
|
clean = function(ctx)
|
|
return { 'latexmk', '-c', ctx.file }
|
|
end,
|
|
open = { 'xdg-open' },
|
|
}
|
|
|
|
---@type preview.ProviderConfig
|
|
M.markdown = {
|
|
ft = 'markdown',
|
|
cmd = { 'pandoc' },
|
|
args = function(ctx)
|
|
local output = ctx.file:gsub('%.md$', '.html')
|
|
return { ctx.file, '-s', '--embed-resources', '-o', output }
|
|
end,
|
|
output = function(ctx)
|
|
return ctx.file:gsub('%.md$', '.html')
|
|
end,
|
|
clean = function(ctx)
|
|
return { 'rm', '-f', (ctx.file:gsub('%.md$', '.html')) }
|
|
end,
|
|
open = { 'xdg-open' },
|
|
}
|
|
|
|
---@type preview.ProviderConfig
|
|
M.github = {
|
|
ft = 'markdown',
|
|
cmd = { 'pandoc' },
|
|
args = function(ctx)
|
|
local output = ctx.file:gsub('%.md$', '.html')
|
|
return {
|
|
ctx.file,
|
|
'-s',
|
|
'--embed-resources',
|
|
'--css',
|
|
'https://cdn.jsdelivr.net/gh/pixelbrackets/gfm-stylesheet@master/github.css',
|
|
'-o',
|
|
output,
|
|
}
|
|
end,
|
|
output = function(ctx)
|
|
return ctx.file:gsub('%.md$', '.html')
|
|
end,
|
|
clean = function(ctx)
|
|
return { 'rm', '-f', (ctx.file:gsub('%.md$', '.html')) }
|
|
end,
|
|
open = { 'xdg-open' },
|
|
}
|
|
|
|
return M
|