Subject: 24.1.50; icalendar.el does not unescape commas in timezone specs

From: Nick Dokos <[email-masked]>
Date: Mon, 14 May 2012 23:37:45 -0400

M-x icalendar-import-file RET foo.txt RET diary RET

where foo.txt contains the following (copied from a real appointment email
I received with private details redacted):

--8<---------------cut here---------------start------------->8---
BEGIN:VCALENDAR
METHOD:REQUEST
PRODID:Microsoft Exchange Server 2007
VERSION:2.0
BEGIN:VTIMEZONE
TZID:(UTC+01:00) Amsterdam\, Berlin\, Bern\, Rome\, Stockholm\, Vienna
BEGIN:STANDARD
DTSTART:16010101T030000
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T020000
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
ORGANIZER;CN="A. Luser":MAILTO:[email-masked]
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN="Luser, Oth
 er":MAILTO:[email-masked]
DESCRIPTION;LANGUAGE=en-US:\nWhassup?\n\n
SUMMARY;LANGUAGE=en-US:Query
DTSTART;TZID="(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna"
 :20120515T150000
DTEND;TZID="(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna":2
 0120515T153000
UID:040000008200E00074C5B7101A82E0080000000020FFAED0CFEFCC01000000000000000
 010000000575268034ECDB649A15349B1BF240F15
RECURRENCE-ID;TZID="(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, V
 ienna":20120515T170000
CLASS:PUBLIC
PRIORITY:5
DTSTAMP:20120514T153645Z
TRANSP:OPAQUE
STATUS:CONFIRMED
SEQUENCE:15
LOCATION;LANGUAGE=en-US:phone
X-MICROSOFT-CDO-APPT-SEQUENCE:15
X-MICROSOFT-CDO-OWNERAPPTID:1907632092
X-MICROSOFT-CDO-BUSYSTATUS:TENTATIVE
X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-CDO-INSTTYPE:3
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:REMINDER
TRIGGER;RELATED=START:-PT15M
END:VALARM
END:VEVENT
END:VCALENDAR
--8<---------------cut here---------------end--------------->8---

and check the resulting diary file: the timezone translation has failed,
so it contains the time of the sender, not the receiver.

The reason for this is that the TZID spec in foo.txt contains escaped
commas that the import fails to unescape, so timezone matching fails.
Although icalendar.el contains a function to unescape commas on import
and uses it in some places, it apparently neglects to do so for timezones.
Hence the proposed fix is

--8<---------------cut here---------------start------------->8---
diff --git a/icalendar.el b/icalendar.el
index f1549ec..5d85b83 100644
--- a/icalendar.el
+++ b/icalendar.el
@@ -491,7 +491,7 @@ The strings are suitable for assembling into a TZ variable."
 (defun icalendar--parse-vtimezone (alist)
   "Turn a VTIMEZONE ALIST into a cons (ID . TZ-STRING).
 Return nil if timezone cannot be parsed."
-  (let* ((tz-id (icalendar--get-event-property alist 'TZID))
+  (let* ((tz-id (icalendar--convert-string-for-import (icalendar--get-event-property alist 'TZID)))
 	 (daylight (cadr (cdar (icalendar--get-children alist 'DAYLIGHT))))
 	 (day (and daylight (icalendar--convert-tz-offset daylight t)))
 	 (standard (cadr (cdar (icalendar--get-children alist 'STANDARD))))
--8<---------------cut here---------------end--------------->8---

There might be other places that need a similar treatment but I have not
looked for them. The above fix is enough for my purposes.

In GNU Emacs 24.1.50.2 (x86_64-unknown-linux-gnu, GTK+ Version 2.24.4)
 of 2012-05-04 on alphaville
Windowing system distributor `The X.Org Foundation', version 11.0.11001000
Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=SCIM
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t

Major mode: Info

Minor modes in effect:
  TeX-PDF-mode: t
  yas/global-mode: t
  diff-auto-refine-mode: t
  shell-dirtrack-mode: t
  display-time-mode: t
  tooltip-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n 
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n 
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n u C-p 
C-p C-p C-p <return> u C-n C-n C-n <return> C-n C-n 
C-n C-n C-e C-b C-b C-b C-b C-b <return> C-n C-n C-n 
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n 
C-e C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b 
C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b <return> <return> 
<help-echo> <down-mouse-1> <mouse-2> <help-echo> <help-echo> 
<select-window> <select-window> <help-echo> <help-echo> 
<help-echo> <f12> s b u g - g n u - e m a c s <help-echo> 
<help-echo> <tab> M-; C-g <help-echo> <help-echo> <help-echo> 
<help-echo> @ g n u . o r g <select-window> <select-window> 
<help-echo> <backspace> <backspace> <backspace> <backspace> 
<backspace> <backspace> <backspace> <backspace> <return> 
<return> i c a l e n d r <backspace> a r . e l d <backspace> 
SPC d o e s SPC n o t SPC u n e s c a p e SPC c o m 
m a s SPC w h e n SPC i m p o r t i n g SPC f r o m 
SPC <backspace> <backspace> <backspace> <backspace> 
<backspace> <backspace> <backspace> <backspace> <backspace> 
<backspace> <backspace> <backspace> <backspace> <backspace> 
<backspace> <backspace> <backspace> <backspace> <backspace> 
<backspace> <backspace> <backspace> s SPC i n SPC t 
i m z e <backspace> <backspace> e z o n e SPC s p e 
c s <return> C-n C-n C-n C-n C-n C-n C-n C-n C-x o 
u C-n C-n C-n <return> C-g M-x r e p o r t - e m a 
c s - b u g s <backspace> <return>

Recent messages:
Quit [2 times]
Composing main Info directory...done
Found `bugs' in Concept Index.  (3 total; use `,' for next)
Error: No running window found
(Shell command succeeded with no output) [2 times]
Quit
Composing a message...
Saving file /home/nick/Mail/drafts/830...
Wrote /home/nick/Mail/drafts/830
Type M-x mh-send-letter to send message, C-c ? for help
Quit

Load-path shadows:
/usr/share/emacs/site-lisp/noweb-mode hides /home/nick/src/emacs/ess/lisp/noweb-mode
/home/nick/src/emacs/org/org-notify/org-notify hides /home/nick/elisp/org-mode/contrib/lisp/org-notify
/usr/share/emacs/site-lisp/ipython hides /home/nick/elisp/ipython
/home/nick/elisp/org-mode/contrib/lisp/htmlize hides /home/nick/elisp/htmlize
/home/nick/elisp/org-mode/contrib/lisp/org-man hides /home/nick/elisp/org-man
/home/nick/elisp/iimage hides /usr/local/share/emacs/24.1.50/lisp/iimage
/usr/share/emacs/site-lisp/rst hides /usr/local/share/emacs/24.1.50/lisp/textmodes/rst
/home/nick/elisp/remember hides /usr/local/share/emacs/24.1.50/lisp/textmodes/remember
/home/nick/elisp/ruby-mode hides /usr/local/share/emacs/24.1.50/lisp/progmodes/ruby-mode
/home/nick/elisp/org-mode/lisp/ob-eval hides /usr/local/share/emacs/24.1.50/lisp/org/ob-eval
/home/nick/elisp/org-mode/lisp/org-bbdb hides /usr/local/share/emacs/24.1.50/lisp/org/org-bbdb
/home/nick/elisp/org-mode/lisp/org-remember hides /usr/local/share/emacs/24.1.50/lisp/org/org-remember
/home/nick/elisp/org-mode/lisp/org-jsinfo hides /usr/local/share/emacs/24.1.50/lisp/org/org-jsinfo
/home/nick/elisp/org-mode/lisp/ob-calc hides /usr/local/share/emacs/24.1.50/lisp/org/ob-calc
/home/nick/elisp/org-mode/lisp/org-pcomplete hides /usr/local/share/emacs/24.1.50/lisp/org/org-pcomplete
/home/nick/elisp/org-mode/lisp/ob-org hides /usr/local/share/emacs/24.1.50/lisp/org/ob-org
/home/nick/elisp/org-mode/lisp/org-colview hides /usr/local/share/emacs/24.1.50/lisp/org/org-colview
/home/nick/elisp/org-mode/lisp/ob-maxima hides /usr/local/share/emacs/24.1.50/lisp/org/ob-maxima
/home/nick/elisp/org-mode/lisp/ob-tangle hides /usr/local/share/emacs/24.1.50/lisp/org/ob-tangle
/home/nick/elisp/org-mode/lisp/ob-R hides /usr/local/share/emacs/24.1.50/lisp/org/ob-R
/home/nick/elisp/org-mode/lisp/org-attach hides /usr/local/share/emacs/24.1.50/lisp/org/org-attach
/home/nick/elisp/org-mode/lisp/org-mks hides /usr/local/share/emacs/24.1.50/lisp/org/org-mks
/home/nick/elisp/org-mode/lisp/org-gnus hides /usr/local/share/emacs/24.1.50/lisp/org/org-gnus
/home/nick/elisp/org-mode/lisp/ob-java hides /usr/local/share/emacs/24.1.50/lisp/org/ob-java
/home/nick/elisp/org-mode/lisp/org-entities hides /usr/local/share/emacs/24.1.50/lisp/org/org-entities
/home/nick/elisp/org-mode/lisp/org-vm hides /usr/local/share/emacs/24.1.50/lisp/org/org-vm
/home/nick/elisp/org-mode/lisp/ob-sh hides /usr/local/share/emacs/24.1.50/lisp/org/ob-sh
/home/nick/elisp/org-mode/lisp/ob-python hides /usr/local/share/emacs/24.1.50/lisp/org/ob-python
/home/nick/elisp/org-mode/lisp/org-habit hides /usr/local/share/emacs/24.1.50/lisp/org/org-habit
/home/nick/elisp/org-mode/lisp/ob-clojure hides /usr/local/share/emacs/24.1.50/lisp/org/ob-clojure
/home/nick/elisp/org-mode/lisp/ob-table hides /usr/local/share/emacs/24.1.50/lisp/org/ob-table
/home/nick/elisp/org-mode/lisp/org-bibtex hides /usr/local/share/emacs/24.1.50/lisp/org/org-bibtex
/home/nick/elisp/org-mode/lisp/ob-ocaml hides /usr/local/share/emacs/24.1.50/lisp/org/ob-ocaml
/home/nick/elisp/org-mode/lisp/ob hides /usr/local/share/emacs/24.1.50/lisp/org/ob
/home/nick/elisp/org-mode/lisp/org-plot hides /usr/local/share/emacs/24.1.50/lisp/org/org-plot
/home/nick/elisp/org-mode/lisp/org-latex hides /usr/local/share/emacs/24.1.50/lisp/org/org-latex
/home/nick/elisp/org-mode/lisp/org hides /usr/local/share/emacs/24.1.50/lisp/org/org
/home/nick/elisp/org-mode/lisp/org-freemind hides /usr/local/share/emacs/24.1.50/lisp/org/org-freemind
/home/nick/elisp/org-mode/lisp/org-feed hides /usr/local/share/emacs/24.1.50/lisp/org/org-feed
/home/nick/elisp/org-mode/lisp/org-mhe hides /usr/local/share/emacs/24.1.50/lisp/org/org-mhe
/home/nick/elisp/org-mode/lisp/org-html hides /usr/local/share/emacs/24.1.50/lisp/org/org-html
/home/nick/elisp/org-mode/lisp/org-irc hides /usr/local/share/emacs/24.1.50/lisp/org/org-irc
/home/nick/elisp/org-mode/lisp/org-taskjuggler hides /usr/local/share/emacs/24.1.50/lisp/org/org-taskjuggler
/home/nick/elisp/org-mode/lisp/org-id hides /usr/local/share/emacs/24.1.50/lisp/org/org-id
/home/nick/elisp/org-mode/lisp/ob-lob hides /usr/local/share/emacs/24.1.50/lisp/org/ob-lob
/home/nick/elisp/org-mode/lisp/org-footnote hides /usr/local/share/emacs/24.1.50/lisp/org/org-footnote
/home/nick/elisp/org-mode/lisp/ob-emacs-lisp hides /usr/local/share/emacs/24.1.50/lisp/org/ob-emacs-lisp
/home/nick/elisp/org-mode/lisp/ob-ledger hides /usr/local/share/emacs/24.1.50/lisp/org/ob-ledger
/home/nick/elisp/org-mode/lisp/ob-haskell hides /usr/local/share/emacs/24.1.50/lisp/org/ob-haskell
/home/nick/elisp/org-mode/lisp/ob-comint hides /usr/local/share/emacs/24.1.50/lisp/org/ob-comint
/home/nick/elisp/org-mode/lisp/ob-octave hides /usr/local/share/emacs/24.1.50/lisp/org/ob-octave
/home/nick/elisp/org-mode/lisp/ob-ruby hides /usr/local/share/emacs/24.1.50/lisp/org/ob-ruby
/home/nick/elisp/org-mode/lisp/ob-awk hides /usr/local/share/emacs/24.1.50/lisp/org/ob-awk
/home/nick/elisp/org-mode/lisp/ob-mscgen hides /usr/local/share/emacs/24.1.50/lisp/org/ob-mscgen
/home/nick/elisp/org-mode/lisp/org-crypt hides /usr/local/share/emacs/24.1.50/lisp/org/org-crypt
/home/nick/elisp/org-mode/lisp/org-docview hides /usr/local/share/emacs/24.1.50/lisp/org/org-docview
/home/nick/elisp/org-mode/lisp/org-inlinetask hides /usr/local/share/emacs/24.1.50/lisp/org/org-inlinetask
/home/nick/elisp/org-mode/lisp/org-timer hides /usr/local/share/emacs/24.1.50/lisp/org/org-timer
/home/nick/elisp/org-mode/lisp/org-lparse hides /usr/local/share/emacs/24.1.50/lisp/org/org-lparse
/home/nick/elisp/org-mode/lisp/ob-screen hides /usr/local/share/emacs/24.1.50/lisp/org/ob-screen
/home/nick/elisp/org-mode/lisp/ob-C hides /usr/local/share/emacs/24.1.50/lisp/org/ob-C
/home/nick/elisp/org-mode/lisp/ob-gnuplot hides /usr/local/share/emacs/24.1.50/lisp/org/ob-gnuplot
/home/nick/elisp/org-mode/lisp/ob-plantuml hides /usr/local/share/emacs/24.1.50/lisp/org/ob-plantuml
/home/nick/elisp/org-mode/lisp/org-exp hides /usr/local/share/emacs/24.1.50/lisp/org/org-exp
/home/nick/elisp/org-mode/lisp/org-capture hides /usr/local/share/emacs/24.1.50/lisp/org/org-capture
/home/nick/elisp/org-mode/lisp/ob-perl hides /usr/local/share/emacs/24.1.50/lisp/org/ob-perl
/home/nick/elisp/org-mode/lisp/org-beamer hides /usr/local/share/emacs/24.1.50/lisp/org/org-beamer
/home/nick/elisp/org-mode/lisp/ob-css hides /usr/local/share/emacs/24.1.50/lisp/org/ob-css
/home/nick/elisp/org-mode/lisp/org-clock hides /usr/local/share/emacs/24.1.50/lisp/org/org-clock
/home/nick/elisp/org-mode/lisp/ob-exp hides /usr/local/share/emacs/24.1.50/lisp/org/ob-exp
/home/nick/elisp/org-mode/lisp/ob-latex hides /usr/local/share/emacs/24.1.50/lisp/org/ob-latex
/home/nick/elisp/org-mode/lisp/org-docbook hides /usr/local/share/emacs/24.1.50/lisp/org/org-docbook
/home/nick/elisp/org-mode/lisp/ob-js hides /usr/local/share/emacs/24.1.50/lisp/org/ob-js
/home/nick/elisp/org-mode/lisp/org-src hides /usr/local/share/emacs/24.1.50/lisp/org/org-src
/home/nick/elisp/org-mode/lisp/org-indent hides /usr/local/share/emacs/24.1.50/lisp/org/org-indent
/home/nick/elisp/org-mode/lisp/org-rmail hides /usr/local/share/emacs/24.1.50/lisp/org/org-rmail
/home/nick/elisp/org-mode/lisp/ob-asymptote hides /usr/local/share/emacs/24.1.50/lisp/org/ob-asymptote
/home/nick/elisp/org-mode/lisp/org-info hides /usr/local/share/emacs/24.1.50/lisp/org/org-info
/home/nick/elisp/org-mode/lisp/ob-sqlite hides /usr/local/share/emacs/24.1.50/lisp/org/ob-sqlite
/home/nick/elisp/org-mode/lisp/ob-scheme hides /usr/local/share/emacs/24.1.50/lisp/org/ob-scheme
/home/nick/elisp/org-mode/lisp/org-publish hides /usr/local/share/emacs/24.1.50/lisp/org/org-publish
/home/nick/elisp/org-mode/lisp/ob-sass hides /usr/local/share/emacs/24.1.50/lisp/org/ob-sass
/home/nick/elisp/org-mode/lisp/ob-matlab hides /usr/local/share/emacs/24.1.50/lisp/org/ob-matlab
/home/nick/elisp/org-mode/lisp/org-special-blocks hides /usr/local/share/emacs/24.1.50/lisp/org/org-special-blocks
/home/nick/elisp/org-mode/lisp/ob-sql hides /usr/local/share/emacs/24.1.50/lisp/org/ob-sql
/home/nick/elisp/org-mode/lisp/org-eshell hides /usr/local/share/emacs/24.1.50/lisp/org/org-eshell
/home/nick/elisp/org-mode/lisp/ob-picolisp hides /usr/local/share/emacs/24.1.50/lisp/org/ob-picolisp
/home/nick/elisp/org-mode/lisp/org-table hides /usr/local/share/emacs/24.1.50/lisp/org/org-table
/home/nick/elisp/org-mode/lisp/org-w3m hides /usr/local/share/emacs/24.1.50/lisp/org/org-w3m
/home/nick/elisp/org-mode/lisp/org-faces hides /usr/local/share/emacs/24.1.50/lisp/org/org-faces
/home/nick/elisp/org-mode/lisp/ob-dot hides /usr/local/share/emacs/24.1.50/lisp/org/ob-dot
/home/nick/elisp/org-mode/lisp/org-ctags hides /usr/local/share/emacs/24.1.50/lisp/org/org-ctags
/home/nick/elisp/org-mode/lisp/org-xoxo hides /usr/local/share/emacs/24.1.50/lisp/org/org-xoxo
/home/nick/elisp/org-mode/lisp/org-archive hides /usr/local/share/emacs/24.1.50/lisp/org/org-archive
/home/nick/elisp/org-mode/lisp/org-ascii hides /usr/local/share/emacs/24.1.50/lisp/org/org-ascii
/home/nick/elisp/org-mode/lisp/ob-shen hides /usr/local/share/emacs/24.1.50/lisp/org/ob-shen
/home/nick/elisp/org-mode/lisp/org-wl hides /usr/local/share/emacs/24.1.50/lisp/org/org-wl
/home/nick/elisp/org-mode/lisp/org-macs hides /usr/local/share/emacs/24.1.50/lisp/org/org-macs
/home/nick/elisp/org-mode/lisp/org-mobile hides /usr/local/share/emacs/24.1.50/lisp/org/org-mobile
/home/nick/elisp/org-mode/lisp/ob-lilypond hides /usr/local/share/emacs/24.1.50/lisp/org/ob-lilypond
/home/nick/elisp/org-mode/lisp/org-mew hides /usr/local/share/emacs/24.1.50/lisp/org/org-mew
/home/nick/elisp/org-mode/lisp/ob-ditaa hides /usr/local/share/emacs/24.1.50/lisp/org/ob-ditaa
/home/nick/elisp/org-mode/lisp/org-icalendar hides /usr/local/share/emacs/24.1.50/lisp/org/org-icalendar
/home/nick/elisp/org-mode/lisp/org-mouse hides /usr/local/share/emacs/24.1.50/lisp/org/org-mouse
/home/nick/elisp/org-mode/lisp/ob-ref hides /usr/local/share/emacs/24.1.50/lisp/org/ob-ref
/home/nick/elisp/org-mode/lisp/org-agenda hides /usr/local/share/emacs/24.1.50/lisp/org/org-agenda
/home/nick/elisp/org-mode/lisp/org-datetree hides /usr/local/share/emacs/24.1.50/lisp/org/org-datetree
/home/nick/elisp/org-mode/lisp/org-protocol hides /usr/local/share/emacs/24.1.50/lisp/org/org-protocol
/home/nick/elisp/org-mode/lisp/ob-fortran hides /usr/local/share/emacs/24.1.50/lisp/org/ob-fortran
/home/nick/elisp/org-mode/lisp/ob-keys hides /usr/local/share/emacs/24.1.50/lisp/org/ob-keys
/home/nick/elisp/org-mode/lisp/org-mac-message hides /usr/local/share/emacs/24.1.50/lisp/org/org-mac-message
/home/nick/elisp/org-mode/lisp/org-exp-blocks hides /usr/local/share/emacs/24.1.50/lisp/org/org-exp-blocks
/home/nick/elisp/org-mode/lisp/ob-lisp hides /usr/local/share/emacs/24.1.50/lisp/org/ob-lisp
/home/nick/elisp/org-mode/lisp/org-odt hides /usr/local/share/emacs/24.1.50/lisp/org/org-odt
/home/nick/elisp/org-mode/lisp/org-compat hides /usr/local/share/emacs/24.1.50/lisp/org/org-compat
/home/nick/elisp/org-mode/lisp/org-list hides /usr/local/share/emacs/24.1.50/lisp/org/org-list
/home/nick/elisp/org-mode/.dir-locals hides /usr/local/share/emacs/24.1.50/lisp/gnus/.dir-locals
/home/nick/elisp/cal-html hides /usr/local/share/emacs/24.1.50/lisp/calendar/cal-html

Features:
(shadow emacsbug newcomment bbdb-snarf mh-thread mh-identity mh-letter
pp dired-aux multi-isearch face-remap debug cl-specs edebug help-mode
view mule-util icalendar mh-search bbdb-gui mh-alias multi-prompt crm
mh-funcs qp smiley w3m-form w3m doc-view jka-compr dired image-mode
w3m-hist w3m-fb w3m-ems w3m-ccl ccl w3m-favicon w3m-image w3m-proc
w3m-util mail-extr mh-mime server parse-time network-stream starttls
url-http tls url-auth url-gw cal-iso autoinsert flyspell ispell mh-show
goto-addr gnus-cite gnus-art mm-uu mml2015 epg-config gnus-sum nnoo
gnus-group gnus-undo nnmail mail-source gnus-start gnus-spec gnus-int
gnus-win gnus-range gnus gnus-ems nnheader wid-edit mh-seq mh-inc
hl-line mh-tool-bar mh-xface mh-utils mh-folder which-func imenu
ndk/utils status py-utils dates gnuplot-config htmlize lilypond-config
python-config ipython python-mode info-look info ido xcscope-config
preview prv-emacs latex tex-style tex-buf tex tex-site auto-loads
boxquote-config message rfc822 gmm-utils mailheader boxquote rect
diary-config bbdb-config bbdb-mhe mh-comp sendmail mh-scan mh-gnus mml
mm-view mml-smime mml-sec mm-decode mm-bodies mm-encode mail-parse
rfc2231 rfc2047 rfc2045 ietf-drums mh-e mh-compat mh-acros mh-buffers
mh-loaddefs mail-utils bbdb-com mailabbrev bbdb-autoloads bbdb timezone
yasnippet-config yasnippet dropdown-list R-config ess-toolbar ess-mouse
mouseme compile thingatpt browse-url ess-menu speedbar sb-image ezimage
dframe ess-swv ess-noweb noweb-font-lock-mode ess-bugs-l essd-els
ess-sas-d ess-sas-l ess-sas-a executable ess-arc-d ess-vst-d ess-xls-d
ess-lsp-l ess-sta-d ess-sta-l cc-vars cc-defs make-regexp ess-sp6-d
ess-sp5-d ess-sp3-d ess-r-d ess-r-args ess-s-l ess-inf ess-utils
ess-mode noweb-mode ess ess-custom ess-compat ess-site octave-config
google-maps-config org-location-google-maps google-maps
google-maps-static edmacro kmacro google-maps-geocode google-maps-base
json magit-config magit diff-mode log-edit pcvs-util add-log
pandoc-config pandoc-mode derived org-config org-capture org-mks
org-latex org-export-latex org-beamer footnote ob-gnuplot ob-ditaa
ob-sql ob-sqlite ob-org ob-dot ob-latex ob-sh shell ob-ruby ob-python
ob-octave ob-maxima ob-lilypond ob-R iimage image-file org-man
org-publish org-export-generic org-generic assoc org-mouse org-notify
cal-china lunar cal-bahai cal-islam cal-hebrew holidays hol-loaddefs
vc-git org-wl org-w3m org-vm org-rmail org-mhe org-mew org-irc
org-jsinfo org-infojs org-html org-info org-gnus org-docview org-bibtex
bibtex org-bbdb org-clock org-exp ob-exp org-exp-blocks org-agenda appt
diary-lib diary-loaddefs url-config org-google-weather solar cal-dst
google-weather xml url-cache url url-proxy url-privacy url-expand
url-methods url-history url-cookie url-domsuf url-util url-parse
auth-source eieio gnus-util url-vars mm-util mail-prsvr mailcap
org-export org-e-publish org-e-odt org-e-latex org-e-html table
org-e-ascii org-element org byte-opt warnings bytecomp byte-compile
cconv macroexp advice help-fns advice-preload ob-emacs-lisp ob-tangle
ob-ref ob-lob ob-table org-footnote org-src ob-comint ob-keys ob ob-eval
org-pcomplete pcomplete comint ansi-color ring org-list org-faces
org-compat org-entities org-macs noutline outline easy-mmode format-spec
find-func cal-menu easymenu calendar cal-loaddefs cl org-install
constants-config time cus-start cus-load mh-e-config smime
password-cache dig ldap experimental time-date tooltip ediff-hook
vc-hooks lisp-float-type mwheel x-win x-dnd tool-bar dnd fontset image
regexp-opt fringe lisp-mode register page menu-bar rfn-eshadow timer
select scroll-bar mouse jit-lock font-lock syntax facemenu font-core
frame cham georgian utf-8-lang misc-lang vietnamese tibetan thai
tai-viet lao korean japanese hebrew greek romanian slovak czech european
ethiopic indian cyrillic chinese case-table epa-hook jka-cmpr-hook help
simple abbrev minibuffer loaddefs button faces cus-face files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote make-network-process
dbusbind dynamic-setting system-font-setting font-render-setting
move-toolbar gtk x-toolkit x multi-tty emacs)