X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/65280ff31cf3856fa19d8fe38f461bfae67bcd46..177cd3b9f4881410dcd5ef9e8fc706421e63c109:/lisp/mail/sendmail.el diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el index 89154b4493..932f52204c 100644 --- a/lisp/mail/sendmail.el +++ b/lisp/mail/sendmail.el @@ -1,6 +1,6 @@ ;;; sendmail.el --- mail sending commands for Emacs. -*- byte-compile-dynamic: t -*- -;; Copyright (C) 1985, 86, 92, 93, 94, 95, 96, 98, 2000, 2001, 2002 +;; Copyright (C) 1985, 86, 92, 93, 94, 95, 96, 98, 2000, 2001, 2002, 03, 2004 ;; Free Software Foundation, Inc. ;; Maintainer: FSF @@ -68,18 +68,23 @@ controlled by a separate variable, `mail-specify-envelope-from'." (defcustom mail-specify-envelope-from nil "*If non-nil, specify the envelope-from address when sending mail. The value used to specify it is whatever is found in -`mail-envelope-from', with `user-mail-address' as fallback. +the variable `mail-envelope-from', with `user-mail-address' as fallback. -On most systems, specifying the envelope-from address -is a privileged operation." +On most systems, specifying the envelope-from address is a +privileged operation. This variable affects sendmail and +smtpmail -- if you use feedmail to send mail, see instead the +variable `feedmail-deduce-envelope-from'." :version "21.1" :type 'boolean :group 'sendmail) (defcustom mail-envelope-from nil "*If non-nil, designate the envelope-from address when sending mail. -If this is nil while `mail-specify-envelope-from' is non-nil, the -content of `user-mail-address' is used." +This only has an effect if `mail-specify-envelope-from' is non-nil. +The value should be either a string, or the symbol `header' (in +which case the contents of the \"From\" header of the message +being sent is used), or nil (in which case the value of +`user-mail-address' is used)." :version "21.1" :type '(choice (string :tag "From-name") (const :tag "Use From: header from message" header) @@ -180,8 +185,8 @@ The function `mail-setup' runs this hook." (defvar mail-aliases t "Alist of mail address aliases, or t meaning should be initialized from your mail aliases file. -\(The file's name is normally `~/.mailrc', but your MAILRC environment -variable can override that name.) +\(The file's name is normally `~/.mailrc', but `mail-personal-alias-file' +can specify a different file name.) The alias definitions in the file have this form: alias ALIAS MEANING") @@ -376,16 +381,17 @@ actually occur.") (beginning-of-line) (end-of-line) (2 font-lock-constant-face nil t) (4 font-lock-comment-face nil t))) - '("^\\(X-[A-Za-z0-9-]+\\|In-reply-to\\):.*" + '("^\\(X-[A-Za-z0-9-]+\\|In-reply-to\\):.*\\(\n[ \t]+.*\\)*$" . font-lock-string-face)))) "Additional expressions to highlight in Mail mode.") (defun sendmail-sync-aliases () - (let ((modtime (nth 5 (file-attributes mail-personal-alias-file)))) - (or (equal mail-alias-modtime modtime) - (setq mail-alias-modtime modtime - mail-aliases t)))) + (when mail-personal-alias-file + (let ((modtime (nth 5 (file-attributes mail-personal-alias-file)))) + (or (equal mail-alias-modtime modtime) + (setq mail-alias-modtime modtime + mail-aliases t))))) (defun mail-setup (to subject in-reply-to cc replybuffer actions) (or mail-default-reply-to @@ -394,8 +400,9 @@ actually occur.") (if (eq mail-aliases t) (progn (setq mail-aliases nil) - (if (file-exists-p mail-personal-alias-file) - (build-mail-aliases)))) + (when mail-personal-alias-file + (if (file-exists-p mail-personal-alias-file) + (build-mail-aliases))))) ;; Don't leave this around from a previous message. (kill-local-variable 'buffer-file-coding-system) ;; This doesn't work for enable-multibyte-characters. @@ -498,7 +505,6 @@ Turning on Mail mode runs the normal hooks `text-mode-hook' and (make-local-variable 'font-lock-defaults) (setq font-lock-defaults '(mail-font-lock-keywords t t)) (make-local-variable 'paragraph-separate) - (make-local-variable 'paragraph-start) (make-local-variable 'normal-auto-fill-function) (setq normal-auto-fill-function 'mail-mode-auto-fill) (make-local-variable 'fill-paragraph-function) @@ -506,6 +512,9 @@ Turning on Mail mode runs the normal hooks `text-mode-hook' and ;; Allow using comment commands to add/remove quoting (this only does ;; anything if mail-yank-prefix is set to a non-nil value). (set (make-local-variable 'comment-start) mail-yank-prefix) + (if mail-yank-prefix + (set (make-local-variable 'comment-start-skip) + (concat "^" (regexp-quote mail-yank-prefix) "[ \t]*"))) (make-local-variable 'adaptive-fill-regexp) (setq adaptive-fill-regexp (concat "[ \t]*[-[:alnum:]]+>+[ \t]*\\|" @@ -518,12 +527,11 @@ Turning on Mail mode runs the normal hooks `text-mode-hook' and ;; lines that delimit forwarded messages. ;; Lines containing just >= 3 dashes, perhaps after whitespace, ;; are also sometimes used and should be separators. - (setq paragraph-start (concat (regexp-quote mail-header-separator) + (setq paragraph-separate (concat (regexp-quote mail-header-separator) "$\\|\t*\\([-|#;>* ]\\|(?[0-9]+[.)]\\)+$" "\\|[ \t]*[[:alnum:]]*>+[ \t]*$\\|[ \t]*$\\|" - "-- $\\|---+$\\|" - page-delimiter)) - (setq paragraph-separate paragraph-start)) + "--\\( \\|-+\\)$\\|" + page-delimiter))) (defun mail-header-end () @@ -575,7 +583,7 @@ If within the headers, this makes the new lines into continuation lines." (defun mail-mode-fill-paragraph (arg) ;; Do something special only if within the headers. (if (< (point) (mail-header-end)) - (let (beg end fieldname) + (let (beg end fieldname) (when (prog1 (re-search-backward "^[-a-zA-Z]+:" nil 'yes) (setq beg (point))) (setq fieldname @@ -622,6 +630,7 @@ If within the headers, this makes the new lines into continuation lines." (define-key mail-mode-map "\C-c\C-t" 'mail-text) (define-key mail-mode-map "\C-c\C-y" 'mail-yank-original) (define-key mail-mode-map "\C-c\C-r" 'mail-yank-region) + (define-key mail-mode-map [remap split-line] 'mail-split-line) (define-key mail-mode-map "\C-c\C-q" 'mail-fill-yanked-message) (define-key mail-mode-map "\C-c\C-w" 'mail-signature) (define-key mail-mode-map "\C-c\C-v" 'mail-sent-via) @@ -685,20 +694,20 @@ If within the headers, this makes the new lines into continuation lines." ;; User-level commands for sending. -(defun mail-send-and-exit (arg) +(defun mail-send-and-exit (&optional arg) "Send message like `mail-send', then, if no errors, exit from mail buffer. Prefix arg means don't delete this window." (interactive "P") (mail-send) (mail-bury arg)) -(defun mail-dont-send (arg) +(defun mail-dont-send (&optional arg) "Don't send the message you have been editing. Prefix arg means don't delete this window." (interactive "P") (mail-bury arg)) -(defun mail-bury (arg) +(defun mail-bury (&optional arg) "Bury this mail buffer." (let ((newbuf (other-buffer (current-buffer)))) (bury-buffer (current-buffer)) @@ -943,7 +952,7 @@ external program defined by `sendmail-program'." ;; ... then undo escaping of matching parentheses, ;; including matching nested parentheses. (goto-char fullname-start) - (while (re-search-forward + (while (re-search-forward "\\(\\=\\|[^\\]\\(\\\\\\\\\\)*\\)\\\\(\\(\\([^\\]\\|\\\\\\\\\\)*\\)\\\\)" fullname-end 1) (replace-match "\\1(\\3)" t) @@ -991,7 +1000,7 @@ external program defined by `sendmail-program'." delimline t)) (let* ((default-directory "/") (coding-system-for-write selected-coding) - (args + (args (append (list (point-min) (point-max) program nil errbuf nil "-oi") @@ -1023,7 +1032,7 @@ external program defined by `sendmail-program'." ) ) (exit-value (apply 'call-process-region args))) - (or (null exit-value) (zerop exit-value) + (or (null exit-value) (eq 0 exit-value) (error "Sending...failed with exit value %d" exit-value))) (or fcc-was-found (error "No recipients"))) @@ -1229,7 +1238,7 @@ external program defined by `sendmail-program'." (mail-position-on-field "to")) (insert "\nFCC: " folder)) -(defun mail-reply-to () +(defun mail-reply-to () "Move point to end of Reply-To-field. Create a Reply-To field if none." (interactive) (expand-abbrev) @@ -1259,7 +1268,7 @@ external program defined by `sendmail-program'." (goto-char (mail-text-start))) (defun mail-signature (&optional atpoint) - "Sign letter with contents of the file `mail-signature-file'. + "Sign letter with signature based on `mail-signature-file'. Prefix arg means put contents at point." (interactive "P") (save-excursion @@ -1269,8 +1278,10 @@ Prefix arg means put contents at point." (end-of-line) (or atpoint (delete-region (point) (point-max))) - (insert "\n\n-- \n") - (insert-file-contents (expand-file-name mail-signature-file)))) + (if (stringp mail-signature) + (insert mail-signature) + (insert "\n\n-- \n") + (insert-file-contents (expand-file-name mail-signature-file))))) (defun mail-fill-yanked-message (&optional justifyp) "Fill the paragraphs of a message yanked into this one. @@ -1416,6 +1427,13 @@ and don't delete any header fields." (if mail-yank-hooks (run-hooks 'mail-yank-hooks) (mail-indent-citation)))))))) + +(defun mail-split-line () + "Split current line, moving portion beyond point vertically down. +If the current line has `mail-yank-prefix', insert it on the new line." + (interactive "*") + (split-line mail-yank-prefix)) + (defun mail-attach-file (&optional file) "Insert a file at the end of the buffer, with separator lines around it." @@ -1712,4 +1730,5 @@ you can move to one of them and type C-c C-c to recover that one." (provide 'sendmail) +;;; arch-tag: 48bc1025-d993-4d31-8d81-2a29491f0626 ;;; sendmail.el ends here