如何在我的程序中清除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
函数。无论如何,谢谢。谢谢你的回答:)我对使用空闲计时器运行的的理解是错误的<代码>使用计时器运行
解决我的问题,太好了!