Me gustaría anular temporalmente una función en un fragmento de código.
Tomemos, por ejemplo, lo siguiente:
(defun nadvice/load-quiet (args)
(cl-destructuring-bind
(file &optional noerror nomessage nosuffix must-suffix)
args
(list file noerror t nosuffix must-suffix)))
(defun nadvice/idle-require-quiet (old-fun &rest args)
(advice-add 'load :filter-args #'nadvice/load-quiet)
(apply old-fun args)
(advice-remove #'load #'nadvice/load-quiet))
(advice-add 'idle-require-load-next :around #'nadvice/idle-require-quiet)
Lo que no funciona:
- Esta. Sería mucho más limpio si pudiera evitar habilitar y deshabilitar manualmente los consejos y confiar en la naturaleza de un solo subproceso de Emacs para encargarse de las cosas.
cl-letf
no me deja hacer referencia a la función original, por lo que no puedo implementar cosas que:filter-args
normalmente harían.cl-flet
no puede anular funciones en otras funciones.noflet
es un paquete externo que me gustaría evitar. (También hace mucho más de lo que necesito)
advice
let-binding
local-functions
PythonNut
fuente
fuente
cl-letf*
para amboslet
s.letf*
forma para ambos enlaces.