diff --git a/lua/pending/buffer.lua b/lua/pending/buffer.lua index c543c7d..250ed8e 100644 --- a/lua/pending/buffer.lua +++ b/lua/pending/buffer.lua @@ -182,6 +182,23 @@ local function apply_inline_row(bufnr, row, m, icons) end end +---@param line string +---@return string? +local function infer_status(line) + local ch = line:match('^/%d+/- %[(.)%]') or line:match('^- %[(.)%]') + if not ch then + return nil + end + if ch == 'x' then + return 'done' + elseif ch == '>' then + return 'wip' + elseif ch == '=' then + return 'blocked' + end + return 'pending' +end + ---@param bufnr integer ---@return nil function M.reapply_dirty_inline(bufnr) @@ -191,6 +208,10 @@ function M.reapply_dirty_inline(bufnr) local icons = config.get().icons for row in pairs(_dirty_rows) do local m = _meta[row] + if m and m.type == 'task' then + local line = vim.api.nvim_buf_get_lines(bufnr, row - 1, row, false)[1] or '' + m.status = infer_status(line) or m.status + end if m then vim.api.nvim_buf_clear_namespace(bufnr, ns_inline, row - 1, row) apply_inline_row(bufnr, row - 1, m, icons)