你可能希望自动记录状态变更时间,并可为此变更添加备注。
可以只记录时间戳,也可记录带时间戳的备注。
这些记录会以列表形式插入标题下方,最新记录排在最前44。
当备注数量较多时,你可能希望将其收纳到抽屉中以避免干扰(参见 Drawers)。
自定义变量 org-log-into-drawer 即可启用该行为—推荐使用的抽屉名为 ‘LOGBOOK’45。
你也可以通过设置 ‘LOG_INTO_DRAWER’ 属性,为某一子树覆盖该变量的设置。
由于通常无需为每个状态变更都记录备注,Org mode 支持按关键字单独配置此项。 实现方式是在每个关键字后的括号中添加特殊标记 ‘!’ (表示记录时间戳)或 ‘@’ (表示记录带时间戳的备注)。 例如,使用如下配置:
(setq org-todo-keywords
'((sequence "TODO(t)" "WAIT(w@/!)" "|" "DONE(d!)" "CANCELED(c@)")))
你不仅定义了全局待办关键字和快速访问键, 还指定了条目设为 ‘DONE’ 时记录时间, 切换至 ‘WAIT’ 或 ‘CANCELED’ 时记录备注46。 ‘WAIT’ 的设置更为特殊:斜杠后的 ‘!’ 表示, 除进入该状态时记录备注外, 离开(leaving) ‘WAIT’ 状态时也应记录时间戳, 且仅当 目标(target) 状态未配置进入记录时才生效。 因此从 ‘WAIT’ 切换至 ‘DONE’ 时不会触发, 因为 ‘DONE’ 已配置仅记录时间戳。 但从 ‘WAIT’ 切回 ‘TODO’ 时, ‘WAIT’ 设置中的 ‘/!’ 会触发时间戳记录, 即便 ‘TODO’ 未配置任何日志。
你可以使用完全相同的语法为缓冲区设置本地记录偏好:
#+TODO: TODO(t) WAIT(w@/!) | DONE(d!) CANCELED(c@)
若要为配置了 ‘@’ 的待办关键字仅记录时间戳而不写备注, 在提示输入时直接按下 C-c C-c 提交空备注即可。
若要为子树或单个条目定义本地记录设置,
可在该条目中设置 ‘LOGGING’ 属性。
任何非空的 ‘LOGGING’ 属性都会将所有记录设置重置为 nil 。
随后你可以使用 ‘lognotedone’ 或 ‘logrepeat’ 等 ‘启动STARTUP’ 关键字,
以及 ‘TODO(!)’ 等状态特定设置,为该子树启用记录功能。示例:
* TODO Log each state with only a time :PROPERTIES: :LOGGING: TODO(!) WAIT(!) DONE(!) CANCELED(!) :END: * TODO Only log when switching to WAIT, and when repeating :PROPERTIES: :LOGGING: WAIT(@) logrepeat :END: * TODO No logging at all :PROPERTIES: :LOGGING: nil :END:
参见变量 org-log-states-order-reversed 。
注意在议程框架中按下 SPC 显示条目时, ‘LOGBOOK’ 抽屉会自动展开;可使用 C-u SPC 使其保持折叠。
若同时启用 org-log-done 与状态变更记录,Org 模式可能会记录两个时间戳,但不会两次提示输入备注:若两者均配置,状态变更备注优先,取消任务完成备注。