关于elisp的亮点区域

时间:2011-09-21 07:58:38

标签: emacs elisp

看看这个简单的程序:

(defun test ()
  (interactive)
  (push-mark)
  (setq mark-active t)
  (search-forward "a" nil nil 1))

它将光标移动到最近的'a',并突出显示路径。当然,这很明显。

但它的行为会有所不同,具体取决于执行此过程后您的下一个输入是什么,例如,您输入一个字符,如'b'或\ Cg,突出显示消失,但如果输入\ Cf或\ Ce,亮点保持。所以这是我的问题:是什么让这些输入的行为有所不同?

2 个答案:

答案 0 :(得分:6)

来自Emacs manual

  

在文本中的某个位置设置标记也会激活它。当。。。的时候   标记处于活动状态,Emacs指示区域的范围   使用区域面突出显示其中的文本(请参阅面部   定制)。在某些非运动命令之后,包括任何   命令,自动更改缓冲区中的文本,Emacs   停用标记;这会关闭突出显示。你也可以   通过键入C-g,可以随时显式停用标记(请参阅   退出)。

答案 1 :(得分:5)

除了JB所说的,你可以通过在你的命令结束时这样做来阻止他所引用的标记的自动停用:

(setq deactivate-mark  nil)

这是doc字符串。注意最后一句话(这就是JB所说的)。

deactivate-mark is a variable defined in `C source code'.
Its value is nil

Documentation:
If an editing command sets this to t, deactivate the mark afterward.
The command loop sets this to nil before each command,
and tests the value when the command returns.
Buffer modification stores t in this variable.