Lazyplanner v1.2.0
LazyPlanner v1.2.0 — Smarter Quick-Add
This release makes the one-line quick-add input far more capable. When you create an event or task, you can now express times, dates, recurrence, and location inline — and the parser tells you when something looks like a typo instead of silently burying it in the title.
Quick-add stays deliberately conservative: a token is only claimed when it clearly matches a documented form, and anything unrecognized becomes part of the title. Tokens are whitespace-delimited, so bob@example.com and task!5 remain inert title text.
✨ New
- Relative dates —
next <weekday>(the next one, +7 days),next week,next month, andin N days/weeks/months, on top of the existingtoday/tomorrow/fri/jul 20/7/20/2026-07-20forms. Month math clamps correctly (Jan 31 + 1 month → Feb 28/29, never spilling into March). - Time ranges —
5-6pm,14:00-15:30, and friends. A right-side am/pm distributes to a bare left half (5-6pm= 5pm–6pm), and an end at or before the start crosses midnight (11pm-1am). Events take the range's end (or the usual 1-hour default); a task's due is the range's start. A bare number is never read as a time. - Simple recurrence —
daily/weekly/monthly/yearly,every day/week/month/year,every <weekday>(weekly on that day), andevery <month> <day>(yearly on that date). This is the first way to create a recurring item entirely in-app. With no explicit date typed, the recurrence anchors the start/due itself (every mon→ the next Monday); an explicit date always wins. - Location —
@cafeteriaor@"room 204"for multi-word values, set on both events and tasks. Tasks now carry a Location and show it in the Detail pane. - Obvious-typo warnings with keep-open re-prompt — a mistyped priority (
!hgh), an unclosed@"…, a fuzzy follower (next tuedsay,in 3 dayz), or an impossible time/date (25:00,5-6xm,2026-07-40) keeps the quick-add input open showing the warning and creates nothing. Resubmit the identical text to accept it as-is. Warnings fire only on an unmistakable intent anchor — plausible prose likeMy Event!!!!!,email bob@example.com,24/7, andhttp://x.comstay silent.
🎁 Free riders
:goto and the quick-set-due sd command both run through the same parser, so they gained the entire relative-date family with no extra work.
📝 Notes
- The full edit form still does not rewrite an existing recurrence rule — that's coming in v1.3.0 (recurrence-rule UI). Quick-add is currently the only in-app way to create a recurring item.
- Full grammar is documented in
:help(new Quick-add tokens section) and the README.
Verification
All six build steps landed repro-first with a green full gate (go test ./..., go vet, staticcheck, go build). The iCalendar/quick-add fuzz targets were extended with the new grammar plus an invariant that a warning only ever fires alongside a real intent anchor (~1M execs clean).
Full Changelog: v1.1.0...v1.2.0