2016-12-29 13 views
2

У меня есть функциядобавить крюк в прог-режиме, за исключением определенного режима

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

и я хочу, чтобы запустить его в prog-mode кроме python-mode, , но я понятия не имею, в настоящее время и я просто add-hook в prog-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

Как правило, вы можете использовать '(производный-режим-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? потому что эта функция не работает так же хорошо, как и другие основные режимы prog, на самом деле это функция об автоматической области отступа перед сохранением, а python чувствительна с отступом, более того, у меня есть лучший выбор, извините за то, что вы так поздно ответили – samray

+0

работает так, как я ожидал, спасибо Stefan – samray