From: Katsumi Yamaoka Date: Wed, 5 Dec 2012 02:26:15 +0000 (+0000) Subject: gmm-util.el: Re-introduce gmm-flet using cl-letf X-Git-Tag: emacs-24.3.90~173^2~9^2~59 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=066f0e09bc17809beeb6b6c20e3032d0f4420795;p=emacs.git gmm-util.el: Re-introduce gmm-flet using cl-letf --- diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index af19f607f99..d3b66f4c8fd 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,9 @@ +2012-12-05 Katsumi Yamaoka + + * gmm-utils.el (gmm-flet): Restore it using cl-letf. + * gnus-sync.el (gnus-sync-lesync-call) + * message.el (message-read-from-minibuffer): Use it. + 2012-12-05 Katsumi Yamaoka * gmm-utils.el (gmm-flet): Remove. 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 diff --git a/lisp/gnus/gnus-sync.el b/lisp/gnus/gnus-sync.el index 895a5e4d9a5..e2a71f0ee01 100644 --- a/lisp/gnus/gnus-sync.el +++ b/lisp/gnus/gnus-sync.el @@ -88,6 +88,7 @@ (require 'gnus) (require 'gnus-start) (require 'gnus-util) +(require 'gmm-utils) (defvar gnus-topic-alist) ;; gnus-group.el (eval-when-compile @@ -176,21 +177,16 @@ and `gnus-topic-alist'. Also see `gnus-variable-list'." (defun gnus-sync-lesync-call (url method headers &optional kvdata) "Make an access request to URL using KVDATA and METHOD. KVDATA must be an alist." - (let ((orig-json-alist-p (symbol-function 'json-alist-p))) - (fset 'json-alist-p - (lambda (list) (gnus-sync-json-alist-p list))) ; temp patch - (unwind-protect - (let ((url-request-method method) - (url-request-extra-headers headers) - (url-request-data (if kvdata (json-encode kvdata) nil))) - (with-current-buffer (url-retrieve-synchronously url) - (let ((data (gnus-sync-lesync-parse))) - (gnus-message - 12 "gnus-sync-lesync-call: %s URL %s sent %S got %S" - method url `((headers . ,headers) (data ,kvdata)) data) - (kill-buffer (current-buffer)) - data))) - (fset 'json-alist-p orig-json-alist-p)))) + (gmm-flet ((json-alist-p (list) (gnus-sync-json-alist-p list))) ; temp patch + (let ((url-request-method method) + (url-request-extra-headers headers) + (url-request-data (if kvdata (json-encode kvdata) nil))) + (with-current-buffer (url-retrieve-synchronously url) + (let ((data (gnus-sync-lesync-parse))) + (gnus-message 12 "gnus-sync-lesync-call: %s URL %s sent %S got %S" + method url `((headers . ,headers) (data ,kvdata)) data) + (kill-buffer (current-buffer)) + data))))) (defun gnus-sync-lesync-PUT (url headers &optional data) (gnus-sync-lesync-call url "PUT" headers data)) diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index 03ffe2fb2eb..2171dcf3edc 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el @@ -8140,13 +8140,9 @@ regexp VARSTR." "Read from the minibuffer while providing abbrev expansion." (if (fboundp 'mail-abbrevs-setup) (let ((minibuffer-setup-hook 'mail-abbrevs-setup) - (minibuffer-local-map message-minibuffer-local-map) - (orig-m-a-i-e-h-p (symbol-function - 'mail-abbrev-in-expansion-header-p))) - (fset 'mail-abbrev-in-expansion-header-p (lambda (&rest args) t)) - (unwind-protect - (read-from-minibuffer prompt initial-contents) - (fset 'mail-abbrev-in-expansion-header-p orig-m-a-i-e-h-p))) + (minibuffer-local-map message-minibuffer-local-map)) + (gmm-flet ((mail-abbrev-in-expansion-header-p nil t)) + (read-from-minibuffer prompt initial-contents))) (let ((minibuffer-setup-hook 'mail-abbrev-minibuffer-setup-hook) (minibuffer-local-map message-minibuffer-local-map)) (read-string prompt initial-contents))))