如何统计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
相关产品推荐
相关产品推荐

