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:
parent
e19e1c3edd
commit
5d4f56807b
2 changed files with 17 additions and 15 deletions
|
|
@ -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())
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue