2016-12-29 18 views
2

我有一个函数加入PROG模式钩,除了特定的模式

(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"))) 

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

+1

您的解决方案完全正确。 – sds

+0

作为一般说明,您可能想使用'(derived-mode-p'python-mode)'而不是'(eq major-mode'python-mode)' – phils

回答

1

不知道是否是更好的,但你可以这样做:

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

当然,我自己的反射是问“是什么让Python的特殊?”。答案可能会让你用(derived-mode-p 'python-mode)测试更直接地处理问题的核心问题(例如,问题可能与缩进意义有关,因此也适用于Coffeescript和Haskell,也许你可以检查electric-indent-inhibit)。

+0

是什么使Python特别?因为这个函数不能和​​其他主要的编程模式一样工作,实际上,它是一个关于自动缩进区域的函数,在保存之前,python对缩进是敏感的,而且,我有一个更好的选择,抱歉这么迟才回复你 – samray

+0

它符合我的预期,谢谢Stefan – samray