Emacs 24.4 est livré avec un nouveau système de conseil. Le NEWS
fichier dit:
** Le nouveau forfait
nadvice.el
offre des installations de conseil plus légères. Il est stratifié comme:***
add-function
/remove-function
, qui peut être utilisé pour ajouter / supprimer du code sur n'importe quel emplacement comportant des fonctions, tels que des filtres de processus ou des<foo>-function
crochets.***
advice-add
/advice-remove
pour ajouter / supprimer un conseil sur une fonction nommée, un peu comme ledefadvice
fait le fait.
Q: Quels sont les avantages pratiques et les implications de ce nouveau package?
Je suis particulièrement intéressé par les réponses aux points suivants:
Si je n'utilise que des conseils pour personnaliser Emacs (par opposition à l'écriture de packages complémentaires), dois-je passer au nouveau système? Va-t-il remplacer l'ancien système à un moment donné?
Que puis-je faire exactement avec le nouveau système que je ne peux pas accomplir
defadvice
?Quelle est l’importance de pouvoir "ajouter / supprimer du code sur n’importe quel lieu porteur de fonctions"?
:around
conseils (ou:filter-args
ou:filter-result
conseils) pour obtenir le même effet.L'un des avantages évidents des conseils en tant que fonctions normales est que vous pouvez consulter une définition avec
find-function
.À l'heure actuelle, lorsque vous consultez l'aide d'une fonction conseillée (de style nouveau), il fournit un lien vers l'aide de la fonction de conseil, puis un lien vers la source (comme d'habitude pour l'aide de la fonction).
L'ancien système fournissait les conseils en ligne docstring, mais il n'y avait aucun moyen de voir le code (j'avais généralement recours à
rgrep
).(Personnellement, j'aimerais voir un mélange d'anciennes et de nouvelles approches d'affichage de l'aide, car j'aimais bien avoir la docstring en ligne, mais je suis sûr que cela est possible par la suite.)
la source
defadvice
. Voir ce rapport de bogue Emacs . C'est une lacune.De l'en-tête du fichier:
D'après ce que j'ai lu, l'objectif premier est d'être plus simple que l'ancien système de conseil, sans avoir plus de fonctionnalités. En lisant les documents, il semble que cela
advice-add
contienne un sous-ensemble dedefadvice
fonctionnalités de, tout enadd-function
contenant quelques fonctionnalités utiles pour conseiller des fonctions non traditionnelles telles que les filtres de processus (ce qui était probablement possible avecdefadvice
, mais je ne sais pas comment).Autant que je sache, il
defadvice
n'est pas officiellement obsolète. Vous devriez donc continuer à l'utiliser (et si vous êtes auteur d'un paquet, vous voudrez probablement continuer à l'utiliser jusqu'à ce que 24.4 soit plus largement adopté). Cependant, il semble que les auteurs d’Emacs souhaitent migrer complètement vers le nouveau système, il est donc probablement logique de basculer lentement.la source
defadvice
dehors (et il continuera à être).Une chose que je n'ai pas vue mentionnée ici - bien qu'à certains égards, cela soit dû à l'approche plus simple (meilleure modularité et "colle") du "nouveau" système de conseil, qui a été mentionné dans d'autres réponses, est la suivante: Il est beaucoup plus facile d'ajouter, de combiner, de supprimer, de réorganiser , etc.
Il est même possible de le faire de manière interactive, dynamique, bien qu'un conseil ait besoin d'un petit coup de pouce pour le faciliter. Je ne suis pas au courant d'autres utilisations de nadvice de cette façon (composition interactive de conseils), mais il existe au moins une application de ce type. Je l'utilise dans Isearch + pour vous permettre d'ajouter et de supprimer des combinaisons de prédicats de filtre Isearch arbitraires (filtres) lors d'une recherche.
IOW, tout comme vous modifiez votre modèle de recherche de manière incrémentielle, vous pouvez ainsi affiner votre recherche à la volée en utilisant plusieurs filtres.
Le filtrage Isearch est effectué à l'aide d'une variable
isearch-filter-predicate
, disponible depuis un certain temps déjà. Pourtant, les filtres Isearch ne sont pas définis souvent. Ils sont généralement statiques et prédéfinis pour un contexte donné (par exemple, Wdired). Il n'est pas très facile pour les utilisateurs de les définir et de les utiliser, du moins de manière interactive.Il n'y a qu'une seule variable. Par
isearch-filter-predicate
conséquent, modifier le filtrage signifie en réalité changer le prédicat de filtre unique, ce qui revient à composer des fonctions, à combiner des prédicats, pour affiner, développer ou modifier autrement la recherche.Mais c’est exactement ce à quoi nadvice est bon. En résumé, nadvice est si pratique pour combiner des fonctions qu’il est facile d’ affiner le filtrage de recherche de manière interactive . (Voir Filtrage dynamique Isearch pour plus d'informations à ce sujet.)
la source