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:
parent
c8c35ab534
commit
ebe9368fad
1 changed files with 28 additions and 0 deletions
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue