You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Emacs Org-mode自定义议程视图查看过去一周的DONE项?

实现Org-mode过去一周完成DONE项的自定义议程视图

核心方案:基于LOGBOOK完成时间过滤

通过org-agenda-skip-function检查条目LOGBOOK中的完成时间戳,仅保留过去一周内标记为DONE的任务,配置如下:

(setq org-agenda-custom-commands
      '(("r" "Weekly Review"
         ((todo "DONE"
                ((org-agenda-overriding-header "Completed Tasks (Past Week):")
                 (org-agenda-skip-function
                  (lambda ()
                    (let* ((done-log (org-entry-get nil "LOGBOOK" t))
                           (done-time-str (when done-log
                                            (string-match "\\[\\([^]]+\\)\\]" done-log)
                                            (match-string 1 done-log)))
                           (done-time (when done-time-str
                                        (org-time-string-to-time done-time-str))))
                      (when (or (not done-time)
                                (time-less-p done-time (time-subtract (current-time) (days-to-time 7))))
                        'skip))))))))

代码说明:

  • org-entry-get nil "LOGBOOK" t:提取当前任务的LOGBOOK内容
  • 正则匹配\[([^]]+)\]抓取完成时间戳字符串,再通过org-time-string-to-time转为可计算的时间对象
  • time-subtract (current-time) (days-to-time 7):计算当前时间往前推7天的时间点
  • 若任务无完成时间,或完成时间早于一周前,则跳过该条目

退而求其次:基于计划日期(DEADLINE/SCHEDULED)过滤

如果LOGBOOK无完成时间,可改用任务的DEADLINE或SCHEDULED日期过滤,配置如下:

(setq org-agenda-custom-commands
      '(("r" "Weekly Review"
         ((todo "DONE"
                ((org-agenda-overriding-header "Completed Tasks (Past Week Scheduled/Deadline):")
                 (org-agenda-skip-function
                  (lambda ()
                    (let* ((deadline (org-entry-get nil "DEADLINE" t))
                           (scheduled (org-entry-get nil "SCHEDULED" t))
                           (plan-time (or (when deadline (org-time-string-to-time deadline))
                                          (when scheduled (org-time-string-to-time scheduled)))))
                      (when (or (not plan-time)
                                (time-less-p plan-time (time-subtract (current-time) (days-to-time 7))))
                        'skip))))))))

代码说明:

  • 优先读取DEADLINE日期,无DEADLINE则取SCHEDULED日期
  • 同样通过时间比较,过滤掉计划日期早于一周前的DONE任务

额外提示

  • 确保LOGBOOK自动记录完成时间:可通过(setq org-log-done 'time)开启,标记任务为DONE时会自动生成带时间戳的LOGBOOK记录
  • 调整时间范围:修改(days-to-time 7)中的数字即可,比如14代表过去两周

内容的提问来源于stack exchange,提问作者Steve Molitor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 13:45:17