TIL-调教Org-mode的Deadline
我之前不怎么碰 Org-mode 的 deadline。默认的 deadline 和 scheduled 任务在议程里看着差不多,14 天的警告窗口也经常让人感觉太短了。后来看到 whhone 上这篇文章,试了两个调整,效果挺不错。
作者的优先级顺序是,
Deadline + Priority > Schedule > TODO States - Deadline + Priority 决定做什么、什么时候做 - Schedule 留给习惯和重复任务 - TODO States 备选 backlog
具体两个技巧,
用自定义 leaders 让 deadline 一眼可见
默认的 scheduled 和 deadline 前缀很难区分。我的做法是缩短 scheduled 前缀,给 deadline 加 🔴 前缀,再调整排序让 deadline 排到最前面就行了。
下面这段配置依赖 Org 和 Org-agenda 已加载,建议在 init.el 里放到 (require 'org-agenda) 之后:
(setq org-agenda-scheduled-leaders '("Sched" "S.%2dx")) (setq org-agenda-deadline-leaders '("🔴 0d" "🔴%2dd" "🔴-%1dd")) (defun my/org-agenda-repeater () "The repeater shown in org-agenda-prefix for agenda." (let ((pom (org-get-at-bol 'org-marker))) (if (or (org-get-scheduled-time pom) (org-get-deadline-time pom)) (format "%5s: " (or (org-get-repeat) "")) "------------"))) (setq org-agenda-prefix-format '((agenda . " %i %-12:c%?-12t%s%(my/org-agenda-repeater)"))) (setq org-agenda-sorting-strategy '((agenda deadline-up habit-down time-up priority-down category-keep)))
改完再看 agenda,deadline 和 scheduled 已经彻底分开了。deadline 排在最上面,前面带着 🔴 前缀,紧急任务一眼就能跳出来。后面的 repeater 列(=+1d= 之类的)会显示任务的重复周期,重复任务和一次性任务也好区分。
把警告窗口从 14 天扩展到 35 天
默认 org-deadline-warning-days 是 14。但看到 deadline 时也就剩不到两周了,如果手头已经有安排,这点窗口期根本不够从容规划。
改为 35 天(5 周),让重要截止日期提前一个月出现在议程里:
(setq org-deadline-warning-days 35)
对于小任务,可以在具体 DEADLINE 中用 -3d 覆盖默认警告周期,具体写法是
: DEADLINE: <2026-06-19 Fri ++28d -3d>
其中 ++28d 是每 28 天重复一次的周期标记(双加号表示错过不补追),=-3d= 是把该任务的警告提前期覆盖为 3 天。
两个改动都不大,但 deadline 现在好用多了,一眼就能看清哪些任务要到期了。