Emacs 24.4 viene con un nuevo sistema de consejos. El NEWSarchivo dice:
** El nuevo paquete
nadvice.elofrece servicios de asesoramiento más livianos. Está en capas como:***
add-function/remove-function, que se puede usar para agregar / eliminar código en cualquier lugar que lleve funciones, como filtros de proceso o<foo>-functionganchos.***
advice-add/advice-removepara agregar / eliminar un consejo sobre una función con nombre, al igual que lodefadvicehace.
P: ¿Cuáles son los beneficios prácticos y las implicaciones de este nuevo paquete?
Estoy especialmente interesado en respuestas que aborden los siguientes puntos:
Si solo estoy usando consejos para personalizar Emacs (en lugar de escribir paquetes de complementos), ¿necesito cambiar al nuevo sistema? ¿Reemplazará el viejo sistema en algún momento?
¿Qué puedo hacer exactamente con el nuevo sistema que no puedo lograr
defadvice?¿Cuál es el significado de poder "agregar / eliminar código en cualquier lugar que lleve funciones"?

:aroundconsejos (:filter-argso:filter-resultconsejos) para obtener el mismo efecto.Uno de los claros beneficios de que el consejo sea una función normal es que puede visitar una definición
find-function.En la actualidad, al ver la ayuda para una función recomendada (nuevo estilo), proporciona un enlace a la ayuda para la función de asesoramiento, y desde allí un enlace a la fuente (como es habitual para la ayuda de la función).
El antiguo sistema proporcionaba el documento docstring en línea, pero no había forma de ver el código (generalmente recurría a
rgrep).(Personalmente, me gustaría ver una combinación de los enfoques antiguos y nuevos para mostrar la ayuda, ya que me gustó tener la cadena de documentación en línea, pero estoy seguro de que es posible en el futuro).
fuente
defadvicehace. Vea este informe de error de Emacs . Esto es una deficiencia.Desde el encabezado del archivo:
Mientras lo leo, el objetivo principal es ser más simple que el antiguo sistema de consejos, no tener más capacidades. Al leer los documentos, parece que
advice-addcontiene un subconjunto dedefadvicela funcionalidad de, mientras queadd-functioncontiene una buena funcionalidad para aconsejar funciones no tradicionales como los filtros de proceso (que probablemente fue posible condefadvice, pero no estoy seguro de cómo).Hasta donde yo sé,
defadviceno está oficialmente en desuso, por lo que debe sentirse libre de seguir usándolo por ahora (y si es un autor de paquetes, probablemente quiera seguir usándolo hasta que 24.4 sea más ampliamente adoptado). Sin embargo, parece que los autores de Emacs desean migrar por completo al nuevo sistema, por lo que probablemente tenga sentido cambiar lentamente.fuente
defadvicepor ahí (y seguirá siéndolo).Algo que no he visto mencionado aquí, aunque de alguna manera se debe al enfoque más simple (mejor modularidad y "pegamento") del "nuevo" sistema de asesoramiento, que se ha mencionado en otras respuestas, es esto: es mucho más fácil agregar, combinar, eliminar, reordenar , etc. consejos de asesoramiento.
Incluso es posible hacerlo interactivamente, dinámicamente, aunque nadvice necesita un poco de ayuda para facilitar esto. No conozco otro uso de nadvice de esta manera (composición interactiva de consejos), pero hay al menos una de esas aplicaciones. Lo uso en Isearch + , para permitirle agregar y eliminar combinaciones de predicados de filtro arbitrarios (filtros) de Isearch durante la búsqueda.
IOW, al igual que cambia su patrón de búsqueda de manera incremental, puede refinar su búsqueda sobre la marcha utilizando múltiples filtros.
El filtrado de Isearch se realiza mediante la variable
isearch-filter-predicate, que ha estado disponible durante bastante tiempo. Sin embargo, los filtros Isearch no se definen con frecuencia. Suelen ser estáticos y predefinidos para un contexto determinado (por ejemplo, Wdired). No es muy fácil para los usuarios definirlos y usarlos, al menos interactivamente.Solo hay una variable,
isearch-filter-predicatepor lo que cambiar el filtrado realmente significa cambiar el predicado de filtro único, lo que equivale a componer funciones, combinar predicados, limitar, expandir o modificar la búsqueda.Pero eso es exactamente en lo que nadvice es bueno. En resumen, nadvice es tan útil para combinar funciones que puede facilitar el refinamiento interactivo del filtro de búsqueda. (Consulte Filtrado dinámico de Isearch para obtener más información al respecto).
fuente