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

如何统计orgmode所有org-agenda文件的TODO总数及相关展示方法

统计Org Agenda中TODO总数的实现方法

自定义Agenda视图中获取并显示TODO总数

你可以通过org-map-entries函数直接遍历所有org-agenda-files里的待办条目完成统计,直接把统计结果写入自定义Agenda的头部即可,示例配置如下:

(setq org-agenda-custom-commands
      '(("t" "带全局TODO统计的待办视图"
         agenda ""
         ((org-agenda-overriding-header 
           (format "全局待办视图 | 未完成TODO总数: %d"
                   ;; 匹配所有未完成的TODO类条目,仅遍历agenda配置的文件
                   (org-map-entries t "/+TODO" 'agenda-files)))))))

如果你自定义了多个未完成TODO状态(比如NEXT、WAIT),把匹配规则/+TODO改成/+TODO|+NEXT|+WAIT即可适配你的配置。

将统计信息显示在缓冲区底部

可以把统计结果插入到Emacs的mode-line(缓冲区底部状态栏)中,为了避免频繁遍历文件导致卡顿,推荐加一层缓存,仅在启动和保存Org文件时更新统计值,示例代码如下:

;; 全局TODO总数缓存变量
(defvar my/global-todo-count 0)

;; 更新统计值的函数
(defun my/update-global-todo-count ()
  (setq my/global-todo-count
        (org-map-entries t "/+TODO|+NEXT|+WAIT" 'agenda-files)))

;; Emacs启动时统计一次
(my/update-global-todo-count)

;; 保存Org文件时自动更新统计值
(add-hook 'after-save-hook
          (lambda ()
            (when (derived-mode-p 'org-mode)
              (my/update-global-todo-count))))

;; 把统计值加入缓冲区底部的mode-line
(add-to-list 'mode-line-misc-info
             '(:eval (format " [未完成TODO: %d] " my/global-todo-count)))

如果需要手动触发统计,直接调用M-x my/update-global-todo-count即可。

内容的提问来源于stack exchange,提问作者Ty Kayn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:24:04