Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions lua/preview/compiler.lua
Original file line number Diff line number Diff line change
Expand Up @@ -215,8 +215,14 @@ function M.compile(bufnr, name, provider, ctx, opts)
return
end

if vim.bo[bufnr].modified then
vim.cmd('silent! update')
local buf_file = vim.api.nvim_buf_get_name(bufnr)
if buf_file ~= '' and buf_file == ctx.file then
if vim.bo[bufnr].modified then
vim.cmd('silent! update')
end
else
local lines = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false)
vim.fn.writefile(lines, ctx.file)
end

local s = get_state(bufnr)
Expand Down
46 changes: 28 additions & 18 deletions lua/preview/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -139,27 +139,49 @@ function M.resolve_provider(bufnr)
return ft
end

local ft_ext = {
markdown = 'md',
typst = 'typ',
tex = 'tex',
asciidoc = 'adoc',
plantuml = 'puml',
mermaid = 'mmd',
quarto = 'qmd',
}

---@param bufnr? integer
---@return preview.Context
function M.build_context(bufnr)
bufnr = bufnr or vim.api.nvim_get_current_buf()
local file = vim.api.nvim_buf_get_name(bufnr)
local root = vim.fs.root(bufnr, { '.git' }) or vim.fn.fnamemodify(file, ':h')
local ft = vim.bo[bufnr].filetype
local root

if file ~= '' and vim.uv.fs_stat(file) then
root = vim.fs.root(bufnr, { '.git' }) or vim.fn.fnamemodify(file, ':h')
else
local basename
if file ~= '' then
basename = string.format('%d-%s', bufnr, vim.fn.fnamemodify(file, ':t'))
else
local ext = ft_ext[ft] or ft
basename = string.format('preview-%d.%s', bufnr, ext)
end
file = '/tmp/' .. basename
root = '/tmp'
end

return {
bufnr = bufnr,
file = file,
root = root,
ft = vim.bo[bufnr].filetype,
ft = ft,
}
end

---@param bufnr? integer
function M.compile(bufnr)
bufnr = bufnr or vim.api.nvim_get_current_buf()
if vim.api.nvim_buf_get_name(bufnr) == '' then
vim.notify('[preview.nvim]: buffer has no file name', vim.log.levels.WARN)
return
end
local name = M.resolve_provider(bufnr)
if not name then
vim.notify('[preview.nvim]: no provider configured for this filetype', vim.log.levels.WARN)
Expand All @@ -179,10 +201,6 @@ end
---@param bufnr? integer
function M.clean(bufnr)
bufnr = bufnr or vim.api.nvim_get_current_buf()
if vim.api.nvim_buf_get_name(bufnr) == '' then
vim.notify('[preview.nvim]: buffer has no file name', vim.log.levels.WARN)
return
end
local name = M.resolve_provider(bufnr)
if not name then
vim.notify('[preview.nvim]: no provider configured for this filetype', vim.log.levels.WARN)
Expand All @@ -196,10 +214,6 @@ end
---@param bufnr? integer
function M.toggle(bufnr)
bufnr = bufnr or vim.api.nvim_get_current_buf()
if vim.api.nvim_buf_get_name(bufnr) == '' then
vim.notify('[preview.nvim]: buffer has no file name', vim.log.levels.WARN)
return
end
local name = M.resolve_provider(bufnr)
if not name then
vim.notify('[preview.nvim]: no provider configured for this filetype', vim.log.levels.WARN)
Expand All @@ -212,10 +226,6 @@ end
---@param bufnr? integer
function M.open(bufnr)
bufnr = bufnr or vim.api.nvim_get_current_buf()
if vim.api.nvim_buf_get_name(bufnr) == '' then
vim.notify('[preview.nvim]: buffer has no file name', vim.log.levels.WARN)
return
end
local name = M.resolve_provider(bufnr)
local open_config = name and config.providers[name] and config.providers[name].open
if not compiler.open(bufnr, open_config) then
Expand Down
24 changes: 12 additions & 12 deletions spec/init_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -126,43 +126,43 @@ describe('preview', function()
return msg
end

it('compile warns on unnamed buffer', function()
local bufnr = helpers.create_buffer({}, 'typst')
it('compile falls through to provider check on unnamed buffer', function()
local bufnr = helpers.create_buffer({}, 'lua')
local msg = capture_notify(function()
preview.compile(bufnr)
end)
assert.is_not_nil(msg)
assert.is_truthy(msg:find('no file name'))
assert.is_truthy(msg:find('no provider configured'))
helpers.delete_buffer(bufnr)
end)

it('toggle warns on unnamed buffer', function()
local bufnr = helpers.create_buffer({}, 'typst')
it('toggle falls through to provider check on unnamed buffer', function()
local bufnr = helpers.create_buffer({}, 'lua')
local msg = capture_notify(function()
preview.toggle(bufnr)
end)
assert.is_not_nil(msg)
assert.is_truthy(msg:find('no file name'))
assert.is_truthy(msg:find('no provider configured'))
helpers.delete_buffer(bufnr)
end)

it('clean warns on unnamed buffer', function()
local bufnr = helpers.create_buffer({}, 'typst')
it('clean falls through to provider check on unnamed buffer', function()
local bufnr = helpers.create_buffer({}, 'lua')
local msg = capture_notify(function()
preview.clean(bufnr)
end)
assert.is_not_nil(msg)
assert.is_truthy(msg:find('no file name'))
assert.is_truthy(msg:find('no provider configured'))
helpers.delete_buffer(bufnr)
end)

it('open warns on unnamed buffer', function()
local bufnr = helpers.create_buffer({}, 'typst')
it('open warns no output on unnamed buffer', function()
local bufnr = helpers.create_buffer({}, 'lua')
local msg = capture_notify(function()
preview.open(bufnr)
end)
assert.is_not_nil(msg)
assert.is_truthy(msg:find('no file name'))
assert.is_truthy(msg:find('no output file'))
helpers.delete_buffer(bufnr)
end)
end)
Expand Down
Loading