11.3.1 Weekly/daily agenda

周/日 日程(agenda) 的作用类似于纸质日程本,显示当前周或当天的所有任务。

M-x org-agenda a (org-agenda-list)

从 Org 文件列表编译生成当前周的日程,按天显示条目。带数字前缀参数95(如 C-u 2 1 M-x org-agenda a)可设置显示天数。

日程默认显示天数由变量 org-agenda-span 设置。该变量可设为任意天数,或 dayweekmonthyear 等跨度名称。周日程默认从上周一(参见 org-agenda-start-on-weekday )开始。也可通过日期偏移设置起始日期: ‘(setq org-agenda-start-day "+10d")’ 表示从十天后开始。在单周/双周日程中, org-agenda-start-on-weekday 优先级高于 org-agenda-start-day

在日程缓冲区(agenda buffer) 中可进行远程编辑,例如直接修改截止日期和预约时间。日程缓冲区可用命令参见 Commands in the Agenda Buffer

Calendar/Diary integration

Emacs 内置由 Edward M. Reingold 编写的日历与日记功能。日历显示三月视图并包含各国节假日。日记可记录纪念日、月相、日出日落、周期性预约等。与 Org 形成良好互补。将 Org 内容与日记结合非常实用。

要将 Emacs 日记条目加入 Org 日程,只需自定义变量:

(setq org-agenda-include-diary t)

之后即可自动集成。所有日记条目(含节假日、纪念日等)都会出现在 Org 生成的日程缓冲区中。在日程缓冲区中可使用 SPCTABRET 跳转到日记文件编辑已有条目。i 命令可在当前日期插入新条目,SMC 分别显示日出日落、月相和转换历法,c 可在日历与日程间切换。

若仅用日记记录表达式条目和节假日,更高效的方式是不使用上述设置,而是将条目复制或移动到 Org 文件中。Org 可解析日记风格的表达式条目,且无需先构建日记显示,速度更快。注意表达式条目必须顶格书写,前无空格,示例如下:96

* Holidays
  :PROPERTIES:
  :CATEGORY: Holiday
  :END:
%%(org-calendar-holiday)   ; 节假日名称专用函数

* Birthdays
  :PROPERTIES:
  :CATEGORY: Ann
  :END:
%%(org-anniversary 1956  5 14) Arthur Dent is %d years old
%%(org-anniversary 1869 10  2) Mahatma Gandhi would be %d years old

Anniversaries from BBDB

若使用 BBDB 通讯录存储联系人,你可能更希望在 BBDB 中记录纪念日而非单独的 Org 或日记文件。Org 支持此功能并可在日程中显示 BBDB 纪念日。只需在任意日程文件中添加:

* Anniversaries
  :PROPERTIES:
  :CATEGORY: Anniv
  :END:
%%(org-bbdb-anniversaries)

之后即可在 BBDB 记录中定义纪念日。基本要求是为 BBDB 记录添加名为 ‘anniversary’ 的字段,格式为 ‘YYYY-MM-DD’ 或 ‘MM-DD’ ,后接空格和纪念日类型( ‘birthday’ 、 ‘wedding’ 或格式字符串)。省略类型则默认为生日。示例如下,文件 ‘ol-bbdb.el’ 头部有详细说明:

1973-06-22
06-22
1955-08-02 wedding
2008-04-14 %s released version 6.01 of Org mode, %d years ago

修改 BBDB 后或 Emacs 会话首次显示日程时,Org 会更新纪念日哈希表,造成短暂延迟。之后速度极快,远快于 Org 或日记文件中大量 ‘%%(diary-anniversary)’ 条目。

若希望提前几天显示即将到来的纪念日,可改用:

* Anniversaries
  :PROPERTIES:
  :CATEGORY: Anniv
  :END:
%%(org-bbdb-anniversaries-future 3)

这样会提前三天提醒:纪念日当天及前两天。参数可选,省略时默认为 7 天。

Appointment reminders

Org 可与 Emacs 预约提醒功能联动。使用命令 org-agenda-to-appt 可将日程文件中的预约加入提醒。该命令支持筛选,仅添加特定分类或匹配正则表达式的预约。同时读取 ‘APPT_WARNTIME’ 属性,覆盖该预约的 appt-message-warning-time 。详情参见文档字符串。


Footnotes

(95)

为兼容旧版,通用前缀参数 C-u 会使所有 TODO 条目列在日程之前,该功能已废弃,建议使用专用 TODO 列表或区块日程(参见 Block agenda)。

(96)

示例中变量 org-anniversarydiary-anniversary 类似,但参数顺序严格遵循 ISO 格式,与 calendar-date-style 无关。