Lazyplanner v1.4.0
v1.4.0 — SELECT mode: multi-select & bulk operations
LazyPlanner gains a vim-style multi-select layer. Press V to anchor a
selection, extend it with the ordinary movement keys, then apply one bulk
action to the whole range.
New
SELECT mode (V)
- Works in three contexts: the task tree, the un-drilled calendar
(a range of days), and a drilled day's item list. - The range is a contiguous anchor→cursor span, extended with normal motion:
hjkl/arrows,gg/G,f/b, and vim counts (10j). - The status bar shows a
SELECTbadge and a liveN selectedcount; the
selected range is highlighted in the view (reverse-video rows in the tree,
outlined day boxes on the calendar). - Modes nest vim-style:
DRILL → SELECT → GRAB, with eachEscunwinding
exactly one level.
Bulk operations (one keystroke, one undo step)
Space— complete every selected task (children before parents, so a
folder and its last open subtask can be finished in one pass; recurring
todos advance one occurrence, exactly like single-itemSpace).d— delete the selection, with a single confirmation naming the real
resource count (a selected subtask of a selected parent is absorbed, never
counted or deleted twice).y/Y— cut / copy multiple subtrees to the clipboard (task tree
only), thenp/Ppastes them together — including across lists.m— bulk grab: shift every selected item by whole days (h/l) or
weeks (j/k) as one uniform date-shift.Escreturns to SELECT with the
range intact so a grab can be retried.- Every bulk action is all-or-nothing: a mid-batch failure rolls back
cleanly, and a full success is a singleuundo step. - Items an action can't apply to (read-only calendars, recurring events,
undated tasks, folders with open subtasks, already-done tasks) are skipped
and counted — the flash reports exactly what was skipped and why, and
confirmation counts always match what is actually acted on.
Fixed
- The always-visible help bar now shows the active grab's controls and
granularity for the whole grab (single grab:±hour/±dayper context;
bulk grab:±day/±week) instead of the ordinary controls line — or, mid
bulk-grab, a staleSELECT · hjkl extendline that no longer matched what
the keys did. - A malformed
RELATED-TOparent cycle in hand-edited/foreign.icsdata
could hang the UI during a bulk delete's ancestor walk — now cycle-guarded,
consistent with the "malformed iCalendar is never fatal" invariant. Vpressed while an overview panel (Calendars/Tasks) is focused flashes a
hint instead of silently anchoring a selection that motion could never
extend.- A bare
0in SELECT no longer leaks through to the week/day hour-zoom
reset (a0continuing a count, e.g.10j, still works); modified motion
keys (Ctrl-arrows) can no longer sneak a pane resize in mid-select.
Docs
README.mdkeybindings table gainsV(and a previously missingmgrab
row); the?/:helpcheat sheet gains a Select section.
Full gate green (go test ./..., go vet, staticcheck, race + display-stress suites) on every commit.
Full Changelog: v1.3.0...v1.4.0