J'ai du code qui permet flet
de changer temporairement le comportement des fonctions.
;; prevent changing the window
(flet ((pop-to-buffer (buffer &rest args)
(switch-to-buffer buffer)))
(compilation-next-error-function n reset))
Cependant, le compilateur d'octets d'Emacs donne un avertissement:
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'.
Cependant, cl-flet
fonctionne différemment et ne convient pas à certains cas d'utilisation, et je pense que c'est l'un de ces cas.
Les options que je peux voir sont:
Dites à Emacs d'ignorer l'avertissement d'une manière ou d'une autre.
Roulez moi-même
flet
.
Quelle est la meilleure approche?
my-flet
) et supprimé l'avertissement obsolète, et l'utiliser dans n'importe quel paquet qui nécessitait auparavant flet.Réponses:
Pour obtenir le même comportement que celui auquel vous êtes habitué
flet
, utilisezcl-letf
pour modifier la valeur d'une fonction de symboles.Si vous deviez rouler le vôtre
flet
, la méthode la plus simple serait la macro qui se développe en uncl-letf
formulaire.Edit: roulé
la source
cl-letf
ne constitue pas une alternative appropriée (IIRC, il ne fonctionne pas pour lesflet
symboles -ing qui ne le sont pas déjàfboundp
). c'est pourquoi une version rétrocompatible deflet
est un peu ... compliquée . "Artur Malabarba l'a écrit récemment, dans Comprendre letf et comment il remplace flet .
letf
est un alias pourcl-letf
, et bien que ce soit probablement ce que vous voulez, il y a une petite mise en garde qu'Artur souligne:(Le
noflet
package de Nic fournit des fonctionnalités étendues dans ce sens.)la source