Gostaria de substituir temporariamente uma função em um pedaço de código.
Tome, por exemplo, o seguinte:
(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)
O que não funciona:
- Este. Seria muito mais limpo se eu pudesse evitar ativar e desativar manualmente os conselhos e confiar na natureza de thread único do Emacs para cuidar das coisas.
cl-letf
não me permitirá fazer referência à função original, então não posso implementar coisas que:filter-args
normalmente fariam.cl-flet
não pode substituir funções em outras funções.noflet
é um pacote externo que eu gostaria de evitar. (Também faz muito mais do que eu preciso)
advice
let-binding
local-functions
PythonNut
fonte
fonte
cl-letf*
para amboslet
.letf*
formulário para ambas as ligações.