emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r105628: Properly handle splitting of


From: Richard Stallman
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r105628: Properly handle splitting of Rmail buffer and message view buffer.
Date: Wed, 31 Aug 2011 16:49:24 -0400
User-agent: Bazaar (2.3.1)

------------------------------------------------------------
revno: 105628
committer: Richard Stallman <address@hidden>
branch nick: trunk
timestamp: Wed 2011-08-31 16:49:24 -0400
message:
  Properly handle splitting of Rmail buffer and message view buffer.
modified:
  lisp/ChangeLog
  lisp/mail/rmail.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2011-08-31 09:27:49 +0000
+++ b/lisp/ChangeLog    2011-08-31 20:49:24 +0000
@@ -1,3 +1,11 @@
+2011-08-31  Richard Stallman  <address@hidden>
+
+       * mail/rmail.el (rmail-epa-decrypt): Rewrite to take account
+       of the separation of rmail-view-buffer from rmail-buffer.
+       If you say no to "replace original", the decrypt is in the
+       view buffer.  If you say yes, the decrypt goes into the
+       rmail buffer also.
+
 2011-08-31  Martin Rudalics  <address@hidden>
 
        * window.el (display-buffer-window): Rewrite doc-string.

=== modified file 'lisp/mail/rmail.el'
--- a/lisp/mail/rmail.el        2011-08-16 02:29:15 +0000
+++ b/lisp/mail/rmail.el        2011-08-31 20:49:24 +0000
@@ -4308,7 +4308,7 @@
   ;; change it in one of the calls to `epa-decrypt-region'.
 
   (save-excursion
-    (let (new-buffer not-first-armor)
+    (let (decrypts)
       (goto-char (point-min))
 
       ;; In case the encrypted data is inside a mime attachment,
@@ -4324,8 +4324,8 @@
       ;; and decrypt them one by one.
       (goto-char (point-min))
       (while (re-search-forward "-----BEGIN PGP MESSAGE-----$" nil t)
-       (let (armor-start armor-end
-                         (coding-system-for-read coding-system-for-read))
+       (let ((coding-system-for-read coding-system-for-read)
+             armor-start armor-end after-end)
          (setq armor-start (match-beginning 0)
                armor-end (re-search-forward "^-----END PGP MESSAGE-----$"
                                             nil t))
@@ -4345,64 +4345,39 @@
 
          ;; Advance over this armor.
          (goto-char armor-end)
+         (setq after-end (- (point-max) armor-end))
 
          ;; Decrypt it, maybe in place, maybe making new buffer.
          (epa-decrypt-region
           armor-start armor-end
           ;; Call back this function to prepare the output.
           (lambda ()
-            (if (or not-first-armor
-                    (y-or-n-p "Replace the original message? "))
-                ;; User wants to decrypt in place,
-                ;; or this isn't the first armor.
-                ;; We only ask the question for the first armor.
-                (let ((inhibit-read-only t))
-                  (delete-region armor-start armor-end)
-                  (goto-char armor-start)
-                  (current-buffer))
-              ;; User says not to replace the original text.
-              (or new-buffer
-                  (let ((from-buffer
-                         (if (rmail-buffers-swapped-p)
-                             rmail-view-buffer rmail-buffer))
-                        (from-pruned (rmail-msg-is-pruned))
-                        (beg (rmail-msgbeg rmail-current-message))
-                        (end (rmail-msgend rmail-current-message)))
-                    (with-current-buffer (generate-new-buffer "*Decrypt*")
-                      (setq buffer-read-only nil)
-                      (insert-buffer-substring from-buffer beg end)
-                      (rmail-mode)
-                      ;; This should be pruned if the original message was.
-                      (unless from-pruned (rmail-toggle-header))
-                      (goto-char (point-min))
-
-                      ;; Find the first armor in the text we just copied.
-                      ;; What we copied may not be identical
-                      ;; to the initial text.
-                      (re-search-forward "-----BEGIN PGP MESSAGE-----$")
-                      (setq armor-start (match-beginning 0))
-                      (re-search-forward "^-----END PGP MESSAGE-----$")
-                      (setq armor-end (point))
-                      ;; Delete it and put point there.
-                      (let ((inhibit-read-only t))
-                        (delete-region armor-start armor-end))
-                      (goto-char armor-start)
-                      (setq new-buffer (current-buffer))
-                      ;; Return; epa-decrypt-region will insert plaintext.
-                      ))))))
-
-         (setq not-first-armor t)
-
-         ;; If we copied the buffer, switch to the copy
-         ;; for the rest of this loop.
-         ;; Point is the only buffer pointer that is live here,
-         ;; and it was properly set in NEW-BUFFER by `epa-decrypt-region'
-         ;; when it inserted the decrypted epa
-         (if new-buffer (set-buffer new-buffer))))
-
-      ;; If we decrypted into a new buffer, show it.
-      (if new-buffer
-         (display-buffer new-buffer)))))
+            (let ((inhibit-read-only t))
+              (delete-region armor-start armor-end)
+              (goto-char armor-start)
+              (current-buffer))))
+
+         (push (list armor-start (- (point-max) after-end))
+               decrypts)))
+
+      (when (and decrypts (rmail-buffers-swapped-p))
+       (when (y-or-n-p "Replace the original message? ")
+         (setq decrypts (nreverse decrypts))
+         (let ((beg (rmail-msgbeg rmail-current-message))
+               (end (rmail-msgend rmail-current-message))
+               (from-buffer (current-buffer)))
+           (with-current-buffer rmail-view-buffer
+             (narrow-to-region beg end)
+             (goto-char (point-min))
+             (dolist (d decrypts)
+               (if (re-search-forward "-----BEGIN PGP MESSAGE-----$" nil t)
+                   (let (armor-start armor-end)
+                     (setq armor-start (match-beginning 0)
+                           armor-end (re-search-forward "^-----END PGP 
MESSAGE-----$"
+                                                        nil t))
+                     (when armor-end
+                       (delete-region armor-start armor-end)
+                       (insert-buffer-substring from-buffer (nth 0 d) (nth 1 
d)))))))))))))
 
 ;;;;  Desktop support
 


reply via email to

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