From: Glenn Morris Date: Tue, 6 Oct 2009 02:37:22 +0000 (+0000) Subject: (rmail-cease-edit): If there is a Content-Type header we don't X-Git-Tag: emacs-pretest-23.1.90~914 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=25ab03020175918134bf9ba7f63c5e00750baa84;p=emacs.git (rmail-cease-edit): If there is a Content-Type header we don't understand, don't insert another. (Bug#4624) If changing mime charset, insert the new one in the right place. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2c717974404..fc5cd4c9ee2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2009-10-06 Glenn Morris + + * mail/rmailedit.el (rmail-cease-edit): If there is a Content-Type + header we don't understand, don't insert another. (Bug#4624) + If changing mime charset, insert the new one in the right place. + 2009-10-06 Matthew Junker (tiny change) * calendar/cal-tex.el (cal-tex-cursor-month-landscape) diff --git a/lisp/mail/rmailedit.el b/lisp/mail/rmailedit.el index e119ed2f133..48df2c2e951 100644 --- a/lisp/mail/rmailedit.el +++ b/lisp/mail/rmailedit.el @@ -168,35 +168,43 @@ This function runs the hooks `text-mode-hook' and `rmail-edit-mode-hook'. (string= old (buffer-substring (point-min) (point-max)))) (setq old nil) (goto-char (point-min)) - ;; If they changed the message's encoding, rewrite the charset= - ;; header for them, so that subsequent rmail-show-message - ;; decodes it correctly. - (let ((buffer-read-only nil) - (new-coding (coding-system-base edited-coding)) - old-coding mime-charset mime-beg mime-end) - (when (re-search-forward rmail-mime-charset-pattern - (1- (save-excursion (search-forward "\n\n"))) - 'move) - (setq mime-beg (match-beginning 1) - mime-end (match-end 1) - old-coding (coding-system-from-name (match-string 1)))) - (setq mime-charset - (symbol-name - (or (coding-system-get new-coding :mime-charset) - (if (coding-system-equal new-coding 'undecided) - 'us-ascii - new-coding)))) - (cond - ((null old-coding) - ;; If there was no charset= spec, insert one. - (insert "Content-type: text/plain; charset=" mime-charset "\n")) - ((not (coding-system-equal (coding-system-base old-coding) - new-coding)) - (delete-region mime-beg mime-end) - (insert mime-charset)))) - (goto-char (point-min)) + ;; FIXME the edit may have inadvertently removed this. (search-forward "\n\n") - (setq headers-end (point)) + (setq headers-end (point-marker)) + (goto-char (point-min)) + (save-restriction + (narrow-to-region (point) headers-end) + ;; If they changed the message's encoding, rewrite the charset= + ;; header for them, so that subsequent rmail-show-message + ;; decodes it correctly. + (let* ((buffer-read-only nil) + (new-coding (coding-system-base edited-coding)) + (mime-charset (symbol-name + (or (coding-system-get new-coding :mime-charset) + (if (coding-system-equal new-coding + 'undecided) + 'us-ascii + new-coding)))) + old-coding mime-beg mime-end content-type) + (if (re-search-forward rmail-mime-charset-pattern nil 'move) + (setq mime-beg (match-beginning 1) + mime-end (match-end 1) + old-coding (coding-system-from-name (match-string 1))) + (setq content-type (mail-fetch-field "Content-Type"))) + (cond + ;; No match for rmail-mime-charset-pattern, but there was some + ;; other Content-Type. We should not insert another. (Bug#4624) + (content-type) + ((null old-coding) + ;; If there was no charset= spec, insert one. + (backward-char 1) + (insert "Content-type: text/plain; charset=" mime-charset "\n")) + ((not (coding-system-equal (coding-system-base old-coding) + new-coding)) + (goto-char mime-end) + (delete-region mime-beg mime-end) + (insert mime-charset))))) + (goto-char headers-end) (setq new-headers (rmail-edit-headers-alist t)) (rmail-swap-buffers-maybe) (narrow-to-region (rmail-msgbeg rmail-current-message) @@ -205,6 +213,7 @@ This function runs the hooks `text-mode-hook' and `rmail-edit-mode-hook'. (setq limit (save-excursion (goto-char (point-min)) + ;; FIXME this should not be using NOERROR. (search-forward "\n\n" nil t))) ;; All 3 of the functions we call below assume the buffer was ;; narrowed to just the headers of the message.