Оказывается, что все команды редактирования устанавливают var deactivate-mark
, который делает это только после завершения команды.
Чтобы избежать такого поведения, вы должны обернуть изменяющие буфер функции в let
-состоянии, предотвращая изменение глобального deactivate-mark
var.
(let (deactivate-mark)
(...))
Я потратил больше часа на эту проблему, потому что я просто пропустил deactivate-mark в руководстве, думая, что это описание функции. Конечно, как я уже знал, но теперь правильно понял: в emacs lisp есть другое пространство имен для функций и переменных.