From: Jordi Inglada <jordi.inglada@cesbio.cnes.fr>
To: ucecesf@ucl.ac.uk
Cc: Emacs-orgmode@gnu.org
Subject: Re: Diary synchronising with Google calendar
Date: Wed, 7 Jul 2010 23:19:04 +0200 [thread overview]
Message-ID: <19508.61256.794705.331948@gargle.gargle.HOWL> (raw)
Hi Eric,
I am sorry to ask this, but can you post detailed instructions on how
to use your code? It seems that I am (at least) missing the
"add-to-google-calendar" function.
Thanks.
Jordi
On Tue, 6 Jul 2010 00:14:00 +0200, Daniel Mahler <dmahler <at> gmail.com> wrote:
>
> On Mon, Jul 5, 2010 at 11:54 PM, Eric S Fraga <ucecesf <at> ucl.ac.uk> wrote:
> > On Mon, 5 Jul 2010 17:10:55 +0200, Daniel Mahler <dmahler <at> 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
next reply other threads:[~2010-07-07 21:20 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-07 21:19 Jordi Inglada [this message]
2010-07-07 22:20 ` Diary synchronising with Google calendar Eric S Fraga
[not found] ` <25098780.22494.1278541157993.JavaMail.root@zm-cesbio-01>
[not found] ` <19511.31257.267848.353668@gargle.gargle.HOWL>
2010-07-09 20:28 ` Eric S Fraga
[not found] ` <18737865.23968.1278707659240.JavaMail.root@zm-cesbio-01>
[not found] ` <19512.6390.427253.455577@gargle.gargle.HOWL>
2010-07-10 22:10 ` Eric S Fraga
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=19508.61256.794705.331948@gargle.gargle.HOWL \
--to=jordi.inglada@cesbio.cnes.fr \
--cc=Emacs-orgmode@gnu.org \
--cc=ucecesf@ucl.ac.uk \
/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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.