summaryrefslogtreecommitdiff
path: root/lisp/gnus/gmm-utils.el
diff options
context:
space:
mode:
authorKatsumi Yamaoka <yamaoka@jpl.org>2012-12-05 02:26:15 +0000
committerKatsumi Yamaoka <yamaoka@jpl.org>2012-12-05 02:26:15 +0000
commit066f0e09bc17809beeb6b6c20e3032d0f4420795 (patch)
treec98318b906347a135d21c04d6202a6ce38688e3c /lisp/gnus/gmm-utils.el
parent49596095d09227d828ffb6fed955ba0b660b4d92 (diff)
downloademacs-066f0e09bc17809beeb6b6c20e3032d0f4420795.tar.gz
gmm-util.el: Re-introduce gmm-flet using cl-letf
Diffstat (limited to 'lisp/gnus/gmm-utils.el')
-rw-r--r--lisp/gnus/gmm-utils.el18
1 files changed, 17 insertions, 1 deletions
diff --git a/lisp/gnus/gmm-utils.el b/lisp/gnus/gmm-utils.el
index 6a64dcff11b..ab42b149be3 100644
--- a/lisp/gnus/gmm-utils.el
+++ b/lisp/gnus/gmm-utils.el
@@ -417,7 +417,23 @@ coding-system."
(write-region start end filename append visit lockname))
(write-region start end filename append visit lockname mustbenew)))
-;; `labels' got obsolete since Emacs 24.3.
+;; `flet' and `labels' got obsolete since Emacs 24.3.
+(defmacro gmm-flet (bindings &rest body)
+ "Make temporary overriding function definitions.
+This is an analogue of a dynamically scoped `let' that operates on
+the function cell of FUNCs rather than their value cell.
+
+\(fn ((FUNC ARGLIST BODY...) ...) FORM...)"
+ (require 'cl)
+ (if (fboundp 'cl-letf)
+ `(cl-letf ,(mapcar (lambda (binding)
+ `((symbol-function ',(car binding))
+ (lambda ,@(cdr binding))))
+ bindings)
+ ,@body)
+ `(flet ,bindings ,@body)))
+(put 'gmm-flet 'lisp-indent-function 1)
+
(defmacro gmm-labels (bindings &rest body)
"Make temporary function bindings.
The bindings can be recursive and the scoping is lexical, but capturing