diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cdc2d65ebda..e9e7faa93d4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,19 @@ +2011-05-24 Kenichi Handa + + * mail/sendmail.el: Require `rfc2047'. + (mail-insert-from-field): Do not perform RFC2047 encoding. + (mail-encode-header): New function. + (sendmail-send-it): Set buffer-file-coding-system of the work + buffer to the return value of select-message-coding-system. Call + mail-encode-header. + + * mail/smtpmail.el (smtpmail-send-it): Call mail-encode-header. + +2011-05-24 Sean Neakums (tiny change) + + * mail/supercite.el (sc-default-cite-frame): Handle + sc-nested-citation-p when sc-cite-blank-lines-p is non-nil. + 2011-05-24 Glenn Morris * progmodes/python.el (brm-menu): Declare. diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el index cfacf5fad55..c6cd4c75ebd 100644 --- a/lisp/mail/sendmail.el +++ b/lisp/mail/sendmail.el @@ -29,7 +29,7 @@ ;;; Code: (require 'mail-utils) -(autoload 'rfc2047-encode-string "rfc2047") +(require 'rfc2047) (defgroup sendmail nil "Mail sending commands for Emacs." @@ -945,12 +945,14 @@ of outgoing mails regardless of the current language environment. See also the function `select-message-coding-system'.") (defun mail-insert-from-field () + "Insert the \"From:\" field of a mail header. +The style of the field is determined by the variable `mail-from-style'. +This function does not perform RFC2047 encoding." (let* ((login user-mail-address) (fullname (user-full-name)) (quote-fullname nil)) (if (string-match "[^\0-\177]" fullname) - (setq fullname (rfc2047-encode-string fullname) - quote-fullname t)) + (setq quote-fullname t)) (cond ((null mail-from-style) (insert "From: " login "\n")) ;; This is deprecated. @@ -1010,6 +1012,20 @@ See also the function `select-message-coding-system'.") (goto-char fullname-start)))) (insert ")\n"))))) +(defun mail-encode-header (beg end) + "Encode the mail header between BEG and END according to RFC2047. +Return non-nil if and only if some part of the header is encoded." + (save-restriction + (narrow-to-region beg end) + (let* ((selected (select-message-coding-system)) + (mm-coding-system-priorities + (if (and selected (coding-system-get selected :mime-charset)) + (cons selected mm-coding-system-priorities) + mm-coding-system-priorities)) + (tick (buffer-chars-modified-tick))) + (rfc2047-encode-message-header) + (= tick (buffer-chars-modified-tick))))) + ;; Normally you will not need to modify these options unless you are ;; using some non-genuine substitute for sendmail which does not ;; implement each and every option that the original supports. @@ -1050,6 +1066,7 @@ external program defined by `sendmail-program'." (unless multibyte (set-buffer-multibyte nil)) (insert-buffer-substring mailbuf) + (set-buffer-file-coding-system selected-coding) (goto-char (point-max)) ;; require one newline at the end. (or (= (preceding-char) ?\n) @@ -1155,6 +1172,8 @@ external program defined by `sendmail-program'." (if mail-interactive (with-current-buffer errbuf (erase-buffer)))) + ;; Encode the header according to RFC2047. + (mail-encode-header (point-min) delimline) (goto-char (point-min)) (if (let ((case-fold-search t)) (or resend-to-addresses diff --git a/lisp/mail/smtpmail.el b/lisp/mail/smtpmail.el index 427d9d17746..3eda3503adc 100644 --- a/lisp/mail/smtpmail.el +++ b/lisp/mail/smtpmail.el @@ -361,6 +361,8 @@ The list is in preference order.") (if mail-interactive (with-current-buffer errbuf (erase-buffer)))) + ;; Encode the header according to RFC2047. + (mail-encode-header (point-min) delimline) ;; (setq smtpmail-address-buffer (generate-new-buffer "*smtp-mail*")) (setq smtpmail-recipient-address-list diff --git a/lisp/mail/supercite.el b/lisp/mail/supercite.el index 084b623080a..3d754c08f83 100644 --- a/lisp/mail/supercite.el +++ b/lisp/mail/supercite.el @@ -184,7 +184,9 @@ See the variable `sc-cite-frame-alist' for details." ;; paragraph, unless sc-cite-blank-lines-p is non-nil, in which ;; case we treat blank lines just like any other line. ("^[ \t]*$" (if sc-cite-blank-lines-p - (sc-cite-line) + (if sc-nested-citation-p + (sc-add-citation-level) + (sc-cite-line)) (sc-fill-if-different ""))) ;; do nothing if looking at a reference tag. make sure that the ;; tag string isn't the empty string since this will match every