From 51a99dd876ca23eece619fdd28002a14c60dd1e3 Mon Sep 17 00:00:00 2001 From: Barrett Ruth Date: Tue, 3 Mar 2026 13:33:13 -0500 Subject: [PATCH] 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. --- lua/preview/init.lua | 14 ++++++++++++++ spec/init_spec.lua | 8 ++++++++ 2 files changed, 22 insertions(+) diff --git a/lua/preview/init.lua b/lua/preview/init.lua index e2cf794..5e220aa 100644 --- a/lua/preview/init.lua +++ b/lua/preview/init.lua @@ -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() diff --git a/spec/init_spec.lua b/spec/init_spec.lua index 5b97c8a..5c49276 100644 --- a/spec/init_spec.lua +++ b/spec/init_spec.lua @@ -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)