Убрать хуки для определенных режимов


12

Я хочу удалить конечные пробелы при сохранении для всех режимов, кроме org-mode.

По моему .emacs, у меня есть следующая строка:

(add-hook 'before-save-hook 'delete-trailing-whitespace)

Я использую use-packageмакрос, и я попытался добавить (remove-hook 'before-save-hook 'delete-trailing-whitespace)к своему :configблоку, но это удаляет ловушку глобально. Как я могу удалить это специально для org-mode?

Ответы:


17

У меня нет никакого опыта работы с use-packageмакросом, но в принципе вы можете использовать третий аргумент, remove-hookкоторый говорит ему об удалении функции только из локальной ловушки:

(remove-hook 'before-save-hook 'delete-trailing-whitespace t)

Вот документация для справки:

(remove-hook HOOK FUNCTION &optional LOCAL)

Удалите из значения HOOK функцию FUNCTION. HOOK должен быть символом, а FUNCTION может быть любой допустимой функцией. Если FUNCTION не является значением HOOK или FUNCTION не отображается в списке хуков для запуска в HOOK, то ничего не делается. См add-hook.

Необязательный третий аргумент, LOCAL, если не ноль, говорит об изменении локального значения буфера, а не его значения по умолчанию.


Работает отлично, спасибо. Еще одно отличное напоминание C-h f. Я приму, как только таймер закончится.
Мэтью Пизиак

2
@MatthewPiziak: если вам от этого станет легче, прошло очень много времени, прежде чем я понял, что это третий аргумент, и только после того, как кто-то на этом сайте указал мне на это.
Дан

2
Разве это не сработает, только если функция была явно добавлена как ЛОКАЛЬНАЯ add-hook? (Быстрый тест в 24.5, кажется, подтверждает мои ожидания ... есть ли в стволе новая функциональность для облегчения такого переопределения?)
phils
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.