@@ -3,10 +3,6 @@ |
| 3 | 3 | `rcal` is a terminal calendar for quick month, week, and day navigation. It is |
| 4 | 4 | built in Rust with `ratatui`, `crossterm`, and the `time` crate. |
| 5 | 5 | |
| 6 | | -This first milestone is meant for local daily trial use. It opens on the |
| 7 | | -current month, keeps keyboard navigation fast, falls back to week or day views |
| 8 | | -when terminal space is tight, and shows agenda previews from the current local |
| 9 | | -events file plus holiday sources. |
| 10 | 6 | |
| 11 | 7 | ## Install |
| 12 | 8 | |
@@ -67,6 +63,47 @@ fixed for now. |
| 67 | 63 | Nager.Date is cache-first and opt-in. Default startup does not need network |
| 68 | 64 | access. |
| 69 | 65 | |
| 66 | +## Controls |
| 67 | + |
| 68 | +- Arrow keys move the selected date. |
| 69 | +- `?` opens contextual help. |
| 70 | +- `+` opens the Create event modal. |
| 71 | +- In day view, `c` opens the Copy confirmation for the selected editable event. |
| 72 | +- In day view, `d` opens the Delete confirmation for the selected editable event. |
| 73 | +- `Enter` opens the focused day view. |
| 74 | +- `Esc` returns from day view to month view. |
| 75 | +- `q` exits. |
| 76 | +- In day view, Left/Right move to the previous or next day while staying in day |
| 77 | + view. |
| 78 | +- Digits jump immediately to a day in the visible month. A quick second digit |
| 79 | + refines the selected day, so `1` selects day 1 and `1` then `6` selects day |
| 80 | + 16. |
| 81 | +- Weekday initials jump within the selected week. Use `tu` for Tuesday, `th` |
| 82 | + for Thursday, `su` for Sunday, and `sa` for Saturday. |
| 83 | +- Left click selects a visible date; double-click a visible date to open day |
| 84 | + view. |
| 85 | + |
| 86 | +The create/edit modal supports timed events, single-day all-day events, |
| 87 | +recurrence, location, notes, and multiple reminder offsets. Its `Calendar` |
| 88 | +field controls where the event is saved; use Left/Right on that field to cycle |
| 89 | +between local storage and configured editable provider calendars. Local events |
| 90 | +are stored as JSON, while Microsoft events are written through Graph and then |
| 91 | +shown immediately from the provider cache. |
| 92 | +Reminder notifications are delivered by a user-level background service. Use |
| 93 | +`rcal reminders install` to install it, `rcal reminders status` to inspect it, |
| 94 | +and `rcal reminders test` to send a test notification. On macOS, notification |
| 95 | +delivery uses `osascript` because it is more reliable for CLI-launched |
| 96 | +notifications than the generic notification backend. Reminder install snapshots |
| 97 | +the resolved events and state file paths, so reinstall the service after config |
| 98 | +changes that affect reminders. |
| 99 | + |
| 100 | +## Layout |
| 101 | + |
| 102 | +`rcal` tries to render the full month first. If the terminal is too constrained, |
| 103 | +it falls back to the selected week. If even that cannot fit cleanly, it falls |
| 104 | +back to a focused day summary. |
| 105 | + |
| 106 | + |
| 70 | 107 | ## Microsoft Provider |
| 71 | 108 | |
| 72 | 109 | Microsoft Graph is the first remote provider. It is cache-first: the TUI reads |
@@ -150,45 +187,6 @@ create/edit/delete/copy operations for Microsoft events back through Graph. |
| 150 | 187 | Provider reminders fire from cached provider events after a sync; the reminder |
| 151 | 188 | daemon does not sync remote calendars itself. |
| 152 | 189 | |
| 153 | | -## Controls |
| 154 | | - |
| 155 | | -- Arrow keys move the selected date. |
| 156 | | -- `?` opens contextual help. |
| 157 | | -- `+` opens the Create event modal. |
| 158 | | -- In day view, `c` opens the Copy confirmation for the selected editable event. |
| 159 | | -- In day view, `d` opens the Delete confirmation for the selected editable event. |
| 160 | | -- `Enter` opens the focused day view. |
| 161 | | -- `Esc` returns from day view to month view. |
| 162 | | -- `q` exits. |
| 163 | | -- In day view, Left/Right move to the previous or next day while staying in day |
| 164 | | - view. |
| 165 | | -- Digits jump immediately to a day in the visible month. A quick second digit |
| 166 | | - refines the selected day, so `1` selects day 1 and `1` then `6` selects day |
| 167 | | - 16. |
| 168 | | -- Weekday initials jump within the selected week. Use `tu` for Tuesday, `th` |
| 169 | | - for Thursday, `su` for Sunday, and `sa` for Saturday. |
| 170 | | -- Left click selects a visible date; double-click a visible date to open day |
| 171 | | - view. |
| 172 | | - |
| 173 | | -The create/edit modal supports timed events, single-day all-day events, |
| 174 | | -recurrence, location, notes, and multiple reminder offsets. Its `Calendar` |
| 175 | | -field controls where the event is saved; use Left/Right on that field to cycle |
| 176 | | -between local storage and configured editable provider calendars. Local events |
| 177 | | -are stored as JSON, while Microsoft events are written through Graph and then |
| 178 | | -shown immediately from the provider cache. |
| 179 | | -Reminder notifications are delivered by a user-level background service. Use |
| 180 | | -`rcal reminders install` to install it, `rcal reminders status` to inspect it, |
| 181 | | -and `rcal reminders test` to send a test notification. On macOS, notification |
| 182 | | -delivery uses `osascript` because it is more reliable for CLI-launched |
| 183 | | -notifications than the generic notification backend. Reminder install snapshots |
| 184 | | -the resolved events and state file paths, so reinstall the service after config |
| 185 | | -changes that affect reminders. |
| 186 | | - |
| 187 | | -## Layout |
| 188 | | - |
| 189 | | -`rcal` tries to render the full month first. If the terminal is too constrained, |
| 190 | | -it falls back to the selected week. If even that cannot fit cleanly, it falls |
| 191 | | -back to a focused day summary. |
| 192 | 190 | |
| 193 | 191 | ## Current Limits |
| 194 | 192 | |