我添加了一个这样的lambda()
功能run-with-idle-timer
:
(run-with-idle-timer my-configurable-idle-time t
(lambda ()
;;; do something
) )
是否可以稍后从空闲计时器触发器中再次删除此功能?
是的,run-with-idle-timer
返回一个timer
您可以传递给的对象cancel-timer
。
如果您没有保留timer
对象,您可以timer-idle-list
手动修改。
另请参阅获取正在运行的 Emacs 计时器的列表。
我也遇到过类似的情况,我想杀死一个开始时的计时器:
(setq my-timer (run-with-timer 5 5 'my-func))
然而,
(cancel-timer my-timer)
没有工作,因为它说我的计时器没有设置(不知道为什么会这样)。
除了第一张海报的方法外,还可以用:
(cancel-function-timers 'my-func)
这将取消所有调用函数 'my-func.
为了通过改变我也测试过的计时器列表来杀死它,我做了以下事情:
(length timer-list) ;; I had two timers..one good, one bad
(cdr timer-list) ;; I verified the last was the one I wanted to keep
(setq timer-list (cdr timer-list)) ;; I reset timer-list
显然,此列表结构会有所不同,因此您必须进行相应调整。如果您使用 (run-with-idle-timer) 启动计时器,请替换“timer-idle-list”
如果您使用 'gamegrid-start-timer 启动计时器并且 'gamegrid-kill-timer 不起作用,这也应该有效,因为 'gamegrid-start-timer 本质上只是 'run-with-timer 的包装器
另一种解决方案:如果您运气不好并且实际上无法取消计时器,您可以随时使用
(defvar my-timer-enabler t)
(run-with-idle-timer my-configurable-idle-time t
(lambda ()
(when my-timer-enabler
;;; do something
)))
my-timer-enabler
因此,您可以通过设置为来禁用计时器nil
。您稍后可以通过简单地将 var 设置回t
.