Hi Bastien, Bastien <b...@gnu.org> writes:
> Richard Lawrence <richard.lawre...@berkeley.edu> writes: > >> I've been trying to get iCalendar export working with my agenda files >> again since upgrading to 8.0, and I've found that footnotes break the >> agenda export to .ics. The problem is that a plain text version of the >> footnotes in the file ends up in the output "floating loose"---not >> wrapped by VEVENT tags or any other tags---resulting in an unparseable >> .ics file (at least according to Google Calendar). > > I tried this patch but for some reason it does not work. This patch does not work for me, either, but thanks for trying! > I did not look further, surely Nicolas has something that > works. I agree footnotes should be turned off by default > for the .ics export. I also tried the following modifications in the definition of the icalendar backend, without much effect: 1) Adding (footnote-definition . ignore) and (footnote-reference . ignore) to the :translate-alist 2) Adding (:filter-footnote-definition . ignore) and (:filter-footnote-reference . ignore) to the :filters-alist Both of these looked like they might work based on the org-export-define-backend documentation, but the footnotes still show up in the output. [...further tinkering...] It looks like the problem is this: the icalendar backend does not specify a transcoder for the "inner-template" element. Thus it falls back to the org-ascii-inner-template transcoder, which appends footnotes to the end of the exported content. Thus, one solution is to define an org-icalendar-inner-template transcoder which does nothing to modify the content (but overrides the fallback); that is the solution I've used in the attached patch. Best, Richard
diff --git a/lisp/ox-icalendar.el b/lisp/ox-icalendar.el index 49299b0..39ba383 100644 --- a/lisp/ox-icalendar.el +++ b/lisp/ox-icalendar.el @@ -261,6 +261,7 @@ re-read the iCalendar file.") (inlinetask . ignore) (planning . ignore) (section . ignore) + (inner-template . org-icalendar-inner-template) (template . org-icalendar-template)) :options-alist '((:exclude-tags @@ -747,7 +748,18 @@ END:VALARM\n" (if (zerop alarm-time) org-icalendar-alarm-time alarm-time))))) -;;;; Template +;;;; Templates + +(defun org-icalendar-inner-template (contents info) + "Return inner contents string after iCalendar conversion. +CONTENTS is the transcoded contents string. INFO is a plist used +as a communication channel. + +This function just returns CONTENTS unchanged. Its purpose is to +override the inner-template transcoder of the ascii +backend (`org-ascii-inner-template'), which appends footnotes +that break the iCalendar format." + contents) (defun org-icalendar-template (contents info) "Return complete document string after iCalendar conversion.