From: Eric S Fraga <ucecesf@ucl.ac.uk>
To: org-mode mailing list <emacs-orgmode@gnu.org>
Subject: Google calendar to org mode script and a feature request for agenda
Date: Tue, 29 Jun 2010 23:28:56 +0100 [thread overview]
Message-ID: <87d3v95v87.wl%ucecesf@ucl.ac.uk> (raw)
[-- Attachment #1: Type: text/plain, Size: 2495 bytes --]
Hello,
I finally got myself an Android phone (and am loving it, especially
with an "all you can eat" data plan :-). I have tried mobileorg for
Android but it's obviously early days and it's actually not really
what I want.
However, I am very happy with the Google syncing provided by the
phone, both for email and for the calendar. This has caused me to
revisit the possibility of a smoother integration between Google's
calendar and org-mode.
First, I have created an awk script (yes, I'm dating myself: I do use
awk in preference to perl et al.) which allows me to convert the iCal
export from Google calendar to a sequence of org headlines (see
attached). It's a preliminary version and seems to translate what I
need: simple day and timed events, mostly those that I will tend to do
on the phone as opposed to when I'm at my computer. I'm not trying
for a comprehensive translation program here... but I'm putting it on
the list in case anybody finds it useful.
I use this script as follows:
wget [address specified by google for my calendar] --> basic.ics
awk -f ical2org.awk < basic.ics >> googlecalendar.org
this appends any entries in my specific google calendar to the given
org file. When I go the other way (creating an ics file from org), I
import the org items into a different calendar on google. When
entries have been synced, I typically delete the original entries
placed in google to avoid them being downloaded over and over again
[1].
* A feature request: time prompt for insert diary agenda function
Anyway, my increased use of google's calendar, has highlighted a
short-coming (?) of the agenda view (or more strictly speaking, the
iCal exporter): entries in which the time of appointment, say, is on
the headline but the date is on the following line, say, get converted
to "day" events as opposed to day+time events. I.e. something like
* 11am meeting with colleages
<2010-06-30 Wed>
does not get exported as a timed event. Obviously, the easy solution
is to put the time in the date stamp. However, I like using the
"insert diary" function in the agenda view for defining appointments
and this doesn't allow the time to be specified other than in a
headline. Would it be possible to enhance the insert diary function
to prompt for a time (and while we're at it, tags as well)?
Thanks,
eric
Footnotes:
[1] it may be possible to use the unique ID for each event to avoid creating duplicates... something to look at in the future.
[-- Attachment #2: ical2org.awk --]
[-- Type: text/plain, Size: 2428 bytes --]
# awk script for converting an iCal formatted file to a sequence of org-mode headings.
# this may not work in general but seems to work for day and timed events from Google's
# calendar, which is really all I need right now...
#
# Eric S Fraga, 20100629
BEGIN {
# use a colon to separate the type of data line from the actual contents
FS = ":";
entry = ""
headline = ""
id = ""
indescription = 0;
}
# any line that starts at the left with a non-space character is a new data field
/^[A-Z]/ {indescription = 0;}
# this type of entry represents a day entry, not timed, with date stamp YYYYMMDD
/^DTSTART;VALUE=DATE/ {
date = gensub("([0-9][0-9][0-9][0-9])([0-9][0-9])([0-9][0-9]).*[\r]", "\\1-\\2-\\3", "g", $2)
#print date
}
# this represents a timed entry with date and time stamp YYYYMMDDTHHMMSS
# we ignore the seconds
/^DTSTART:/ {
#print $0
date = gensub("([0-9][0-9][0-9][0-9])([0-9][0-9])([0-9][0-9])T([0-9][0-9])([0-9][0-9]).*[\r]", "\\1-\\2-\\3 \\4:\\5", "g", $2);
# print date;
}
# The description will the contents of the entry in org-mode.
# this line may be continued and as I do not know if other lines may be continued,
# we only process continuation lines that come immediately after this one
/^DESCRIPTION/ {
entry = gensub("\r", "", "g", $2);
indescription = 1;
}
# continuation lines (at least from Google) start with two spaces
# if the continuation is after a description, append the entry
/^ / {
# print "** continuation line: " $0
if (indescription) {
entry = entry gensub("\r", "", "g", $0);
}
}
# the summary will be the org heading
/^SUMMARY/ { headline = gensub("(.*)[\r]", "\\1", "g", $2); }
# the unique ID will be stored as a property of the entry
/^UID/ { id = gensub("(.*)[\r]", "\\1", "g", $2); }
# when we reach the end of the event line, we output everything we
# have collected so far, creating a top level org headline with the
# date/time stamp, unique ID property and the contents, if any
/^END:VEVENT/ {
print "* " headline
print " :PROPERTIES:"
print " :ID: " id
print " :END:"
print " <" date ">"
# for the entry, convert all embedded "\n" strings to actual newlines
print ""
print gensub("\\\\n", "\n", "g", entry); # need 4 backslash to get one in the pattern!
headline = ""
date = ""
entry = ""
indescription = 0
}
END {
print strftime("* COMMENT ical2org finished at [%Y-%m-%d %H:%M]");
}
[-- Attachment #3: Type: text/plain, Size: 75 bytes --]
--
Eric S Fraga
GnuPG: 8F5C 279D 3907 E14A 5C29 570D C891 93D8 FFFC F67D
[-- Attachment #4: 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 reply other threads:[~2010-06-29 22:29 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-29 22:28 Eric S Fraga [this message]
2010-06-30 5:43 ` Google calendar to org mode script and a feature request for agenda Stephen Eglen
2010-06-30 8:14 ` Eric S Fraga
2010-07-07 20:38 ` Daniel Martins
2010-07-07 22:17 ` Eric S Fraga
2010-07-07 22:57 ` Daniel Martins
2010-07-08 18:07 ` Eric S Fraga
-- strict thread matches above, loose matches on Subject: below --
2010-07-09 0:57 Torsten Wagner
2010-07-09 1:54 ` Nick Dokos
2010-07-09 8:30 ` 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
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=87d3v95v87.wl%ucecesf@ucl.ac.uk \
--to=ucecesf@ucl.ac.uk \
--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).