When Gnus’ article-mode is chosen (The message view), it is possible to view and reply to iCalendar events. To enable this feature, add
(require 'mu4e-icalendar) (mu4e-icalendar-setup)
to your configuration. If you want that the original invitation message be automatically trashed after sending the message created by clicking on the buttons “Accept”, “Tentative”, or “Decline”, also add:
(setq mu4e-icalendar-trash-after-reply t)
When you reply to an iCal event, a line may be automatically added to the diary file of your choice. You can specify that file with
(setq mu4e-icalendar-diary-file "/path/to/your/diary")
Note that, if the specified file is not your main diary file, add #include "/path/to/your/diary" to you main diary file to display the events.
To enable optional iCalendar→Org sync functionality, add the following:
(setq gnus-icalendar-org-capture-file "~/org/notes.org") (setq gnus-icalendar-org-capture-headline '("Calendar")) (gnus-icalendar-org-setup)
Both the capture file and the headline(s) inside it must already exist.
gnus-icalendar-org-setup adds a temporary capture
template to the variable
org-capture-templates, with the
description “used by gnus-icalendar-org”, and the shortcut key “#”.
If you want to use your own template, create it using the same key and
description. This will prevent the temporary one from being installed
next time you
gnus-icalendar-org-setup is called.
The full default capture template is:
("#" "used by gnus-icalendar-org" entry (file+olp ,gnus-icalendar-org-capture-file ,gnus-icalendar-org-capture-headline) "%i" :immediate-finish t)
where the values of the variables
gnus-icalendar-org-capture-headline are inserted via macro
If, for example, you wanted to store ical events in a date tree, prompting for the date, you could use the following:
("#" "used by gnus-icalendar-org" entry (file+olp+datetree path-to-capture-file) "%i" :immediate-finish t :time-prompt t)
Note that the default behaviour for
datetree targets in this
situation is to store the event at the date that you capture it, not at
the date that it is scheduled. That’s why I’ve suggested using the
:timeprompt t argument. This gives you an opportunity to set the
time to the correct value yourself.
You can extract the event time directly, and have the
functions use that to set the
(defun my-catch-event-time (orig-fun &rest args) "Set org-overriding-default-time to the start time of the capture event" (let ((org-overriding-default-time (date-to-time (gnus-icalendar-event:start (car args))))) (apply orig-fun args))) (advice-add 'gnus-icalendar:org-event-save :around #'my-catch-event-time)
If you do this, you’ll want to omit the
:timeprompt t setting
from your capture template.