Lobsters | 📄 原文链接 | 2026-10-19 收录

用三层定时器让 Emacs 每周日自动更新时钟表

来源:mbork.pl — 2026-10-17

📋 概述

Marcin Borkowski 每周日早上做周回顾,第一件事是用 org-dblock-update 刷新 Org 文件里的时钟表,这一步要花将近一分钟,以往他都是按下之后去洗漱。他想让 Emacs 在自己打开笔记本时顺手做完,思路是「空闲定时器」:如果 Emacs 空闲了一分钟,人大概离开了键盘,这时跑一个稍慢的任务是安全的。难点是不能每次空闲都跑,只能每周日、且当天只跑一次,所以需要一个常规定时器去设置空闲定时器,用 org-read-date 拿到「周日 3:00」再以一周为周期重复。第一次实现立刻踩坑:笔记本休眠的那段时间也被算作空闲,于是定时器一触发,空闲定时器马上满足条件,任务在开机瞬间就跑完了。他先试了 setq unread-command-events nil,Eli Zaretskii 指出这种写法很脆弱,给出的正解是三层定时器嵌套:周日定时器触发后先设一个「60 秒后执行」的普通定时器,这个定时器再设置一个「空闲 60 秒后执行」的定时器——如果这 60 秒内用户动了 Emacs,空闲时间会被正常重置;如果没动,休眠累积的空闲时间正好让它按时触发。

🔑 核心要点

💡 金句

我承认把三个定时器叠起来有点绕,但我看不出这套装置有任何失败的理由。
← 返回 Lobsters 首页