Это можно сделать довольно легко, переопределив undo-boundary
, например, с помощью пакета noflet
.
С учетом определения макроса (генерируемого insert-kbd-macro
) следующим образом:
(fset 'my-macro
[... keys ...])
или:
(fset 'my-macro
(lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ([...keys...] 0 "%d")) arg)))
Отредактируйте его так:
(require 'noflet)
(fset 'my-macro
(lambda (&optional arg) "Keyboard macro." (interactive "p")
(undo-boundary)
(noflet ((undo-boundary ()))
(kmacro-exec-ring-item (quote ([...keys...] 0 "%d")) arg))
(undo-boundary)))
Если вы не хотите редактировать все определения макросов, вы можете альтернативно добавить оболочку, которая вызывает макросприводится в качестве аргумента при создании / подавлении отмены границ, как указано выше.