如何在我的程序中清除Emacs回波区域?

如何在我的程序中清除Emacs回波区域?,emacs,echo,minibuffer,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

我有以下代码:

(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中的旧消息无法清除,因此无法显示新消息。我已经尝试过这个问题中提到的方法,但它不起作用

我的Emacs版本是25.3


如何处理这个问题?

你做了一个错误的假设,因此你的问题不是你认为的那样

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

它不是这样做的

您已经使用了
runwithidle timer
,它将在Emacs空闲3(在本例中)秒后运行一次,并且不会重复,直到发生了一些非空闲活动——之后,它将在Emacs空闲3秒后再次运行

请参阅C-hf
使用空闲计时器运行


如果您想要以一致的间隔重复某项操作,请使用
带计时器运行

(消息为零)
适用于我,MacOS High Sierra上的Emacs 25.3.50.1。演示:
(progn(message“Hello…”)(坐1)(message nil)(坐1)(message“Hello…done”)
,正如在另一个问题中所指出的,这是“回声区”,而不是正确的“迷你缓冲区”。
(message nil)
在您的情况下工作得很好,在这种情况下,这实际上是一个很好的解决方案。但就我而言,根本原因是我错误地使用了
idle
函数。无论如何,谢谢。谢谢你的回答:)我对使用空闲计时器运行的
的理解是错误的<代码>使用计时器运行
解决我的问题,太好了!