emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r111102: gmm-util.el: Re-introduce gm


From: Katsumi Yamaoka
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r111102: gmm-util.el: Re-introduce gmm-flet using cl-letf
Date: Wed, 05 Dec 2012 02:26:15 +0000
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 111102
committer: Katsumi Yamaoka <address@hidden>
branch nick: trunk
timestamp: Wed 2012-12-05 02:26:15 +0000
message:
  gmm-util.el: Re-introduce gmm-flet using cl-letf
modified:
  lisp/gnus/ChangeLog
  lisp/gnus/gmm-utils.el
  lisp/gnus/gnus-sync.el
  lisp/gnus/message.el
=== modified file 'lisp/gnus/ChangeLog'
--- a/lisp/gnus/ChangeLog       2012-12-05 00:13:56 +0000
+++ b/lisp/gnus/ChangeLog       2012-12-05 02:26:15 +0000
@@ -1,5 +1,11 @@
 2012-12-05  Katsumi Yamaoka  <address@hidden>
 
+       * 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  <address@hidden>
+
        * gmm-utils.el (gmm-flet): Remove.
        * gnus-sync.el (gnus-sync-lesync-call)
        * message.el (message-read-from-minibuffer): Don't use it.

=== modified file 'lisp/gnus/gmm-utils.el'
--- a/lisp/gnus/gmm-utils.el    2012-12-05 00:18:23 +0000
+++ b/lisp/gnus/gmm-utils.el    2012-12-05 02:26:15 +0000
@@ -417,7 +417,23 @@
        (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

=== modified file 'lisp/gnus/gnus-sync.el'
--- a/lisp/gnus/gnus-sync.el    2012-12-05 00:13:56 +0000
+++ b/lisp/gnus/gnus-sync.el    2012-12-05 02:26:15 +0000
@@ -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 @@
 (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))

=== modified file 'lisp/gnus/message.el'
--- a/lisp/gnus/message.el      2012-12-05 00:13:56 +0000
+++ b/lisp/gnus/message.el      2012-12-05 02:26:15 +0000
@@ -8140,13 +8140,9 @@
   "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))))


reply via email to

[Prev in Thread] Current Thread [Next in Thread]