Il y a certaines choses comme l'affichage des espaces de fin, l'affichage des limites de tampon, les délimiteurs de couleur arc-en-ciel et bien d'autres que j'aimerais activer dans la plupart des modes ou plutôt, tous ceux liés à la programmation et au texte (car l'affichage des espaces de fin dans, disons ediff-mode
, serait en conflit avec le mode majeur) au lieu d'utiliser un mode mineur globalisé avec des règles d'exception. Étant donné que la plupart des modes sont dérivés de prog-mode
ou text-mode
, l'ajout de la fonction en question aux deux prog-mode-hook
et text-mode-hook
fonctionne, cependant, il existe suffisamment de modes ne suivant pas cette spécification, tels que css-mode
ou LaTeX-mode
.
Je voudrais définir un hook qui englobe tous ces modes pour le moment pour n'ajouter des fonctions qu'à un seul hook. Appelons cela non-special-mode-hook
(pour le distinguer special-mode-hook
). Comment pourrais-je créer un tel crochet exécuté pour tous les principaux modes pour lesquels il est conçu?
Réponses:
Il vous suffit de regrouper ces paramètres dans une fonction et d'ajouter cette fonction à toutes les fonctions de raccordement pertinentes:
Aucune autre façon de le faire ne serait plus concise: quoi qu'il arrive, quelque part vous aurez une liste blanche ou une liste noire de modes. Dans la pratique, vous ne trouverez que quelques modes qui doivent être ajoutés à la liste, je suggère donc de garder les choses simples.
Dans ma propre configuration, j'utilise exactement cette astuce pour unifier la configuration de plusieurs modes orientés lisp.
la source
derived-mode-hook-name
.(dolist ...)
vs(add-hook ...)
<repeat>. Je ne bâton avec moi en gardant le mode spécifique change séparé (fichier par modeuse-package
,el-get
). Les deux sont des solutions tout-en-un, mais d'un point de vue différent.APPEND
argument non nuladd-hook
ici, les hooks seront invoqués dans l'ordre inverse de l'ordre de liste que vous fournissez. Aucun problème avec ça; sachez-le, au cas où la commande serait importante.Vous pouvez ajouter une fonction à
after-change-major-mode-hook
, qui vérifie si le nouveau mode est intéressant (éventuellement via(not (derived-mode-p 'special-mode))
), et si c'est le cas, s'exécutenon-special-mode-hook
.la source
fundamental-mode
, mais font plus que simplement afficher du texte), mais un peu trop magique à mon goût. D'où le vote positif.Je me suis retrouvé à faire souvent le schéma de @ sanityinc pour encapsuler mes paramètres et activations de mode mineur dans un defun et boucler à travers des crochets pour l'appeler, mais je voulais une approche plus propre, j'ai donc écrit cette macro:
Remarque: je suis
dash.el
pour la propreté mais il pourrait facilement être adapté à l'utilisation(dolist)
.Ensuite, vous pouvez définir des modes groupés en tant que variables de liste et les utiliser comme suit:
la source
derived-mode-hook-name
pour obtenir le nom de la variable hook d'un mode, évitant ainsi l'intern
astuce.derived-mode-hook-name
. bon conseil!Plutôt que de définir un nouveau hook qui fonctionne pour tous ces modes non dérivés , vous pouvez procéder comme suit.
Vous devrez toujours l'ajouter à tous les modes, mais en définissant votre fonction pour inclure tous les modes, vous n'aurez qu'à modifier une définition lors de l'ajout / suppression de fonctionnalités supplémentaires.
la source
Vous pouvez peut-être essayer ceci:
la source