如何清除程序中的Emacs回声区域?

时间:2019-01-08 12:03:24

标签: emacs echo minibuffer

我有此代码:

(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

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您做出了错误的假设,因此您的问题与您想像的不一样。

  

上面的代码的目的是:每三秒钟重复在minibuffer中打印一行消息。

那不是它的作用。

您使用过run-with-idle-timer,一旦Emacs闲置3秒钟(在这种情况下),它将运行一次,并且不会重复直到发生了一些非空闲活动-之后,一旦Emacs空闲了3秒钟,它将再次运行。

请参见 C-h f run-with-idle-timer

如果您希望某样东西以恒定的间隔重复出现,请使用run-with-timer