fix(buffer): replace indentexpr with dedicated o/O mappings

Problem: setup_indentexpr always returned 0 because no task line
starts with whitespace (the /ID/ prefix begins with /), so the
return 2 branch was dead code. Pressing o or O opened a blank line
at column 0 with no ID prefix, which the diff parser cannot
recognise as a task.

Solution: remove setup_indentexpr and M.get_indent() entirely; add
M.open_line(above) which inserts a two-space stub line and enters
insert mode at the end so the user types directly into the new task
body. The diff layer already handles lines matching ^  .+ as new
tasks. Add o and O buffer-local mappings in init.lua.
This commit is contained in:
Barrett Ruth 2026-02-24 19:48:41 -05:00 committed by Barrett Ruth
parent d2c9eb1808
commit 3919e3f88f
2 changed files with 17 additions and 15 deletions

View file

@ -63,22 +63,19 @@ local function setup_syntax(bufnr)
end)
end
---@param bufnr integer
local function setup_indentexpr(bufnr)
vim.bo[bufnr].indentexpr = 'v:lua.require("pending.buffer").get_indent()'
end
---@return integer
function M.get_indent()
local lnum = vim.v.lnum
if lnum <= 1 then
return 0
---@param above boolean
function M.open_line(above)
local bufnr = task_bufnr
if not bufnr or not vim.api.nvim_buf_is_valid(bufnr) then
return
end
local prev = vim.fn.getline(lnum - 1)
if prev == '' or prev:match('^%S') then
return 0
end
return 2
local row = vim.api.nvim_win_get_cursor(0)[1]
local insert_row = above and (row - 1) or row
vim.bo[bufnr].modifiable = true
vim.api.nvim_buf_set_lines(bufnr, insert_row, insert_row, false, { ' ' })
vim.api.nvim_win_set_cursor(0, { insert_row + 1, 2 })
vim.cmd('startinsert!')
end
---@return string
@ -222,7 +219,6 @@ function M.open()
vim.api.nvim_buf_set_name(task_bufnr, 'pending://')
set_buf_options(task_bufnr)
setup_indentexpr(task_bufnr)
vim.api.nvim_set_current_buf(task_bufnr)
set_win_options(vim.api.nvim_get_current_win())