From: Eric S Fraga <ucecesf@ucl.ac.uk>
To: Daniel Mahler <dmahler@gmail.com>
Cc: org-mode mailing list <emacs-orgmode@gnu.org>
Subject: Diary synchronising with Google calendar (was Re: Google CL and org-mode)
Date: Tue, 06 Jul 2010 16:30:25 +0100 [thread overview]
Message-ID: <87y6dopqzy.wl%ucecesf@ucl.ac.uk> (raw)
In-Reply-To: <AANLkTil1sLUkJZy-Ow4XI_bSY0gw32KQZloRaKDBw48C@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 5161 bytes --]
On Tue, 6 Jul 2010 00:14:00 +0200, Daniel Mahler <dmahler@gmail.com> wrote:
>
> On Mon, Jul 5, 2010 at 11:54 PM, Eric S Fraga <ucecesf@ucl.ac.uk> wrote:
> > On Mon, 5 Jul 2010 17:10:55 +0200, Daniel Mahler <dmahler@gmail.com> wrote:
> >>
> >> Hi,
> >>
> >> Have you looked at g-client?
> >
> > Thanks. I did look at g-client a long time ago. It should provide
> > everything we need but it's much more than I want to even start
> > considering... I just don't have the time unfortunately.
> >
> > The google command line scripts, on the other hand, are
> > straightforward and will give me (others?) 90% of the functionality I
> > want.
> >
> > Mind you, I've been playing a bit and Google's "quick add" syntax
> > leaves a bit to be desired. There's no formal specification and it
> > doesn't quite work, especially trying to get a repeated entry at a
> > given time of day.
> >
>
> GoogleCL is actually a rather thin wrapper around the gdata python
> client library,
> which essentially just adds the commandline processing.
> Maybe the way to go is to call gdata directly via pymacs.
>
> cheers
> Daniel
Yes, using pymacs and interacting directly with Google's API may be
the way to go. However, given my usual time constraints, I'm going
for the 80% solution, as described below:
My use case is that I spend almost all of time in Emacs (and almost
all of that time within org) but I am sometimes but not often away
from one of my computers with only my Android phone. When I'm away
from the computers, I need to be able to check my diary and maybe make
the odd addition to it. I am not particularly concerned with note
taking with my mobile phone (too annoying! and MobileOrg is probably a
better solution for synchronised note taking in any case...) so the
following meets this use case.
I have two relevant org files: diary.org and googlecalendar.org. The
first is the default target for inserting diary entries from org's
agenda view; the latter contains all items scheduled from within
Google's calendar application, typically from my phone, and downloaded
and processed using the awk script I posted to this list last week.
On the Google calendar side, I have two calendars: the default and one
called "org". The first is used when I actually schedule something
using Google. The latter is populated directly by org using Google's
command line scripts with this advice on org's diary insertion
function:
#+begin_src emacs-lisp
(defadvice org-agenda-add-entry-to-org-agenda-diary-file
(after add-to-google-calendar)
"Add a new Google calendar entry that mirrors the diary entry just created by org-mode."
(let ((type (ad-get-arg 0))
(text (ad-get-arg 1))
(d1 (ad-get-arg 2))
(year1 (nth 2 d1))
(month1 (car d1))
(day1 (nth 1 d1))
(d2 (ad-get-arg 3))
entry dates)
(if (or (not (eq type 'block)) (not d2))
(setq dates (format "%d-%02d-%02d" year1 month1 day1))
(let ((year2 (nth 2 d2)) (month2 (car d2)) (day2 (nth 1 d2)) (repeats (- (calendar-absolute-from-gregorian d1)
(calendar-absolute-from-gregorian d2))))
(if (> repeats 0)
(setq dates (format "%d-%02d-%02d every day for %d days" year1 month1 day1 (abs repeats)))
(setq dates (format "%d-%02d-%02d every day for %d days" year1 month1 day1 (abs repeats))))
))
(setq entry (format "/usr/bin/google calendar add --cal org \"%s on %s\"" text dates))
;;(message entry)
(if (not (string= "MYLAPTOPCOMPUTER" mail-host-address))
(shell-command entry)
(let ((offline "~/tmp/org2google-offline-entries"))
(find-file offline)
(goto-char (point-max))
(insert (concat entry "\n"))
(save-buffer)
(kill-buffer (current-buffer))
(message "Plain text written to %s" offline)))))
(ad-activate 'org-agenda-add-entry-to-org-agenda-diary-file)
#end_src
This does two things depending on my online status which is implicitly
defined by the host address of the computer I am using (yes, kludgy at
best): if online, the headline entry for the new diary entry (which is
stored in diary.org) is sent to my "org" Google calendar. If offline,
the command line that would have been used is stored in a file. When
I got back online, I simply execute and empty this file as part of a
more general synchronisation step (including git updates for my org
files and sending any composed emails like this one ;-).
This 2x2 approach (two diaries in org, two calendars in Google) seems
to be working very well. It works for me because I seldom delete
items in my diary and, in any case, I'd rather err on having an entry
that no longer makes sense than end up double-booked.
Repeated events with times, however, do not work as Google's "Quick
Add" feature, on which the command line script depends, doesn't quite
work. So only timed events for a single day or repeated daily
non-timed events are processed correctly.
There is also little (well, nothing) in the way of error checking in
this advice... <blush>
I hope this is of some use to people! I'm really enjoying my Android
phone together with org!
eric
[-- Attachment #2: Type: text/plain, Size: 75 bytes --]
--
Eric S Fraga
GnuPG: 8F5C 279D 3907 E14A 5C29 570D C891 93D8 FFFC F67D
[-- Attachment #3: Type: text/plain, Size: 201 bytes --]
_______________________________________________
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode
next prev parent reply other threads:[~2010-07-06 18:22 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-03 16:42 Google CL and org-mode Jordi Inglada
2010-07-05 8:49 ` Eric S Fraga
[not found] ` <29444366.20665.1278322512578.JavaMail.root@zm-cesbio-01>
2010-07-05 13:17 ` Jordi Inglada
2010-07-05 14:31 ` Eric S Fraga
2010-07-06 14:36 ` Daniel Martins
2010-07-05 15:10 ` Daniel Mahler
2010-07-05 21:54 ` Eric S Fraga
2010-07-05 22:14 ` Daniel Mahler
2010-07-06 15:30 ` Eric S Fraga [this message]
[not found] ` <4495692.20920.1278342621406.JavaMail.root@zm-cesbio-01>
2010-07-05 18:11 ` Jordi Inglada
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87y6dopqzy.wl%ucecesf@ucl.ac.uk \
--to=ucecesf@ucl.ac.uk \
--cc=dmahler@gmail.com \
--cc=e.fraga@ucl.ac.uk \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).