使区域缩进功能保持区域标记

时间:2011-06-30 01:50:28

标签: emacs elisp indentation

我遇到了haml-mode的region-indent-function,我试图在另一种主要模式下重用它。我们应该能够通过保持haml-indent-region被标记后标记的区域来循环区域缩进,但它不能按预期工作。经过一番黑客攻击后,我发现在函数末尾抛出错误会使Emacs保持标记区域,如下例所示:

(defun haml-indent-region (start end)
  (save-excursion
    ...)
  (error "")) ;; Terrible hack

但我真的不喜欢它。没有这么可怕的黑客行为,有没有一种干净的方式来获得这种行为?

1 个答案:

答案 0 :(得分:3)

在命令完成后重置区域,因此调用activate-mark没有任何效果。抛出错误(非本地退出)显然会阻止此步骤,但这可能是一个错误。

诀窍是:deactivate-mark

  

如果编辑命令将此设置为t,则之后停用标记。   命令循环在每个命令之前将其设置为nil,   并在命令返回时测试该值。   缓冲区修改将t存储在此变量中。

所以,只需在命令结束时执行此操作:

  (setq deactivate-mark nil)