Lazyplanner v1.3.0
v1.3.0 — Recurrence editing
The headline of v1.3.0 is a full recurrence-rule editor. Until now, the only way to make something repeat was the quick-add parser, and an existing repeat rule couldn't be changed in-app at all. Now every repeat rule can be created and edited from the full form, with Google-Calendar-style expressiveness — plus a safer delete flow, vim-style form navigation, and a batch of recurrence bug fixes.
✨ New: the Repeat field
The full create/edit form (open with e, or the Shift-create keys) now has a Repeat field:
- Presets built from the item's own date —
None,Daily,Weekly on <weekday>,Monthly on day <n>,Yearly on <month day>. - Custom… for anything more specific (see below).
- The Detail pane shows a recurring item's rule in plain English (e.g. “every 2 weeks on Tue, Thu until Dec 12, 2026”).
Picking a rule on a one-off item makes it repeat; Repeat → None clears it.
Custom… sub-form
A compact, focused dialog for any in-vocabulary rule — it shows only the fields relevant to what you pick:
- Every N days / weeks / months / years
- Weekly: choose the weekdays on a single toggle strip (
←/→to move,Spaceto toggle) — e.g. Tuesday + Thursday - Monthly: by day-of-month or by the nth / last weekday (derived from the start date, so the rule can never contradict its own anchor)
- Yearly on the start date
- Ends: never · on a date · after N times
Editing scope
Editing, deleting, or grabbing a recurring item still prompts for this occurrence · this & future · all, and rule changes now honor it: all rewrites the master, this & future gives the split-off series its own rule, this occurrence stays a one-off.
Rules it doesn't understand are preserved
An imported rule outside the editable vocabulary shows as “Custom rule (kept)” and is preserved byte-for-byte unless you deliberately overwrite it. An unchanged rule is never rewritten.
🛡️ New: safer calendar/list deletes
Deleting a calendar or task list is not undoable, so it no longer uses the one-button confirm. You now type the collection's name to confirm — a mismatch keeps the dialog open. (Deleting individual events/tasks is unchanged; those are still undoable with u.)
⌨️ Improved: form navigation & dialog styling
- Full-screen forms use the app's NORMAL/DRILL model instead of Tab-only movement: in NORMAL,
j/k/arrows step between fields and buttons andEnteracts on the highlighted one; drilling into a field lets you type, withEscstepping back out. The mode badge shows which you're in. - All dialogs — forms, confirmations, and pickers — now share one look: an accent rounded border, a contextual title, and the terminal's own background.
- Selection highlighting is legible on both light and dark terminals everywhere, dropdowns included.
🐛 Fixes
- Recurring events no longer disappear when grabbed. Moving a repeating event by a day (grab mode, “all” scope) now shifts the whole series to the new day instead of leaving it stranded on the old one and vanishing from the calendar. An opaque imported rule blocks the day-move with a hint rather than risk corrupting it.
- Repeat/priority and other form dropdowns render their selected row legibly (no more white-on-white).
- Arrow keys now steer an open form dropdown correctly.
- Opening the Custom… sub-form over the edit form no longer strands the form open-but-unreachable when it closes.
Full Changelog: v1.2.0...v1.3.0