Function: message-make-from
message-make-from is a byte-compiled function defined in
message.el.gz.
Signature
(message-make-from &optional NAME ADDRESS)
Documentation
Make a From header.
Source Code
;; Defined in /usr/src/emacs/lisp/gnus/message.el.gz
(defun message-make-from (&optional name address)
"Make a From header."
(let* ((style message-from-style)
(login (or address (message-make-address)))
(fullname (or name user-full-name (user-full-name))))
(when (string= fullname "&")
(setq fullname (user-login-name)))
(with-temp-buffer
(mm-enable-multibyte)
(cond
((or (null style)
(equal fullname ""))
(insert login))
((or (eq style 'angles)
(and (not (eq style 'parens))
;; Use angles if no quoting is needed, or if parens would
;; need quoting too.
(or (not (string-match "[^- !#-'*+/-9=?A-Z^-~]" fullname))
(let ((tmp (concat fullname nil)))
(while (string-match "([^()]*)" tmp)
(aset tmp (match-beginning 0) ?-)
(aset tmp (1- (match-end 0)) ?-))
(string-match "[\\()]" tmp)))))
(insert fullname)
(goto-char (point-min))
;; Look for a character that cannot appear unquoted
;; according to RFC 822 (or later).
(when (re-search-forward "[^- !#-'*+/-9=?A-Z^-~]" nil 1)
;; Quote fullname, escaping specials.
(goto-char (point-min))
(insert "\"")
(while (re-search-forward "[\"\\]" nil 1)
(replace-match "\\\\\\&" t))
(insert "\""))
(insert " <" login ">"))
(t ; 'parens or default
(insert login " (")
(let ((fullname-start (point)))
(insert fullname)
(goto-char fullname-start)
;; \ and nonmatching parentheses must be escaped in comments.
;; Escape every instance of ()\ ...
(while (re-search-forward "[()\\]" nil 1)
(replace-match "\\\\\\&" t))
;; ... then undo escaping of matching parentheses,
;; including matching nested parentheses.
(goto-char fullname-start)
(while (re-search-forward
"\\(\\=\\|[^\\]\\(\\\\\\\\\\)*\\)\\\\(\\(\\([^\\]\\|\\\\\\\\\\)*\\)\\\\)"
nil 1)
(replace-match "\\1(\\3)" t)
(goto-char fullname-start)))
(insert ")")))
(buffer-string))))