如何从run-with-idle-timer中删除一个函数?

时间:2013-03-07 13:46:59

标签: emacs elisp

我已将lambda()函数添加到run-with-idle-timer,如下所示:

(run-with-idle-timer my-configurable-idle-time t
                 (lambda ()
                    ;;; do something
                  ) )

以后可以从空闲计时器触发器中再次删除此功能吗?

3 个答案:

答案 0 :(得分:13)

是的,run-with-idle-timer会返回timer个对象,您可以将其传递给cancel-timer

如果您没有保留timer对象,可以手动修改timer-idle-list

另见Getting a list of running Emacs timers

答案 1 :(得分:7)

我也遇到了类似的情况,我想杀死我开始的计时器:

(setq my-timer (run-with-timer 5 5 'my-func))

然而,

(cancel-timer my-timer) 

没有工作,因为它说我的计时器没有设置(不知道为什么会发生这种情况)。

除了第一张海报的方法外,还可以用以下方法杀死:

(cancel-function-timers 'my-func)

取消所有定时器调用函数' my-func。

通过改变我也测试过的timer-list来杀死它,我做了以下几点:

(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)启动计时器

如果用gamegrid-start-timer启动你的计时器并且游戏杀戮计时器不起作用,这也应该有效,因为游戏的启动计时器基本上只是一个' run-with-timer

的包装器

答案 2 :(得分:1)

还有一个解决方案:如果您运气不好并且无法实际取消计时器,您可以随时使用

(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来重新启用计时器。