emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
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

             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).