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-deadline 、 org-icalendar-use-scheduled 与 org-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 唯一,同时便于同步程序追溯关联关系。
org-icalendar-export-to-ics) ¶从当前 Org 缓冲区生成 iCalendar 条目,并保存至同一目录下,文件扩展名为 ‘.ics’ 。
org-icalendar-export-agenda-files) ¶从 org-agenda-files 中的 Org 文件生成 iCalendar 条目,并为每个 Org 文件单独保存为 iCalendar 文件。
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 标准定义了三种可见级别:
条目公开可见(默认值)。
仅限定客户端可访问该事件。
仅所有者可获取该条目。
服务器应将未知类别属性视为 ‘PRIVATE’ 。
导出的 iCalendar 文件可告知客户端检查更新的频率。该时长可通过变量 org-icalendar-ttl 全局设置,或通过 ‘ICAL-TTL’ 关键字为单个文档设置。该选项需使用 iCalendar 时长格式配置,更多细节参见 org-icalendar-ttl 的文档字符串。
导出为 iCalendar 格式在很大程度上依赖目标应用的支持能力,不同应用的兼容程度存在差异。特定应用的使用建议可参考 Org 模式常见问题解答。
日记 sexp 事件(部分内置类型除外,见 icalendar-export-sexp-enumerate-all )最多会向未来导出 icalendar-export-sexp-enumeration-days 天。