在某些Emacs模式下停止运行挂钩

时间:2014-10-02 06:37:42

标签: emacs elisp gnu

我在GNU Emacs配置中有这一行,当我保存时清除空格:

(add-hook 'before-save-hook 'whitespace-cleanup)

如何防止它在某些模式下运行(例如Makefile模式)?

1 个答案:

答案 0 :(得分:2)

以下定义将在模式下运行whitespace-cleanup,但条件中给出的除外:

(defun elektito/whitespace-cleanup ()
  (when (not (derived-mode-p 'makefile-mode))
    (whitespace-cleanup)))

(add-hook 'before-save-hook 'elektito/whitespace-cleanup)

这使用derived-mode-p来检查当前模式而不是直接比较,正如你提到的makefile,而makefile使用了大量略有不同的模式,所有模式都来自makefile-modederived-mode-p接受多个参数来检查不同的父模式。

(注意:可以使用(unless COND EXPR)代替(when (not COND) EXPR),但我发现可读性较差;您可能有不同的偏好。)