Emacs:在交互式命令中激活标记的问题

时间:2012-01-30 19:25:11

标签: emacs elisp

似乎以任何方式改变缓冲区,阻止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))

我更喜欢修复它的方法,但只是一个解释也很好。

1 个答案:

答案 0 :(得分:8)

事实证明,所有编辑命令都设置了 var deactivate-mark,它在命令完成后才会这样做。

要避免此行为,必须将缓冲区更改函数包装在let语句中,以防止更改全局deactivate-mark var。

(let (deactivate-mark)
   (...))

我花了一个多小时来解决这个问题,因为我刚刚跳过手册中的 deactivate-mark ,认为这是对该功能的描述。当然,正如我已经知道的那样,但现在已经正确学习:emacs lisp对函数和变量有不同的命名空间。