我有此代码:
(defun do-repeated-work (args)
"some work that need executed repeatedly"
(message nil)
(message "doing some repeated work, arg = %s, current time = %s" args (format-time-string "%H:%M:%S")))
(setq timer (run-with-idle-timer 3 t 'do-repeated-work (list "arg1" "arg2" "arg3")))
上面代码的目的是:每三秒钟重复在minibuffer中打印一行消息。但是我发现,当函数do-repeated-work
再次起作用时,无法清除emacs minibuffer中的旧消息,因此无法显示新消息。我已经尝试过在此问题中提到的方法:how to empty or clear the emacs minibuffer?,但这是行不通的。
我的Emacs版本是25.3
如何解决这个问题?
答案 0 :(得分:1)
您做出了错误的假设,因此您的问题与您想像的不一样。
上面的代码的目的是:每三秒钟重复在minibuffer中打印一行消息。
那不是它的作用。
您使用过run-with-idle-timer
,一旦Emacs闲置3秒钟(在这种情况下),它将运行一次,并且不会重复直到发生了一些非空闲活动-之后,一旦Emacs空闲了3秒钟,它将再次运行。
请参见 C-h f run-with-idle-timer
如果您希望某样东西以恒定的间隔重复出现,请使用run-with-timer
。