Tengo un código que usa flet
para cambiar temporalmente el comportamiento de las funciones.
;; prevent changing the window
(flet ((pop-to-buffer (buffer &rest args)
(switch-to-buffer buffer)))
(compilation-next-error-function n reset))
Sin embargo, el compilador de bytes de Emacs da una advertencia:
In ag/next-error-function:
ag.el:103:7:Warning: `flet' is an obsolete macro (as of 24.3); use either
`cl-flet' or `cl-letf'.
Sin embargo, cl-flet
funciona de manera diferente y no se adapta a algunos casos de uso, y creo que este es uno de esos casos.
Las opciones que puedo ver son:
¿Cuál es el mejor enfoque?
my-flet
) y eliminé la advertencia obsoleta, y la utilicé en cualquier paquete que previamente requería flet.Respuestas:
Para obtener el mismo comportamiento al que está acostumbrado
flet
, usecl-letf
para cambiar el valor de una función de símbolos.Si
flet
tuviera que rodar el suyo , la forma más fácil sería macro que se expande a uncl-letf
formulario.Editar: rodado
fuente
cl-letf
no es una alternativa adecuada (IIRC, no funciona paraflet
foring símbolos que aún no sonfboundp
). es por eso que una versión compatible con versiones anterioresflet
es un poco ... complicada ".Artur Malabarba escribió esto recientemente, en Comprender letf y cómo reemplaza a flet .
letf
es un aliascl-letf
y, aunque es muy probable que sea lo que quieres, hay una advertencia menor que Artur señala:(El
noflet
paquete de Nic proporciona una funcionalidad extendida en este sentido).fuente