Ну, принимая вызов ответа «нет способа сделать это» (за что я благодарен, скажем так), я решил попытаться найти способ сделать это.
У меня была мысль, что было бы неплохо, чтобы что-то отображалось в строке режима вместо сообщения, так что ...
Я прочитал (некоторую доступную в Интернете версию) исходный код для kmacro-call-macro , elisp Minor Mode Conventions и другие веб-страницы. Я попробовал некоторые вещи. Я сделал некоторую отладку. И, наконец, я придумал этот (несовершенный - подробнее об этом ниже) фрагмент elisp:
;;;;; change kmacro-call-macro (C-x e) to not generate any messages,
;;;;; and instead add a minor mode to the modeline
(defadvice kmacro-call-macro (around kmacro-call-macro-without-message activate)
"run kmacro-call-macro without any messages"
(fset 'saved-message (symbol-function 'message))
(unless (assq 'kmacro-repeat-mode minor-mode-alist)
(setq minor-mode-alist
(cons '(kmacro-repeat-mode " MACRO-REPEAT!") minor-mode-alist)))
(setq kmacro-repeat-mode t)
(defun message (format-string &rest args))
ad-do-it
(fset 'message (symbol-function 'saved-message))
(setq kmacro-repeat-mode nil))
Я совершенно уверен, что это не самый чистый способ сделать это - на самом деле, он на самом деле кажется несколько ошибочным - не всегда включать и выключать сообщение строки режима, когда это необходимо. Но в основном это работает, и это делает меня счастливым.
Если у кого-нибудь есть какие-либо советы по его дальнейшему улучшению, я был бы признателен им.
Я полагаю, что другое решение - переписать kmacro-call-macro, чтобы в основном включить эту функцию, возможно, с другой переменной настройки для управления ею. Я полагаю, что при этом также будет отображаться дополнительная информация (клавиша для повтора; информация о количестве повторов), которая содержится в сообщении. Возможно, это даже возможно с помощью defadvice? Может быть, влияет на значение ad-return-value через переопределенную функцию сообщения или что-то в этом роде?
Во всяком случае, приведенный выше код был добавлен в мой файл .emacs
, и, надеюсь, когда-нибудь будет доработан, когда я немного лучше разбираюсь в elisp и его лучших практиках.
Я надеюсь, что кто-то еще найдет это полезным.
Опять же, улучшения этого приветствуются.
редактирование:
У меня изначально было:
(defun message (s &optional rest stuff))
, который действительно должен был быть (а теперь и выше):
(defun message (format-string &rest args))
Вот надеемся, что это решит проблемы! Это достаточно прерывисто, и я считаю, что слишком рано говорить ...