diff options
author | Raul Benencia <id@rbenencia.name> | 2023-02-21 07:58:52 -0800 |
---|---|---|
committer | Raul Benencia <id@rbenencia.name> | 2023-02-21 07:59:48 -0800 |
commit | 4cd3b3371dcf77171b98dc12f48da248b2f703b2 (patch) | |
tree | 2aa66db67ff38b2a8c3d39802f2cd619cb378fbf /.emacs.local.d/modes | |
parent | 259fae280c5d10d08defaa03c8c86aa97ca59cf5 (diff) |
emacs: export calendar to ics
Diffstat (limited to '.emacs.local.d/modes')
-rw-r--r-- | .emacs.local.d/modes/org.el | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/.emacs.local.d/modes/org.el b/.emacs.local.d/modes/org.el index ce4695a..c22047e 100644 --- a/.emacs.local.d/modes/org.el +++ b/.emacs.local.d/modes/org.el @@ -110,7 +110,15 @@ ;; Based on Prot's config: ;; https://protesilaos.com/codelog/2021-12-09-emacs-org-block-agenda/ (setq my-org-agenda-custom-commands - `(("P" "Projects and tasks" + `( + ("X" "Export files" agenda "-CANCELLED" + ((org-agenda-with-colors nil) + (org-agenda-prefix-format "%t %s") + (org-agenda-current-time-string ,(car (last org-agenda-time-grid))) + (org-agenda-fontify-priorities nil) + (org-agenda-remove-tags t)) + ,(list my-org-agenda-private-local-path)) + ("P" "Projects and tasks" ( (agenda "" ( (org-agenda-overriding-header "📌 Today's agenda\n") @@ -686,3 +694,22 @@ as the default task." ;; org-modern (add-hook 'org-mode-hook 'org-modern-mode) (add-hook 'org-agenda-finalize-hook #'org-modern-agenda) + +;; Credits: https://200ok.ch/posts/2022-02-13_integrating_org_mode_agenda_into_other_calendar_apps.html +(defun org-agenda-export-to-ics () + (set-org-agenda-files) + ;; Run all custom agenda commands that have a file argument. + (org-batch-store-agenda-views) + + ;; Org mode correctly exports TODO keywords as VTODO events in ICS. + ;; However, some proprietary calendars do not really work with + ;; standards (looking at you Google), so VTODO is ignored and only + ;; VEVENT is read. + (with-current-buffer (find-file-noselect org-agenda-private-local-path) + (goto-char (point-min)) + (while (re-search-forward "VTODO" nil t) + (replace-match "VEVENT")) + (save-buffer)) + + ;; Copy the ICS file to a remote server (Tramp paths work). + (copy-file org-agenda-private-local-path org-agenda-private-remote-path t)) |