Как очистить область эха Emacs в моей программе? - PullRequest
0 голосов
/ 08 января 2019

У меня есть этот код:

(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")))

Цель приведенного выше кода: печатать строку сообщения в минибуфере несколько раз каждые три секунды. Но я обнаружил, что, когда функция do-repeated-work снова работает, старое сообщение в минибуфере emacs не может быть очищено, поэтому новое сообщение не может быть отображено. Я уже пробовал способ, упомянутый в этом вопросе: как очистить или очистить минибуфер emacs? , но он не работает.

Моя версия Emacs - 25,3

Как справиться с этой проблемой?

1 Ответ

0 голосов
/ 08 января 2019

Вы сделали неверное предположение, и, следовательно, ваша проблема не в том, о чем вы думаете.

Цель приведенного выше кода: печатать строку сообщения в минибуфере несколько раз каждые три секунды.

Это не то, что он делает.

Вы использовали run-with-idle-timer, который будет запускаться один раз после того, как Emacs простаивал в течение 3 (в данном случае) секунд, и не будет повторять до тех пор, пока не отключится действие произошло - после этого оно снова запустится, как только Emacs простаивает в течение 3 секунд.

См. C-h f run-with-idle-timer

Если вы хотите что-то, что повторяется с постоянным интервалом, используйте run-with-timer.

...