我遇到了haml-mode的region-indent-function
,我试图在另一种主要模式下重用它。我们应该能够通过保持haml-indent-region被标记后标记的区域来循环区域缩进,但它不能按预期工作。经过一番黑客攻击后,我发现在函数末尾抛出错误会使Emacs保持标记区域,如下例所示:
(defun haml-indent-region (start end)
(save-excursion
...)
(error "")) ;; Terrible hack
但我真的不喜欢它。没有这么可怕的黑客行为,有没有一种干净的方式来获得这种行为?
答案 0 :(得分:3)
在命令完成后重置区域,因此调用activate-mark没有任何效果。抛出错误(非本地退出)显然会阻止此步骤,但这可能是一个错误。
诀窍是:deactivate-mark
如果编辑命令将此设置为t,则之后停用标记。 命令循环在每个命令之前将其设置为nil, 并在命令返回时测试该值。 缓冲区修改将t存储在此变量中。
所以,只需在命令结束时执行此操作:
(setq deactivate-mark nil)