feat: add statusline function

Problem: no way to expose compiling/watching state to statusline
plugins like lualine or heirline without polling status() and
formatting it manually.

Solution: add `require('preview').statusline()` that returns
'compiling', 'watching', or '' for direct use in statusline components.
This commit is contained in:
Barrett Ruth 2026-03-03 13:33:13 -05:00
parent 0b16ff7178
commit 51a99dd876
Signed by: barrett
GPG key ID: A6C96C9349D2FC81
2 changed files with 22 additions and 0 deletions

View file

@ -40,6 +40,7 @@
---@field clean fun(bufnr?: integer)
---@field toggle fun(bufnr?: integer)
---@field status fun(bufnr?: integer): preview.Status
---@field statusline fun(bufnr?: integer): string
---@field get_config fun(): preview.Config
local M = {}
@ -179,6 +180,19 @@ function M.status(bufnr)
return compiler.status(bufnr)
end
---@param bufnr? integer
---@return string
function M.statusline(bufnr)
bufnr = bufnr or vim.api.nvim_get_current_buf()
local s = compiler.status(bufnr)
if s.compiling then
return 'compiling'
elseif s.watching then
return 'watching'
end
return ''
end
M._test = {
---@diagnostic disable-next-line: assign-type-mismatch
reset = function()

View file

@ -100,4 +100,12 @@ describe('preview', function()
helpers.delete_buffer(bufnr)
end)
end)
describe('statusline', function()
it('returns empty string when idle', function()
local bufnr = helpers.create_buffer({})
assert.are.equal('', preview.statusline(bufnr))
helpers.delete_buffer(bufnr)
end)
end)
end)