在议程视图中显示已安排的例程实际 'Done' 时间

Display scheduled routines actual 'Done' time in agenda view

我计划在早上 5:00 醒来,并在今天早上 5:12 完成它

如果显示例程的实际完成时刻可能会更有帮助。

然而,事实并非如此。

更新:

更糟糕的是,计划的工作在重建议程后消失了,而不是显示为完成状态的计划时刻。

如何配置议程视图以显示实际完成时间?

DONE 状态的时间戳不会出现在您的 org-agenda 中,因为它是一个非活动时间戳。这是常规时间戳和非活动时间戳之间的区别:常规时间戳会触发一个条目显示在议程中,而非活动时间戳则不会。这引导我们找到第一个可能的解决方案(您已经尝试过):手动将这些非活动时间戳更改为活动时间戳。当 org-agenda 解析活动时间戳时,它会在当时将相关任务的条目放入议程中。这里的问题是任务的 TODO 状态是 NEXT 因为重复的任务已经转移到下一次出现。因此 org-agenda 条目的状态将是 NEXT,而不是 DONE。 (这里值得注意的是,将 non-repeating 任务的 CLOSED 时间戳更改为活动状态不会导致它在当时出现在议程中。)

或者,我们可以让 org-agenda 显示非活动时间戳。有几种方法可以做到这一点:

  • 在议程视图中,按 [],这将导致显示非活动时间戳。
  • 将变量 org-agenda-include-inactive-timestamps 设置为 t 并重新加载议程。

这也不太理想。由于重复任务的转移 TODO 状态,议程条目再次被标记为 NEXT。此外,(至少对我而言),该项目出现了两次。其中一个来自航海日志,另一个来自 LAST_REPEAT 属性.

幸运的是 org-agenda 提供了更好的选项来查看使用 org-agenda-log-mode 完成的任务的时间戳。在议程视图中,可以使用 l("k" 和 "m" 之间的字母)激活 org-agenda-log-mode。这仍然不足以显示重复的任务完成时间戳。默认情况下 org-agenda-log-mode 仅显示已关闭或已打卡的任务。如上所述,此任务自转移到下一次重复后尚未关闭。但是,org-agenda 还能够显示已更改状态的任务的时间戳。由于记录的任务从 NEXT 更改为 DONE,其时间戳将显示在此视图下。我们可以通过几种不同的方式激活此视图:

  • 正在使用通用参数 (C-u l) 调用 org-agenda-log-mode
  • state 添加到 org-agenda-log-mode-items 例如(setq org-agenda-log-mode-items '(closed clock state)).
  • 设置org-agenda-start-with-log-mode 例如(setq org-agenda-start-with-log-mode '(closed clock state))。此选项将导致议程在 org-agenda-log-mode 开始,如果您希望在打开议程时始终看到此信息,这是最佳选择。

需要注意的是,虽然完成的任务会显示在这里,但它仍然会有 NEXT 标签。但是,此时它也会显示其状态变为DONE(示例见下图)


示例

例如,这是一个简短的 org-mode 文件,其中包含一个已经完成一次的重复任务 ("Wake Up")。出于演示目的,此文件还有另一个未完成的重复任务,一个已关闭的one-time任务和另一个未完成但已打卡的计划任务:

#+SEQ_TODO: NEXT(n) TODO(t) | DONE(d)
* Items
** NEXT Wake up
   SCHEDULED: <2019-06-11 Tues 05:00 +1d>
   :PROPERTIES:
   :LAST_REPEAT: [2019-06-10 Mon 13:37]
   :END:
   :LOGBOOK:
   - State "DONE"       from "NEXT"       [2019-06-10 Mon 13:37]
   :END:
** DONE One time event
   CLOSED: [2019-06-10 Mon 13:46] SCHEDULED: <2019-06-10 Mon 15:00>
** Not going to be finished
   SCHEDULED: <2019-06-11 Tue>
   :LOGBOOK:
   CLOCK: [2019-06-10 Mon 13:54]--[2019-06-10 Mon 13:54] =>  0:00
   :END:
** Go to bed
   SCHEDULED: <2019-06-10 Mon 22:00 +1d>

调用 org-agenda 后,我们看到完成的 "Wake Up" 的时间戳没有显示:

允许不活动的时间戳将显示已完成的 "Wake Up" 时间戳,但时间戳出现两次并且不太清楚这些议程项目指的是什么:

调用 org-agenda-log-mode 会提供更多相关的议程条目(并且足以显示 one-time 任务的结束时间戳)。但是,它默认不显示状态变化,这意味着我们的 "Wake Up" 时间戳不会出现:

修改 org-agenda-log-mode 以显示更改状态的时间戳,我们终于看到了关闭的 "Wake Up" 时间戳。