==========
== 0x2f ==
==========

Saving events with Emacs org-mode

I recently subscribed to many e-mail newsletters of local museums and art galleries. I wanted to stay up to date with what’s happening in the city.

The problem is that these e-mails inform you of the event in plain text that you’d need to save to your own organizer/calendar program:

Come in on [4 weeks from now] 18:00 because there’ll be a new exhibition

Because the event is a long time for now, you need to write it down somewhere so you don’t forget. In a perfect world they would attach an .ical calendar invite so you could add the event to your CalDAV calendar with just a click. Since that’s not the case, you may try to add the event to your CalDAV calendar by hand. It’s really slow. It distracts you from you checking your inbox, since you need to change the tab to the calendar. It’s a far cry from coming across an event on social media and just clicking “interested”. Saving events this way made me fantasize about owning a paper organizer. “God, I could just flip to the page with the day of the event in a second and just type it in there”.

As an alternative, I realized that capturing events with Emacs org-mode then viewing them in the agenda buffer is really comfortable.

My agenda buffer looks like this:

Friday     15 August 2025
  events:      7:30...... Cyclical sports class at local gym
               8:00...... ----------------
              10:00...... ----------------
              12:00...... ----------------
              12:17...... now - - - - - - - - - - - - - - - - - - - - - - - - -
              14:00...... ----------------
              16:00...... ----------------
              18:00...... ----------------
  events:     19:30...... Cyclical sports class 2 at local gym
              20:00...... ----------------
  events:     Album release from favorite artist
Saturday   16 August 2025
  events:      9:00...... Local museum visits come with free tour guide show-around

To add the event, I have an org-mode capture template (shown later) that I invoke. It asks me to input the date first. What was slow in CalDAV is now fast in Emacs. If you type in “22 18:00” into the date field, org-mode knows that you mean the 22nd day of the current month at 18:00. There’s no tedious date picker like in a calendar program. An event date is made cyclical on a week-by-week basis by adding “+1w” when inputting the date. Also faster than a calendar program.

Events are saved in an events.org file on my computer. The capture template saves the events in a weekly “date tree”, meaning that in the events.org file they appear like this:

\* 2025
\** 2025-W34
\*** 2025-08-22 Friday
\**** Exhibition opening at [some address here] [2025-08-22 fri 18:00]

This makes it easy to get an idea of what will be happening in a week far into the future as you open the events.org file and browse it.

My capture template to achieve this is as such:

(setq org-capture-templates '(("e" "Event" entry
                               (file+olp+datetree "~/org/events.org")
                               "* %? %U" :time-prompt t :tree-type week)))

Notice that we are using “%U” instead of “%T” so that the timestamp is inactive. This is because active timestamps are more important in the agenda buffer - a few days before the event you’ll see reminders like “In 3d. [your event]”. The events I’m saving here aren’t super important so I don’t need reminders like these.

To summarize, my workflow looks like this:

  1. Browse my e-mail in the morning in the web browser app of my e-mail provider
  2. Notice an e-mail with an art exhibition opening date, e.g: Baker Street 8, 22.08.2025 18:00 (for the opening), but the exhibiton will be there till 22.09.2025 in general
  3. Go to Emacs and press C-c c to open the capture template picker and press “e” (as we configured in the code snippet above)
  4. The capture template shows me a date picker first (because we set :time-prompt t). I type in 22 18:00. Emacs understands that this is “22nd day of current month at 18:00” and expands it to “22.08.2025 18:00” on its own. I press ENTER.
  5. Then a capture buffer opens where I can fill out any other notes that I need - e.g. the final deadline when the exhibition ends, or the address.
  6. Press C-c C-c to add the event to the events.org file
  7. Press C-c a a to view the agenda buffer for the current week (you can also press C-u 14 C-c a a to view the agenda buffer for the next two weeks instead of just one)

I wonder if steps 3-7 can be replaced by org-protocol and some LLM to format a vague date format selection from an e-mail to an org-mode event.