MC's Journal

Importera Google Calendar till Emacs Calendar

Min fru Petra är en Android-ägare. Hon använder sin mobiltelefon också som kalender och har förstås upptäckt den praktiska funktionen att kunna synkronisera sin Android-kalender med Google Calendar så att hon kan komma åt kalendern även i en browser.

Det slog henne för ett tag sedan att det nog vore praktiskt om jag också visste vad hon planerade om dagarna, till exempel för att veta hur sent hon slutar en viss dag. Hon ville alltså dela med sig av sin Google Calendar. Men hur?

Google tillåter att man delar ut sin kalender till andra som använder Google Calendar. Det kräver förstås att man är inloggad hos Google. De har också något de kallar en ”privat” URL till en fil i iCalender-format för export. Den kan man komma åt helt utan inloggning. Jag fick den privata URLen till Petras kalender och skrev följande funktion:

(defun pcal ()
  "Import Petra's calendar."
  (interactive)
  (if (shell-command "fetch -q -o ~/conf/petra-basic.ics https://www.google.com/calendar/ical/...") 
      (progn
        (if (file-exists-p "~/conf/petra-cal")
            (delete-file "~/conf/petra-cal"))

        (if (get-buffer "petra-cal")
            (kill-buffer "petra-cal"))

        (if (get-buffer "petra-basic.ics")
            (kill-buffer "petra-basic.ics"))

        (icalendar-import-file "~/conf/petra-basic.ics"
                               "~/conf/petra-cal"))))

Programmet fetch ingår i FreeBSD:s base. Det hämtar en fil på angiven URL och lagrar den lokalt. Hade inte fetch redan funnits hade jag kanske använt wget eller curl i stället.

Observera att funktionen icalender-import-file är stendum. Om du kör den två gånger på samma iCalender-fil så kommer din Emacs Calendar att ha samma händelser dubblerade. Det är därför jag raderar filen petra-cal och tar bort eventuell kalenderbuffert innan jag gör importen.

Nu fungerar allt. Jag använder själv enbart Emacs Calendar för att ha koll på datum och sådant men nu får jag alltså också markeringar när Petra har antecknat något för dagen och kan lätt se när hon förväntas hem.

För mina egna kalenderbehov använder jag en vanlig textfil per år med veckovyer som fungerar både som löpande journal och kalender för att komma ihåg saker. Kombinerat med Emacs Calender för att slå upp datum fungerar det rätt bra. Jag började med det här systemet 1999 och med tiden har jag blivit rätt van vid det. Jag brukar producera kanske 1–2 megabyte text per år i en sådan fil. En slags Org Mode light, kanske. Den senaste tiden har jag lekt lite med Org Mode för att se om jag kan gå över till det men har kommit fram till att det jag har är gott nog, åtminstone tills vidare.