]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix logic for returning to and yanking from Rmail buffer.
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 20 Apr 2012 19:17:59 +0000 (12:17 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 20 Apr 2012 19:17:59 +0000 (12:17 -0700)
* mail/rmail.el (rmail-start-mail):
Pass (rmail-mail-return...) for the return-action.
Pass (rmail-yank-current-message...) for the yank-action.
(rmail-yank-current-message): New function.
(rmail-mail): Pass the Rmail buffer, not view buffer, for replybuffer.
(rmail-reply): Likewise.
(rmail-forward): Pass the Rmail buffer, not nil, for replybuffer.

* mail/sendmail.el (mail-bury): Choose the first rmail-mode
buffer, not the last.  Reject temp buffers.  Use the rmail-mode
buffer, not newbuf.

lisp/ChangeLog
lisp/mail/rmail.el
lisp/mail/sendmail.el

index c5c4d2573b1b47f74295940e4b617d9b3075c2e8..8df6cbf0e1af46314ea8d8408b8f43c6accba062 100644 (file)
@@ -1,3 +1,19 @@
+2012-04-20  Richard Stallman  <rms@gnu.org>
+
+       Fix logic for returning to and yanking from Rmail buffer.
+
+       * mail/rmail.el (rmail-start-mail):
+       Pass (rmail-mail-return...) for the return-action.
+       Pass (rmail-yank-current-message...) for the yank-action.
+       (rmail-yank-current-message): New function.
+       (rmail-mail): Pass the Rmail buffer, not view buffer, for replybuffer.
+       (rmail-reply): Likewise.
+       (rmail-forward): Pass the Rmail buffer, not nil, for replybuffer.
+
+       * mail/sendmail.el (mail-bury): Choose the first rmail-mode
+       buffer, not the last.  Reject temp buffers.  Use the rmail-mode
+       buffer, not newbuf.
+
 2012-04-20  Eli Zaretskii  <eliz@gnu.org>
 
        * progmodes/gdb-mi.el (gdb-control-level): New variable.
index 3a9ba8122ab7fdf9ade8fb9b06fc2bd2faf3f98d..265347ca69a8d163a791ead0fc5ae536e2bab5b8 100644 (file)
@@ -3560,6 +3560,16 @@ does not pop any summary buffer."
 \f
 ;;;; *** Rmail Mailing Commands ***
 
+(defun rmail-yank-current-message (buffer)
+  "Yank into the current buffer the current message of Rmail buffer BUFFER.
+If BUFFER is swapped with its message viewer buffer, yank out of BUFFER.
+If BUFFER is not swapped, yank out of its message viewer buffer."
+  (with-current-buffer buffer
+    (unless (rmail-buffers-swapped-p)
+      (setq buffer rmail-view-buffer)))
+  (insert-buffer buffer))
+
+
 (defun rmail-start-mail (&optional noerase to subject in-reply-to cc
                                   replybuffer sendactions same-window
                                   other-headers)
@@ -3571,7 +3581,8 @@ does not pop any summary buffer."
     (if replybuffer
        ;; The function used here must behave like insert-buffer wrt
        ;; point and mark (see doc of sc-cite-original).
-       (setq yank-action (list 'insert-buffer replybuffer)))
+       (setq yank-action
+             `(rmail-yank-current-message ,replybuffer)))
     (push (cons "cc" cc) other-headers)
     (push (cons "in-reply-to" in-reply-to) other-headers)
     (setq other-headers
@@ -3587,7 +3598,7 @@ does not pop any summary buffer."
     (prog1
        (compose-mail to subject other-headers noerase
                      switch-function yank-action sendactions
-                     `(rmail-mail-return ,replybuffer))
+                     (if replybuffer `(rmail-mail-return ,replybuffer)))
       (if (eq switch-function 'switch-to-buffer-other-frame)
          ;; This is not a standard frame parameter; nothing except
          ;; sendmail.el looks at it.
@@ -3644,7 +3655,7 @@ to switch to."
 While composing the message, use \\[mail-yank-original] to yank the
 original message into it."
   (interactive)
-  (rmail-start-mail nil nil nil nil nil rmail-view-buffer))
+  (rmail-start-mail nil nil nil nil nil rmail-buffer))
 
 ;; FIXME should complain if there is nothing to continue.
 (defun rmail-continue ()
@@ -3731,9 +3742,7 @@ use \\[mail-yank-original] to yank the original message into it."
                        (mail-strip-quoted-names
                         (if (null cc) to (concat to ", " cc))))))
         (if (string= cc-list "") nil cc-list)))
-     (if (rmail-buffers-swapped-p)
-        rmail-buffer
-       rmail-view-buffer)
+     rmail-buffer
      (list (list 'rmail-mark-message
                 rmail-buffer
                 (with-current-buffer rmail-buffer
@@ -3835,7 +3844,7 @@ see the documentation of `rmail-resend'."
                           (or (mail-fetch-field "Subject") "")
                           "]")))
       (if (rmail-start-mail
-          nil nil subject nil nil nil
+          nil nil subject nil nil rmail-buffer
           (list (list 'rmail-mark-message
                       forward-buffer
                       (with-current-buffer rmail-buffer
index c4647d7893ecbbf499a30b05cc873900cbeeb933..1ecae9faa59c39affddcebb38fa0281f348923f1 100644 (file)
@@ -863,7 +863,10 @@ Prefix arg means don't delete this window."
     ;; even if this message was not started by an Rmail command.
     (unless return-action
       (dolist (buffer (buffer-list))
-       (if (eq (buffer-local-value 'major-mode buffer) 'rmail-mode)
+       (if (and (eq (buffer-local-value 'major-mode buffer) 'rmail-mode)
+                (null return-action)
+                ;; Don't match message-viewer buffer.
+                (not (string-match "\\` " (buffer-name buffer))))
            (setq return-action `(rmail-mail-return ,buffer)))))
     (if (and (null arg) return-action)
        (apply (car return-action) (cdr return-action))