feat: add calendar visibility picker
Derive session calendars from event metadata and apply one visibility contract to month rendering, appointment focus, and search without filtering persistence writes. Add keyboard picker coverage, full-model save regression tests, documentation, warning-clean builds, sanitizer verification, and live PTY terminal restoration checks.
This commit is contained in:
@@ -40,6 +40,13 @@ owns result presentation and occurrence identity. Recurring searches expand a
|
||||
finite window of five years on either side of the selected date so an unbounded
|
||||
rule cannot turn an interactive query into unbounded work.
|
||||
|
||||
Calendar visibility is session presentation state. The controller derives its
|
||||
calendar list from event calendar identifiers and applies the same domain
|
||||
predicate to month rendering, focus traversal, and search. Hidden events remain
|
||||
in the canonical collection passed to persistence, and focus identities are
|
||||
always derived from that complete collection so filtering cannot renumber
|
||||
events with duplicate or missing UIDs.
|
||||
|
||||
Timed events retain their source basis: UTC, floating process-local time, or an
|
||||
IANA `TZID`. C++20 time-zone conversion keeps zoned recurrences at their civil
|
||||
wall time across daylight-saving transitions. The month grid displays instants
|
||||
|
||||
@@ -72,6 +72,7 @@ The full terminal is treated as a responsive canvas:
|
||||
| Return to month/unfocus | `Esc` |
|
||||
| Search appointments | `/`, then type and press `Enter` |
|
||||
| Choose search result | arrows, `j` / `k`, then `Enter` |
|
||||
| Toggle calendar visibility | `c`, arrows or `j` / `k`, then `Enter` |
|
||||
| Help | `?` |
|
||||
| Quit | `q` |
|
||||
|
||||
@@ -85,8 +86,10 @@ recurring instances appear throughout the month, preserve civil time across
|
||||
daylight-saving changes, and expose their source zone and whole-series mutation
|
||||
semantics in the reader. `/` searches occurrence-aware title, description,
|
||||
location, and calendar-ID matches in a finite ten-year window centered on the
|
||||
selected date. The next local-data work adds agenda and calendar visibility
|
||||
views, then advanced recurrence overrides and rule editing.
|
||||
selected date. `c` toggles session-only calendar visibility consistently across
|
||||
the grid, appointment focus, and search without filtering the model supplied to
|
||||
persistence. The next local-data work adds an agenda view, then advanced
|
||||
recurrence overrides and rule editing.
|
||||
|
||||
## Accessibility
|
||||
|
||||
|
||||
@@ -10,13 +10,14 @@
|
||||
- Bounded session undo/redo, exact external-change detection, and backup recovery
|
||||
- Windowed recurrence expansion, EXDATE, IANA TZID, and multi-day segment cues
|
||||
- Occurrence-aware appointment search with exact result-to-grid navigation
|
||||
- Session calendar toggles shared by month rendering, focus, and search
|
||||
- Meson build, Nix development shell, desktop entry, and Hyprland launcher
|
||||
- Seeded sample data when explicitly requested, never silent data mutation
|
||||
|
||||
## 0.1 — complete local calendar
|
||||
|
||||
- Advanced recurrence editing, RDATE/overrides, and embedded VTIMEZONE support
|
||||
- Agenda view, calendar toggles, import/export, configurable week start
|
||||
- Agenda view, import/export, configurable week start
|
||||
- Screen-reader-friendly linear view and full Unicode display-width handling
|
||||
|
||||
## 0.2 — durable cache and provider boundary
|
||||
|
||||
Reference in New Issue
Block a user