除了特定模式外,在 prog-mode 中添加一个钩子

add a hook in prog-mode except a particular mode

我有一个功能

(defun a--before-test-save-hook()
  "Test of before save hook"
  (message "foobar"))

我想 运行 它在 prog-mode 除了 python-mode, 但我现在不知道 我只是 add-hookprog-mode 包括 python-mode

(add-hook 'prog-mode (lambda ()
                       (add-hook 'before-save-hook 'a-test-before-save-hook t t)))

我试过了

(defun a-test-before-save-hook()
  "Test of before save hook"
  (unless (eq major-mode 'python-mode)
    (message "foobar")))

但我想要更好的尝试,任何解决方案将不胜感激。

不确定是否更好,但您可以这样做:

(add-hook 'prog-mode-hook
          (lambda ()
            (unless (derived-mode-p 'python-mode)
              (add-hook 'before-save-hook
                        #'a-test-before-save-hook t t))))

当然,我自己的反应就是问"what makes Python special?"。答案可能会让您用更直接的问题核心内容替换 (derived-mode-p 'python-mode) 测试(例如,问题可能与缩进重要性有关,因此也适用于 Coffeescript 和 Haskell 以及也许您可以改为检查 electric-indent-inhibit)。