13.15 iCalendar Export

Org 模式能实现良好互操作性,很大程度上得益于其可便捷与外部应用进行导入导出操作。iCalendar 导出后端可从 Org 文件中提取日历数据,并导出为标准 iCalendar 格式。

默认情况下,iCalendar 导出仅包含带有活动时间戳或日记 sexp 的标题150

若时间戳包含具体时间但无明确结束时间(即无时间范围),导出事件默认时长为 2 小时,可通过 org-agenda-default-appointment-duration 覆盖该设置。

iCalendar 导出后端还可根据变量 org-icalendar-include-todo 的配置导出 TODO 条目。后端会将普通时间戳导出为 ‘VEVENT’ ,TODO 项导出为 ‘VTODO’ ,并从非 TODO 项的截止时间中生成事件。

后端会使用 Org TODO 项中的截止时间与计划时间,设置 iCalendar TODO 条目的开始时间与到期时间。更多细节参见变量 org-icalendar-use-deadlineorg-icalendar-use-scheduledorg-icalendar-todo-unscheduled-start

对于标题上的标签,iCalendar 导出后端会将其转换为 iCalendar 分类。如需调整标签与 TODO 状态的继承规则,可配置变量 org-icalendar-categories 。如需根据时间设置闹钟提醒,可配置变量 org-icalendar-alarm-time

iCalendar 格式标准要求每条目具备全局唯一标识符(UID)。iCalendar 导出后端会在导出时自动生成 UID。若要将 UID 保存至 Org 文件,可设置变量 org-icalendar-store-UID 。后端会读取条目的 ‘ID’ 属性,以便在后续导出中复用相同 UID。

由于单个 Org 条目可能生成多个 iCalendar 条目(时间戳、截止时间、计划项或 TODO 项),Org 会根据触发 iCalendar 条目创建的 Org 条目部分,为 UID 添加前缀。前缀可保证 UID 唯一,同时便于同步程序追溯关联关系。

C-c C-e c f (org-icalendar-export-to-ics)

从当前 Org 缓冲区生成 iCalendar 条目,并保存至同一目录下,文件扩展名为 ‘.ics’ 。

C-c C-e c a (org-icalendar-export-agenda-files)

org-agenda-files 中的 Org 文件生成 iCalendar 条目,并为每个 Org 文件单独保存为 iCalendar 文件。

C-c C-e c c (org-icalendar-combine-agenda-files)

org-agenda-files 中的 Org 文件生成合并后的 iCalendar 文件,并写入 org-icalendar-combined-agenda-file 指定的文件名。

iCalendar 导出后端会在导出时读取 Org 条目的 ‘SUMMARY’ 、 ‘DESCRIPTION’ 、 ‘LOCATION’ 、 ‘TIMEZONE’ 与 ‘CLASS’ 属性。如需强制后端继承 ‘LOCATION’ 、 ‘TIMEZONE’ 与 ‘CLASS’ 属性,可配置变量 org-use-property-inheritance

SUMMARY’ 、 ‘LOCATION’ 与 ‘DESCRIPTION’ 属性支持通过 ‘<PROPERTY>+’ 语法定义多行摘要、地点或描述(见 Property Syntax):

* Meeting at location with multi-line address
:PROPERTIES:
:LOCATION:  Someplace
:LOCATION+: Some Street 5
:LOCATION+: 12345 Small Town
:END:
<2024-01-08 Mon 14:20-15:00>

当 Org 条目无 ‘SUMMARY’ 、 ‘DESCRIPTION’ 、 ‘LOCATION’ 与 ‘CLASS’ 属性时,iCalendar 导出后端会从标题提取摘要,从条目正文提取描述内容。变量 org-icalendar-include-body 用于限制转换为描述的正文最大字符数。

TIMEZONE’ 属性可用于为单个条目指定时区,并应用于所有带时间戳的条目。时区需按照 IANA 时区数据库格式填写,例如 ‘Asia/Almaty’ 。此外,属性值也可设为 ‘UTC’ ,仅强制该条目使用 UTC 时间。

CLASS’ 属性可用于为单个条目指定可见级别或访问权限,并应用于所有带类别信息的条目。iCalendar 标准定义了三种可见级别:

PUBLIC

条目公开可见(默认值)。

CONFIDENTIAL

仅限定客户端可访问该事件。

PRIVATE

仅所有者可获取该条目。

服务器应将未知类别属性视为 ‘PRIVATE’ 。

导出的 iCalendar 文件可告知客户端检查更新的频率。该时长可通过变量 org-icalendar-ttl 全局设置,或通过 ‘ICAL-TTL’ 关键字为单个文档设置。该选项需使用 iCalendar 时长格式配置,更多细节参见 org-icalendar-ttl 的文档字符串。

导出为 iCalendar 格式在很大程度上依赖目标应用的支持能力,不同应用的兼容程度存在差异。特定应用的使用建议可参考 Org 模式常见问题解答。


Footnotes

(150)

日记 sexp 事件(部分内置类型除外,见 icalendar-export-sexp-enumerate-all )最多会向未来导出 icalendar-export-sexp-enumeration-days 天。