]> git.eshelyaron.com Git - emacs.git/commitdiff
rmail-cease-edit fixes related to "^From " escaping
authorGlenn Morris <rgm@gnu.org>
Fri, 7 Dec 2012 08:59:14 +0000 (00:59 -0800)
committerGlenn Morris <rgm@gnu.org>
Fri, 7 Dec 2012 08:59:14 +0000 (00:59 -0800)
* mail/rmail.el (rmail-mime-decoded): New permanent local.
(rmail-show-message-1): Set rmail-mime-decoded when appropriate.
* mail/rmailedit.el (rmail-cease-edit): Respect rmail-mbox-format
and rmail-mime-decoded.

Fixes: debbugs:9841
lisp/ChangeLog
lisp/mail/rmail.el
lisp/mail/rmailedit.el

index 940dc62fedff3dbbaccfd3eb6e7e5ba64f056a2d..36fc8eea448daf5e7af899a1bd77cab76f103bbb 100644 (file)
@@ -1,5 +1,10 @@
 2012-12-07  Glenn Morris  <rgm@gnu.org>
 
+       * mail/rmail.el (rmail-mime-decoded): New permanent local.
+       (rmail-show-message-1): Set rmail-mime-decoded when appropriate.
+       * mail/rmailedit.el (rmail-cease-edit): Respect rmail-mbox-format
+       and rmail-mime-decoded.  (Bug#9841)
+
        * mail/unrmail.el (unrmail-mbox-format): New option.  (Bug#6574)
        (batch-unrmail, unrmail): Doc fixes.
        (unrmail): Respect unrmail-mbox-format.
index 446ea4de0f356fca8835b4adebe1734a3f15ef7d..c0fb7d1c5bdc894904cf55f4c84eecf35076c5f6 100644 (file)
@@ -100,6 +100,10 @@ its character representation and its display representation.")
   "The current header display style choice, one of
 'normal (selected headers) or 'full (all headers).")
 
+(defvar rmail-mime-decoded nil
+  "Non-nil if message has been processed by `rmail-show-mime-function'.")
+(put 'rmail-mime-decoded 'permanent-local t) ; for rmail-edit
+
 (defgroup rmail nil
   "Mail reader for Emacs."
   :group 'mail)
@@ -2768,6 +2772,7 @@ The current mail message becomes the message displayed."
                 (re-search-forward "mime-version: 1.0" nil t))
            (let ((rmail-buffer mbox-buf)
                  (rmail-view-buffer view-buf))
+             (set (make-local-variable 'rmail-mime-decoded) t)
              (funcall rmail-show-mime-function))
          (setq body-start (search-forward "\n\n" nil t))
          (narrow-to-region beg (point))
index e4e066bd64210f633e23d72be56bc2bdc52b1838..004eb2e3247da56ad02e3b64f44f8692d26c1fe3 100644 (file)
@@ -167,10 +167,25 @@ This function runs the hooks `text-mode-hook' and `rmail-edit-mode-hook'.
   (if (or rmail-old-mime-state
          (not rmail-old-pruned))
       (forward-line 1))
-  (while (re-search-forward "^>*From " nil t)
-    (beginning-of-line)
-    (insert ">")
-    (forward-line))
+  ;; When editing a non-MIME message, rmail-show-message-1 has unescaped
+  ;; ^>*From lines according to rmail-mbox-format.  We are editing
+  ;; the message as it was displayed, and need to put the escapes when done.
+  ;; When editing a MIME message, we are editing the "raw" message.
+  ;; ^>*From lines have not been escaped, but we still need to ensure
+  ;; a "^From " line is escaped so as not to break later parsing (?).
+  ;; With ^>+From lines, we have no way of knowing whether the person
+  ;; doing the editing escaped them or not, so it seems best to leave
+  ;; them alone.  (This all assumes you are using rmailmm rather than
+  ;; something else that behaves differently.)
+  (let ((fromline (if (or (eq 'mboxo rmail-mbox-format)
+                         rmail-mime-decoded)
+                     "^From "
+                   "^>*From "))
+       case-fold-search)
+    (while (re-search-forward fromline nil t)
+      (beginning-of-line)
+      (insert ">")
+      (forward-line)))
   ;; Make sure buffer ends with a blank line so as not to run this
   ;; message together with the following one.
   (goto-char (point-max))
@@ -201,6 +216,7 @@ This function runs the hooks `text-mode-hook' and `rmail-edit-mode-hook'.
       (setq buffer-undo-list t)
       (rmail-variables))
     ;; If text has really changed, mark message as edited.
+    ;; FIXME we should do the comparison before escaping From lines.
     (unless (and (= (length old) (- (point-max) (point-min)))
                 (string= old (buffer-substring (point-min) (point-max))))
       (setq old nil)