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
d2c9eb1808
commit
3919e3f88f
2 changed files with 17 additions and 15 deletions
|
|
@ -63,22 +63,19 @@ local function setup_syntax(bufnr)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param bufnr integer
|
|
||||||
local function setup_indentexpr(bufnr)
|
|
||||||
vim.bo[bufnr].indentexpr = 'v:lua.require("pending.buffer").get_indent()'
|
|
||||||
end
|
|
||||||
|
|
||||||
---@return integer
|
---@param above boolean
|
||||||
function M.get_indent()
|
function M.open_line(above)
|
||||||
local lnum = vim.v.lnum
|
local bufnr = task_bufnr
|
||||||
if lnum <= 1 then
|
if not bufnr or not vim.api.nvim_buf_is_valid(bufnr) then
|
||||||
return 0
|
return
|
||||||
end
|
end
|
||||||
local prev = vim.fn.getline(lnum - 1)
|
local row = vim.api.nvim_win_get_cursor(0)[1]
|
||||||
if prev == '' or prev:match('^%S') then
|
local insert_row = above and (row - 1) or row
|
||||||
return 0
|
vim.bo[bufnr].modifiable = true
|
||||||
end
|
vim.api.nvim_buf_set_lines(bufnr, insert_row, insert_row, false, { ' ' })
|
||||||
return 2
|
vim.api.nvim_win_set_cursor(0, { insert_row + 1, 2 })
|
||||||
|
vim.cmd('startinsert!')
|
||||||
end
|
end
|
||||||
|
|
||||||
---@return string
|
---@return string
|
||||||
|
|
@ -222,7 +219,6 @@ function M.open()
|
||||||
vim.api.nvim_buf_set_name(task_bufnr, 'pending://')
|
vim.api.nvim_buf_set_name(task_bufnr, 'pending://')
|
||||||
|
|
||||||
set_buf_options(task_bufnr)
|
set_buf_options(task_bufnr)
|
||||||
setup_indentexpr(task_bufnr)
|
|
||||||
vim.api.nvim_set_current_buf(task_bufnr)
|
vim.api.nvim_set_current_buf(task_bufnr)
|
||||||
set_win_options(vim.api.nvim_get_current_win())
|
set_win_options(vim.api.nvim_get_current_win())
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,12 @@ function M._setup_buf_mappings(bufnr)
|
||||||
vim.keymap.set('n', 'U', function()
|
vim.keymap.set('n', 'U', function()
|
||||||
M.undo_write()
|
M.undo_write()
|
||||||
end, opts)
|
end, opts)
|
||||||
|
vim.keymap.set('n', 'o', function()
|
||||||
|
buffer.open_line(false)
|
||||||
|
end, opts)
|
||||||
|
vim.keymap.set('n', 'O', function()
|
||||||
|
buffer.open_line(true)
|
||||||
|
end, opts)
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param bufnr integer
|
---@param bufnr integer
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue