Emacs 24.4 viene con un nuevo sistema de consejos. El NEWS
archivo dice:
** El nuevo paquete
nadvice.el
ofrece 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>-function
ganchos.***
advice-add
/advice-remove
para agregar / eliminar un consejo sobre una función con nombre, al igual que lodefadvice
hace.
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"?
:around
consejos (:filter-args
o:filter-result
consejos) 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
defadvice
hace. 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-add
contiene un subconjunto dedefadvice
la funcionalidad de, mientras queadd-function
contiene 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é,
defadvice
no 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
defadvice
por 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-predicate
por 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