Rimuovere i ganci per modalità specifiche


12

Voglio eliminare gli spazi vuoti finali su save per ogni modalità tranne org-mode.

Nel mio .emacs, ho la seguente riga:

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

Uso la use-packagemacro e ho provato ad aggiungere (remove-hook 'before-save-hook 'delete-trailing-whitespace)al mio :configblocco, ma questo rimuove l'hook a livello globale. Come posso rimuoverlo appositamente per org-mode?

Risposte:


17

Non ho alcuna esperienza con la use-packagemacro, ma in linea di principio, potresti usare il terzo argomento a remove-hookcui dice di rimuovere la funzione solo dall'hook locale:

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

Ecco la documentazione per riferimento:

(remove-hook HOOK FUNCTION &optional LOCAL)

Rimuovere dal valore di HOOK la funzione FUNCTION. HOOK dovrebbe essere un simbolo e FUNCTION può essere qualsiasi funzione valida. Se FUNCTION non è il valore di HOOK o, se FUNCTION non viene visualizzato nell'elenco di hook da eseguire in HOOK, non viene fatto nulla. Vedere add-hook.

Il terzo argomento facoltativo, LOCAL, se diverso da zero, indica di modificare il valore buffer-local dell'hook anziché il suo valore predefinito.


Funziona perfettamente, grazie. Un altro grande promemoria per C-h f. Accetterò non appena il timer si esaurisce.
Matthew Piziak,

2
@MatthewPiziak: se ti fa sentire meglio, ci è voluto molto tempo prima che mi rendessi conto che ha preso quel terzo argomento, ed è stato solo dopo che qualcuno su questo sito me lo ha fatto notare.
Dan

2
Non funzionerà solo se la funzione è stata aggiunta esplicitamente come LOCAL add-hookall'inizio? (Un rapido test in 24.5 sembra confermare le mie aspettative ... c'è una nuova funzionalità nel trunk per facilitare questo tipo di override?)
phils
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.