Usuń zaczepy dla określonych trybów

12

Chcę usunąć końcowe białe znaki przy zapisywaniu dla każdego trybu z wyjątkiem org-mode.

W mojej .emacsmam następującą linię:

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

Używam use-packagemakra i próbowałem dodać (remove-hook 'before-save-hook 'delete-trailing-whitespace)do mojego :configbloku, ale to usuwa globalnie hak. Jak mogę go specjalnie usunąć org-mode?

Matthew Piziak
źródło

Odpowiedzi:

17

Nie mam żadnego doświadczenia z use-packagemakrem, ale w zasadzie możesz użyć trzeciego argumentu, remove-hookktóry każe mu usunąć funkcję tylko z lokalnego hooka:

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

Oto dokumentacja dla odniesienia:

(remove-hook HOOK FUNCTION &optional LOCAL)

Usuń z wartości HOOK funkcję FUNCTION. HAK powinien być symbolem, a FUNKCJA może być dowolną prawidłową funkcją. Jeśli FUNCTION nie jest wartością HOOK, lub jeśli FUNCTION nie pojawia się na liście haków do uruchomienia w HOOK, nic się nie dzieje. Zobaczyć add-hook.

Opcjonalny trzeci argument, LOCAL, jeśli nie jest zerowy, mówi o zmodyfikowaniu lokalnej wartości bufora haka zamiast jego wartości domyślnej.

Dan
źródło
Działa idealnie, dziękuję. Kolejne świetne przypomnienie C-h f. Przyjmę, jak tylko skończy się czas.
Matthew Piziak,
2
@MatthewPiziak: jeśli to sprawi, że poczujesz się lepiej, minęło dużo czasu, zanim zdałem sobie sprawę, że to trzeci argument i dopiero wtedy, gdy ktoś na tej stronie mi to wskazał.
Dan
2
Czy to nie zadziała tylko, jeśli funkcja została na początku wyraźnie dodana jako LOKALNA add-hook? (Szybki test w 24.5 wydaje się potwierdzać moje oczekiwania ... czy jest nowa funkcjonalność w bagażniku, aby ułatwić tego rodzaju obejście?)
Phils