diff options
author | Katsumi Yamaoka <yamaoka@jpl.org> | 2012-12-05 02:26:15 +0000 |
---|---|---|
committer | Katsumi Yamaoka <yamaoka@jpl.org> | 2012-12-05 02:26:15 +0000 |
commit | 066f0e09bc17809beeb6b6c20e3032d0f4420795 (patch) | |
tree | c98318b906347a135d21c04d6202a6ce38688e3c /lisp/gnus/gmm-utils.el | |
parent | 49596095d09227d828ffb6fed955ba0b660b4d92 (diff) | |
download | emacs-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.el | 18 |
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 |