5.3.3 Tracking your habits

Org 可以跟踪一类特殊待办事项 “习惯(habits)” 的执行连贯性。 要使用习惯功能,需通过自定义变量 org-modules 启用 habit 模块。

一个习惯事项具备以下属性:

  1. 该习惯是一个待办事项,其待办关键字表示未完成状态。
  2. 属性 ‘STYLE’ 设为 ‘habit’ (参见 Properties and Columns)。
  3. 该待办事项设有计划日期,通常使用 ‘.+’ 类型的重复间隔。对于有时间限制的习惯, ‘++’ 类型会更合适,例如必须在每周特定日期完成( ‘++1w’ );而对于可以产生积压的特殊习惯,则可使用 ‘+’ 类型,比如每周报告。有关重复间隔的更多细节,请参见 Repeated tasks
  4. 该待办事项还可使用语法 ‘.+2d/3d’ 指定最小与最大间隔, 表示希望该任务至少每三天执行一次,至多每两天执行一次。
  5. 启用完成状态的记录功能(参见 Tracking TODO state changes), 以便在连贯性图表中展示历史数据。 未启用不会报错,但连贯性图表基本失去意义。

为让你直观了解上述规则的实际效果, 以下是一个带有历史记录的真实习惯示例:

** TODO Shave
   SCHEDULED: <2009-10-17 Sat .+2d/4d>
   :PROPERTIES:
   :STYLE:    habit
   :LAST_REPEAT: [2009-10-19 Mon 00:36]
   :END:
   - State "DONE"       from "TODO"       [2009-10-15 Thu]
   - State "DONE"       from "TODO"       [2009-10-12 Mon]
   - State "DONE"       from "TODO"       [2009-10-10 Sat]
   - State "DONE"       from "TODO"       [2009-10-04 Sun]
   - State "DONE"       from "TODO"       [2009-10-02 Fri]
   - State "DONE"       from "TODO"       [2009-09-29 Tue]
   - State "DONE"       from "TODO"       [2009-09-25 Fri]
   - State "DONE"       from "TODO"       [2009-09-19 Sat]
   - State "DONE"       from "TODO"       [2009-09-16 Wed]
   - State "DONE"       from "TODO"       [2009-09-12 Sat]

该习惯表示:希望至多每两天刮一次胡子—由计划日 ‘SCHEDULED’ 期和重复间隔指定—且至少每四天一次。 如果今天是15号,该习惯会在最短间隔2天过后的10月17日出现在议程中(参见 Agenda Views), 并在4天过后的10月19日显示为逾期。

习惯功能的真正实用之处在于,它会附带连贯性图表一同显示, 展示你过去完成该任务的稳定程度。 图表会显示过去三周内完成任务的每一天,并用不同颜色标记每一天:

蓝色

当天无需执行该任务。

绿色

当天可以执行该任务。

黄色

次日任务即将逾期。

红色

当天任务已逾期。

除颜色标记外,若当天实际完成了任务,会用星号标注; 感叹号则标识图表中当天的位置。

有多个配置变量可用于修改习惯在议程中的显示方式。

org-habit-graph-column

绘制连贯性图表的缓冲区列数。 该设置会覆盖该列的所有文本,因此建议保持习惯标题简洁。

org-habit-preceding-days

连贯性图表中显示的历史天数(今天之前)。

org-habit-following-days

连贯性图表中显示的未来天数(今天之后)。

org-habit-show-habits-only-for-today

若非 nil ,仅在今日议程视图中显示习惯。默认值为 t 。 在议程中按下 C-u K 可切换该变量。

最后,在议程框架中按下 K 可临时禁用习惯,使其完全不显示; 再次按下 K 恢复显示。 习惯同样支持标签过滤,例如你有仅在特定场景下执行的习惯时。