From 54c8b5baf18adfb42599a59b73d63e03673916ef Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 7 Dec 2012 00:59:14 -0800 Subject: [PATCH] rmail-cease-edit fixes related to "^From " escaping * 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 | 5 +++++ lisp/mail/rmail.el | 5 +++++ lisp/mail/rmailedit.el | 24 ++++++++++++++++++++---- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 940dc62fedf..36fc8eea448 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,10 @@ 2012-12-07 Glenn Morris + * 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. diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index 446ea4de0f3..c0fb7d1c5bd 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -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)) diff --git a/lisp/mail/rmailedit.el b/lisp/mail/rmailedit.el index e4e066bd642..004eb2e3247 100644 --- a/lisp/mail/rmailedit.el +++ b/lisp/mail/rmailedit.el @@ -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) -- 2.39.5