似乎以任何方式改变缓冲区,阻止defun激活标记:
(defun mark-five-next ()
"Marks the next five chars as expected"
(interactive)
(push-mark (+ 5 (point)) t t))
(defun insert-an-a-then-mark-five-next ()
"Does not mark the next five chars"
(interactive)
(insert "a")
(push-mark (+ 5 (point)) t t))
我更喜欢修复它的方法,但只是一个解释也很好。
答案 0 :(得分:8)
事实证明,所有编辑命令都设置了 var deactivate-mark
,它在命令完成后才会这样做。
要避免此行为,必须将缓冲区更改函数包装在let
语句中,以防止更改全局deactivate-mark
var。
(let (deactivate-mark)
(...))
我花了一个多小时来解决这个问题,因为我刚刚跳过手册中的 deactivate-mark ,认为这是对该功能的描述。当然,正如我已经知道的那样,但现在已经正确学习:emacs lisp对函数和变量有不同的命名空间。