feat(buffer): add category folds via foldexpr

Problem: category_view had no fold support, making it harder to
focus on one category in large lists.

Solution: add M.get_fold() returning '>1' for headers, '1' for task
lines, and '0' for blanks. M.render() now sets foldmethod=expr
(foldlevel=99) in category view and foldmethod=manual in priority.
This commit is contained in:
Barrett Ruth 2026-02-24 18:29:54 -05:00 committed by Barrett Ruth
parent 4e9ce2bc8a
commit 40ebd0ebb2

View file

@ -81,6 +81,22 @@ function M.get_indent()
return 2
end
---@return string
function M.get_fold()
local lnum = vim.v.lnum
local m = _meta[lnum]
if not m then
return '0'
end
if m.type == 'header' then
return '>1'
elseif m.type == 'task' then
return '1'
else
return '0'
end
end
---@param bufnr integer
---@param line_meta pending.LineMeta[]
local function apply_extmarks(bufnr, line_meta)
@ -166,6 +182,18 @@ function M.render(bufnr)
setup_syntax(bufnr)
apply_extmarks(bufnr, line_meta)
for _, winid in ipairs(vim.fn.win_findbuf(bufnr)) do
if current_view == 'category' then
vim.wo[winid].foldmethod = 'expr'
vim.wo[winid].foldexpr = 'v:lua.require("pending.buffer").get_fold()'
vim.wo[winid].foldlevel = 99
vim.wo[winid].foldenable = true
else
vim.wo[winid].foldmethod = 'manual'
vim.wo[winid].foldenable = false
end
end
end
function M.toggle_view()