From 8189c3b08a7bd316371f9b4dcf49a3dc3875e641 Mon Sep 17 00:00:00 2001 From: Frederik Vanrenterghem Date: Wed, 5 Mar 2025 22:12:21 +0800 Subject: [PATCH] Voeg post ivm CalDAV en orgmode toe. --- source/assets/caldav-diagram.png | Bin 0 -> 41043 bytes source/posts/emacs_calendar.org | 109 +++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 source/assets/caldav-diagram.png create mode 100644 source/posts/emacs_calendar.org diff --git a/source/assets/caldav-diagram.png b/source/assets/caldav-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..dddb4e9affb6e2fd4c545854bb07349fd6fc0e89 GIT binary patch literal 41043 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%0A7{LGV+O?VMJl$wS;HMq#^ zZ~XI6(|0KvuQ!GyII73}_XqX=_jeSt>f1ql>;L<@Bz2wD)iuS3Hbv6Jx`5=T=xHC+ K%G0n7{Qm$t9_JGP literal 0 HcmV?d00001 diff --git a/source/posts/emacs_calendar.org b/source/posts/emacs_calendar.org new file mode 100644 index 0000000..0b50e9f --- /dev/null +++ b/source/posts/emacs_calendar.org @@ -0,0 +1,109 @@ +:PROPERTIES: +:CREATED: [2025-03-05 Wed 19:57] +:END: +#+date: <2025-03-05 Wed 22:08> +#+title: Using Emacs Org mode to manage my appointments. +#+filetags: :emacs:Linux:automation:elisp: +#+OPTIONS: \n:t + +#+BEGIN_PREVIEW +~Memento, homo, quia pulvis es, et in pulverem reverteris.~ + +After some months of trying out a prototype approach and tweaking it, I believe to have landed on a viable system to manage my appointments seamlessly from within Emacs, on my Android phone and any other calendar application. + +I use a calendar self-hosted on a Nextcloud instance, accessible through the CalDAV protocol - the Distributed Authoring and Versioning protocol for calendar data that came out of Apple in the early 2000s (interesting details on that in [[https://www.researchgate.net/publication/3419713_Open_Calendar_Sharing_and_Scheduling_with_CalDAV][Dusseault, Lisa & Whitehead, J.. (2005). Open Calendar Sharing and Scheduling with CalDAV. Internet Computing, IEEE. 9. 81 - 89. 10.1109/MIC.2005.43. ]]) + +The calendar data from the server is synchronised with my phone using [[https://www.davx5.com/][DAVx5]] where I currently use the [[https://github.com/FossifyOrg/Calendar][Fossify Calendar]] to display and make or alter appointments, and on my laptop using [[https://github.com/dengste/org-caldav][org-caldav]] in GNU Emacs, writing to a Org mode calendar file. I occasionally also use the web-based view from the Nextcloud web client from within a browser. +#+END_PREVIEW + +Graphically, this results in a a system as shown hereunder: + +#+BEGIN_SRC dot :results file :file ../assets/caldav-diagram.png :exports results + digraph G { + server [label="Nextcloud CalDAV server"]; + org [label="Emacs Org mode", color = "purple"]; + server -> laptop; + laptop -> server; + server -> phone [label = "DAVx5"]; + phone -> server; + laptop -> org [label = "org-caldav", fontcolor = "purple"]; + org -> laptop; + laptop -> Firefox; + Firefox -> server; + } +#+END_SRC + +#+RESULTS: +[[file:../assets/caldav-diagram.png]] + +The Org file accessed through Emacs is set up using a /date tree/ as the outline mode of the file. This creates headings by year and by month that can be folded and unfolded using standard functionality from Org mode. That offers a unique way to access appointments - alternatives to have headlines by week exist as well, but I don't have enough appointments to warrant that level of granularity in the outline of the file. + +#+BEGIN_SRC org + ,* 2025 + ,** 2025-01 January + ,*** New Year lunch + ,:PROPERTIES: + ,:location: Our place + ,:END: + Lunch with family to celebrate the new year. + <2025-01-01 Wed 11:30>--<2025-01-01 Wed 15:00> + ,** 2025-02 February + ,*** New Year's resolutions progress review + <2025-02-01 Sat>--<2025-02-02 Sun> +#+END_SRC + +Alternatively, I can view my appointments on a traditional calendar layout using the [[https://github.com/kiwanami/emacs-calfw][Emacs calendar framework or calfw]]. + +2025 / April + [ < ] [ > ] [Today] [Day] [Week] [Two Weeks] [Month] ++---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+ +| Sunday | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | ++---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+ +| 30 | 31 | 1 April Fools' Day | 2 | 3 | 4 | 5 | +| | | | | | | | +| | | | | | | | ++---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+ +| 6 | 7 | 8 | 9 | 10 | 11 | 12 | +| | | | | | | | +| | | | | | | | ++---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+ +| 13 Passover | 14 | 15 | 16 | 17 | 18 Good Friday | 19 | +| | | | | | | | +| | | | | | | | ++---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+ +| 20 Easter Sunday | 21 First Day of Ridvan | 22 | 23 | 24 | 25 | 26 | +| | | | | | | | +| | | | | | | | ++---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+ +| 27 | 28 | 29 Ninth Day of Ridvan | 30 | 1 | 2 Twelfth Day of Ridvan | 3 | +| | | | | | | | +| | | | | | | | ++---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+ + +I also set up a new capture template, allowing the quick creation of an appointment using C-c c followed by a. + +#+BEGIN_SRC emacs-lisp + (org-capture-templates + '(("a" "Appointment" entry + (file+olp+datetree "~/Nextcloud/notes/calendar-nextcloud.org") + "* %?\n :PROPERTIES:\n :location: %^{Location}\n :END:\n%(fv/org-capture-appointment-timestam)\n\n" + :jump-to-captured t + :empty-lines 1 + :tree-type month + :time-prompt t))) + + (defun fv/org-capture-appointment-timestamp (&optional duration) + "Get an Org timestamp for an appointment. + Prompt for a start time, calculate the end time by adding DURATION (default 30 + minutes), and return a formatted Org timestamp with start and end times." + (let* ((duration (or duration 30)) + (start-time (org-read-date t t nil "From:")) + (end-time (time-add start-time (seconds-to-time (* duration 60))))) + (concat (format-time-string (org-time-stamp-format t) start-time) + "--" + (format-time-string (org-time-stamp-format t) end-time)))) +#+END_SRC + +One gripe at the moment: the capture template needs a custom function to properly capture a time range, even though the standard Org timestamp can be formatted in a time range easily using syntax like ~2pm+1h~ to create a 1h block starting at 14:00. When using this within a capture template using the shorthand ~%^T~ which prompts for a date, the timestamp is unfortunately simplified using [[https://github.com/tkf/org-mode/blob/c2ebeea6f68f2ef804d387c238e4acccf655dc64/lisp/org-capture.el#L897-L907][some logic in the template engine]] at the moment. + +Full setup can be found in [[http://git.vanrenterghem.biz/Dotty.git/blob/7c1ae2a1b7c0674664d97d06a61c232920a72b90:/emacs/.emacs.d/init.el][Dotty, my dot files repository]]. -- 2.39.5