No description
Find a file
Barrett Ruth 7fb3289b21
fix(diff): preserve due/rec when absent from buffer line (#68)
* fix(diff): preserve due/rec when absent from buffer line

Problem: `diff.apply` overwrites `task.due` and `task.recur` with `nil`
whenever those fields aren't present as inline tokens in the buffer line.
Because metadata is rendered as virtual text (never in the line text),
every description edit silently clears due dates and recurrence rules.

Solution: Only update `due`, `recur`, and `recur_mode` in the existing-
task branch when the parsed entry actually contains them (non-nil). Users
can still set/change these inline by typing `due:<date>` or `rec:<rule>`;
clearing them requires `:Pending edit <id> -due`.

* refactor: remove project-local store discovery

Problem: `store.resolve_path()` searched upward for `.pending.json`,
silently splitting task data across multiple files depending on CWD.

Solution: `resolve_path()` now always returns `config.get().data_path`.
Remove `M.init()` and the `:Pending init` command and tab-completion
entry. Remove the project-local health message.

* refactor: extract log.lua, standardise [pending.nvim]: prefix

Problem: Notifications were scattered across files using bare
`vim.notify` with inconsistent `pending.nvim: ` prefixes, and the
`debug` guard in `textobj.lua` and `init.lua` was duplicated inline.

Solution: Add `lua/pending/log.lua` with `info`, `warn`, `error`, and
`debug` functions (prefix `[pending.nvim]: `). `log.debug` only fires
when `config.debug = true` or the optional `override` param is `true`.
Replace all `vim.notify` callsites and remove inline debug guards.

* feat(parse): configurable input date formats

Problem: `due:` only accepted ISO `YYYY-MM-DD` and built-in keywords;
users expecting locale-style dates like `03/15/2026` or `15-Mar-2026`
had no way to configure alternative input formats.

Solution: Add `input_date_formats` config field (string[]). Each entry
is a strftime-like format string supporting `%Y`, `%y`, `%m`, `%d`,
`%e`, `%b`, `%B`. Formats are tried in order after built-in keywords
fail. When no year specifier is present the current or next year is
inferred. Update vimdoc and add 8 parse_spec tests.
2026-03-05 12:46:54 -05:00
.github doc: minify readme (#24) 2026-02-25 09:40:06 -05:00
doc fix(diff): preserve due/rec when absent from buffer line (#68) 2026-03-05 12:46:54 -05:00
lua/pending fix(diff): preserve due/rec when absent from buffer line (#68) 2026-03-05 12:46:54 -05:00
plugin fix(diff): preserve due/rec when absent from buffer line (#68) 2026-03-05 12:46:54 -05:00
scripts fix: harden sync backends and fix edit recompute (#66) 2026-03-05 11:50:13 -05:00
spec fix(diff): preserve due/rec when absent from buffer line (#68) 2026-03-05 12:46:54 -05:00
syntax refactor: adopt markdown-style checkbox buffer format (#20) 2026-02-24 23:21:55 -05:00
.busted build: add tooling and dev environment configs 2026-02-24 15:08:44 -05:00
.editorconfig build: initial repo scaffold 2026-02-24 15:08:35 -05:00
.gitignore fix: harden sync backends and fix edit recompute (#66) 2026-03-05 11:50:13 -05:00
.luarc.json refactor(config): default icons to ascii (#55) 2026-03-04 17:49:30 -05:00
.pre-commit-config.yaml ci: format 2026-02-24 15:17:24 -05:00
flake.lock build: add tooling and dev environment configs 2026-02-24 15:08:44 -05:00
flake.nix ci: nix 2026-03-04 14:07:04 -05:00
LICENSE build: initial repo scaffold 2026-02-24 15:08:35 -05:00
pending.nvim-scm-1.rockspec feat: rename 2026-02-24 15:21:44 -05:00
README.md fix: harden sync backends and fix edit recompute (#66) 2026-03-05 11:50:13 -05:00
selene.toml build: add tooling and dev environment configs 2026-02-24 15:08:44 -05:00
stylua.toml build: add tooling and dev environment configs 2026-02-24 15:08:44 -05:00
vim.yaml build: add tooling and dev environment configs 2026-02-24 15:08:44 -05:00

pending.nvim

Edit tasks like text. :w saves them.

demo

Requirements

  • Neovim 0.10+
  • (Optionally) curl for Google Calendar and Google Task sync

Installation

Install with your package manager of choice or via luarocks:

luarocks install pending.nvim

Documentation

:help pending.nvim

Icons

All display characters are configurable. Defaults produce markdown-style checkboxes ([ ], [x], [!]):

vim.g.pending = {
  icons = {
    pending = ' ', done = 'x', priority = '!',
    due = '.', recur = '~', category = '#',
  },
}

See :help pending.Icons for nerd font examples.

Acknowledgements