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

How to clear Emacs echo area in my program?

我有这个代码:

(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

如何解决这个问题?

你做出了错误的假设,因此你的问题不是你想的那样。

The purpose of the code above is: print a line of message in minibuffer repeatedly every three seconds.

这不是它的作用。

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

参见C-hf run-with-idle-timer

如果您想要以一致的间隔重复的内容,请使用 run-with-timer