Supprimer les crochets pour des modes spécifiques

12

Je veux supprimer les espaces de fin lors de l'enregistrement pour chaque mode sauf org-mode.

Dans mon .emacs, j'ai la ligne suivante:

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

J'utilise la use-packagemacro et j'ai essayé d'ajouter (remove-hook 'before-save-hook 'delete-trailing-whitespace)à mon :configbloc, mais cela supprime le crochet globalement. Comment puis-je le supprimer spécifiquement pour org-mode?

Matthew Piziak
la source

Réponses:

17

Je n'ai aucune expérience avec la use-packagemacro, mais en principe, vous pouvez utiliser le troisième argument remove-hookqui lui dit de supprimer la fonction uniquement du hook local:

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

Voici la docstring pour référence:

(remove-hook HOOK FUNCTION &optional LOCAL)

Supprimer de la valeur de CROCHET la fonction FONCTION. CROCHET doit être un symbole et FONCTION peut être n'importe quelle fonction valide. Si FUNCTION n'est pas la valeur de HOOK, ou, si FUNCTION n'apparaît pas dans la liste des hooks à exécuter dans HOOK, alors rien n'est fait. Tu vois add-hook.

Le troisième argument facultatif, LOCAL, s'il n'est pas nul, dit de modifier la valeur de tampon local du crochet plutôt que sa valeur par défaut.

Dan
la source
Fonctionne parfaitement, merci. Un autre grand rappel à C-h f. J'accepterai dès que le chronomètre sera épuisé.
Matthew Piziak
2
@MatthewPiziak: si cela vous fait vous sentir mieux, il a fallu beaucoup de temps avant que je réalise que cela prenait ce troisième argument, et ce n'est qu'après que quelqu'un sur ce site me l'a signalé.
Dan
2
Cela ne fonctionnera-t-il que si la fonction a été explicitement ajoutée en tant que LOCAL dans add-hookpour commencer? (Un test rapide en 24.5 semble confirmer mes attentes ... y a-t-il de nouvelles fonctionnalités dans le tronc pour faciliter ce type de substitution?)
phils