Eu estava me divertindo adicionando alguns conselhos a uma função:
(advice-add 'executable-find :around
(lambda (f &rest args)
(apply g args)))
;;; ^
Ai, um erro de digitação. Corrigido e avaliado o código acima novamente. Mas agora tenho os conselhos "corrigido" e "quebrado" em torno dessa função.
Como faço para me livrar deles? Dado que advice-remove
precisa do objeto de função ou do conselho ao redor (que está vazio aqui)?
(Obviamente, posso simplesmente sair e reiniciar, mas há outra maneira, não é?)
eq
a anterior, (2) aconselha-remove compara a função que você a transmite aos conselhos até encontrar aquele que éeq
a ele e o remove, (3) mesmo que o conselho-remova usasse um teste diferente, por exemploequal
, ele ainda não funcionaria, porque avaliações diferentes de uma forma lambda não funcionariamequal
uma à outra. Acontece que (1) está correto, mas (2) e (3) estão errados: aconselhar - remover usosequal
e avaliar o mesmolambda
duas vezes produzequal
resultados!Há
advice-mapc
, que vamos iterar sobre todos os conselhos de alguma função, aplicando uma determinada função a cada uma. Com isso, é fácil remover todos os avisos:Isso pode ser estendido para remover apenas avisos que não possuem uma
name
propriedade, procurando no segundoprops
argumento () (que é uma lista) para aqueles que não têm algo associado à chavename
.fonte
name
facilita a remoção.Aqui está um código para ajudar a fazer exatamente isso, de forma interativa.
Isso define duas funções. A primeira função obtém a lista de todos os conselhos sobre um determinado símbolo, a segunda função solicita interativamente um símbolo e um conselho sobre esse símbolo e remove o último do primeiro. Como tudo isso acontece com a conclusão, é mais fácil (para mim) do que copiar e colar a expressão lambda.
fonte