Chciałbym tymczasowo zastąpić funkcję w kodzie.
Weźmy na przykład:
(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)
Co nie działa:
- To. Byłoby o wiele czystsze, gdybym mógł uniknąć ręcznego włączania i wyłączania porad i ufać jednowątkowej naturze Emacsa, aby zajął się wszystkim.
cl-letf
nie pozwala mi odwoływać się do funkcji oryginalnej, więc nie mogę zaimplementować rzeczy,:filter-args
które normalnie by to zrobiły.cl-flet
nie można zastąpić funkcji w innych funkcjach.noflet
to pakiet zewnętrzny, którego chciałbym uniknąć. (Robi też o wiele więcej niż potrzebuję)
advice
let-binding
local-functions
PythonNut
źródło
źródło
cl-letf*
obulet
.letf*
formularza dla obu powiązań.