Calendar & people
Calendar
Your CalDAV calendars in the same three panes as mail, with sync, time zones and hidden calendars.
C switches between mail and the calendar. It uses the same three panes:
- Left: your calendars, grouped by server, with a small month view.
- Middle: the agenda, a running list of days and events. It opens on today, with earlier days a
kaway. - Right: the selected event, with time, place, link, attendees and notes.
Recurring events (including skipped and moved instances), all-day and multi-day events, and events in other time zones are all handled. Each calendar keeps the color the server gives it. Calendars without one get a color from your theme.
Keys
| Key | |
|---|---|
j k |
next / previous event |
h l |
previous / next day |
H L |
previous / next week |
[ ] |
previous / next month |
t |
today |
gg G |
first / last event |
^d ^u |
half a page down / up |
⏎ |
focus the event details (j k scroll them) |
/ |
filter events by title, place or notes. esc clears it |
o |
open the event’s link (a video call, a document) |
a |
quick add |
A e |
new event / edit the selected one in the form |
d |
delete (asks first) |
gm gz |
add a Google Meet / Zoom link to the selected event |
space (sidebar) |
show / hide a calendar |
$ ^r |
sync now |
C |
back to mail |
Creating, editing and deleting events is covered in Events.
Connecting calendars
Add one [[dav]] block per server. tern discovers every calendar and address book on it.
[[dav]]
name = "Fastmail"
url = "https://caldav.fastmail.com/dav/"
username = "you@example.com"
password_cmd = "pass show mail/personal"
# or: account = "Personal" to reuse that mail account's sign-in
The URL can be any URL on the server. If the configured URL doesn’t lead to calendars, tern tries the way other clients do: the server’s /.well-known/caldav redirect, then /dav/, then Nextcloud’s /remote.php/dav/.
| Server | URL |
|---|---|
| Fastmail | https://caldav.fastmail.com/dav/ |
| iCloud | https://caldav.icloud.com/ |
https://apidata.googleusercontent.com/caldav/v2/ (with account = "<your Google account>") |
|
| Nextcloud | https://cloud.example.com/remote.php/dav/ |
account = "<name>" reuses a mail account’s sign-in. That’s its OAuth token, or its IMAP password when the [[dav]] block has no password of its own. You can also manage servers from Settings → Calendars (, then 3): a to add, with presets for Fastmail, iCloud, Google and Nextcloud, ⏎ to edit, d to remove, $ to sync.
Microsoft 365 / Outlook calendars use Microsoft Graph, not CalDAV, and aren’t supported yet.
Sync
- Calendars sync when tern starts, when you open the calendar and the last sync is over 5 minutes old, every 15 minutes, and on
$. - Only what changed is downloaded when the server supports that.
- The result is cached in
~/.cache/tern/calendars.json, so the calendar opens instantly and works offline. - If a server fails, the others still sync, and the error shows next to that server.
Time zone
Times are shown and entered in one zone, US Eastern (America/New_York) by default. Change it under Settings → General → Time zone, or in config:
[ui]
calendar_timezone = "Europe/Berlin" # any IANA name, or est, cst, mst, pst, utc
Daylight time is handled. Events stored in other zones are converted.
Hidden and default calendars
spaceon a calendar in the sidebar, or in Settings → Calendars, shows or hides it. Hidden calendars are saved per server ashidden = ["<calendar id>"]in that[[dav]]block.*on a calendar in Settings → Calendars makes it the default. New events and accepted invitations go there. It’s saved asdefault_calendar = "<server name>/<calendar id>"under[ui].
Without a default, new events go to the calendar under the sidebar cursor (when the sidebar has focus), then the selected event’s calendar, then the first visible one.