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.