From: Richard M. Stallman Date: Sat, 1 Jul 1995 00:33:52 +0000 (+0000) Subject: (sendmail-send-it): If mail-from-style is parens, X-Git-Tag: emacs-19.34~3401 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=7dad528a116991316f2e72720c435e4be23dea1a;p=emacs.git (sendmail-send-it): If mail-from-style is parens, don't escape all parentheses; escape only the nonmatching ones. --- diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el index f30581cbb2a..f54b52cb4b5 100644 --- a/lisp/mail/sendmail.el +++ b/lisp/mail/sendmail.el @@ -537,12 +537,24 @@ the user from the mailer." (insert "\"")))) (insert " <" login ">\n")) ((eq mail-from-style 'parens) - (insert "From: " login " (" fullname) - (let ((fullname-end (point-marker))) - (backward-char (length fullname)) - ;; RFC 822 says ()\ must be escaped in comments. - (while (re-search-forward "[()\\]" fullname-end 1) - (replace-match "\\\\\\&" t))) + (insert "From: " login " (") + (let ((fullname-start (point))) + (insert fullname) + (let ((fullname-end (point-marker))) + (goto-char fullname-start) + ;; RFC 822 says \ and nonmatching parentheses + ;; must be escaped in comments. + ;; Escape every instance of ()\ ... + (while (re-search-forward "[()\\]" fullname-end 1) + (replace-match "\\\\\\&" t)) + ;; ... then undo escaping of matching parentheses, + ;; including matching nested parentheses. + (goto-char fullname-start) + (while (re-search-forward + "\\(\\=\\|[^\\]\\(\\\\\\\\\\)*\\)\\\\(\\(\\([^\\]\\|\\\\\\\\\\)*\\)\\\\)" + fullname-end 1) + (replace-match "\\1(\\3)" t) + (goto-char fullname-start)))) (insert ")\n")) ((null mail-from-style) (insert "From: " login "\n")))))