Me estaba divirtiendo agregando algunos consejos a una función:
(advice-add 'executable-find :around
(lambda (f &rest args)
(apply g args)))
;;; ^
Ay, un error tipográfico. Lo arregló y evaluó el código anterior nuevamente. Pero ahora tengo ambos, el consejo "corregido" y el "roto" en torno a esa función.
¿Cómo me deshago de estos? Dado que advice-remove
necesita el objeto de función o el consejo (¿qué está vacío aquí?)
(Obviamente, puedo salir y reiniciar, pero hay otra forma, ¿no?)
eq
a las anteriores, (2) advice-remove compararía la función que la pasas a los consejos hasta que encuentre uno que eseq
para eliminarlo, (3) incluso si el consejo de eliminación utiliza una prueba diferente, comoequal
, todavía no funcionaría, porque las diferentes evaluaciones de una forma lambda no se aplicaríanequal
entre sí. Resulta que (1) es correcto, pero (2) y (3) están equivocados: aconsejar eliminar los usosequal
y evaluarloslambda
dos veces produceequal
resultados.Hay
advice-mapc
, que vamos a iterar sobre todos los consejos de alguna función, aplicando una función dada a cada uno. Con él, es fácil eliminar todos los consejos:Esto podría extenderse para eliminar solo los avisos que no tienen una
name
propiedad buscando en el segundoprops
argumento () (que es una lista) para aquellos que no tienen algo asociado a la clavename
.fuente
name
hace que la eliminación sea más fácil.Aquí hay un código para ayudar a hacer precisamente eso, de forma interactiva.
Esto define dos funciones. La primera función obtiene la lista de todos los consejos sobre un símbolo dado, la segunda función solicita interactivamente un símbolo y un consejo sobre ese símbolo, luego elimina el último del primero. Como todo esto sucede con la finalización, es más fácil (para mí) que copiar pegar la expresión lambda.
fuente