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
4e9ce2bc8a
commit
40ebd0ebb2
1 changed files with 28 additions and 0 deletions
|
|
@ -81,6 +81,22 @@ function M.get_indent()
|
||||||
return 2
|
return 2
|
||||||
end
|
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 bufnr integer
|
||||||
---@param line_meta pending.LineMeta[]
|
---@param line_meta pending.LineMeta[]
|
||||||
local function apply_extmarks(bufnr, line_meta)
|
local function apply_extmarks(bufnr, line_meta)
|
||||||
|
|
@ -166,6 +182,18 @@ function M.render(bufnr)
|
||||||
|
|
||||||
setup_syntax(bufnr)
|
setup_syntax(bufnr)
|
||||||
apply_extmarks(bufnr, line_meta)
|
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
|
end
|
||||||
|
|
||||||
function M.toggle_view()
|
function M.toggle_view()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue