Merge from emacs--devo--0
[gnus] / lisp / message.el
index ac4de57..403cc54 100644 (file)
@@ -441,6 +441,14 @@ nil means let mailer mail back a message to report errors."
   :link '(custom-manual "(message)Sending Variables")
   :type 'boolean)
 
+(defcustom message-confirm-send nil
+  "When non-nil, ask for confirmation when sending a message."
+  :group 'message-sending
+  :group 'message-mail
+  :version "23.1" ;; No Gnus
+  :link '(custom-manual "(message)Sending Variables")
+  :type 'boolean)
+
 (defcustom message-generate-new-buffers 'unique
   "*Say whether to create a new message buffer to compose a message.
 Valid values include:
@@ -3962,6 +3970,9 @@ It should typically alter the sending method in some way or other."
     (put-text-property (point-min) (point-max) 'read-only nil))
   (message-fix-before-sending)
   (run-hooks 'message-send-hook)
+  (when message-confirm-send
+    (or (y-or-n-p "Send message? ")
+       (keyboard-quit)))
   (message message-sending-message)
   (let ((alist message-send-method-alist)
        (success t)
@@ -5296,7 +5307,7 @@ In posting styles use `(\"Expires\" (make-expires-date 30))'."
           (* 25 25)))
   (let ((tm (current-time)))
     (concat
-     (if (or (memq system-type '(ms-dos emx vax-vms))
+     (if (or (memq system-type '(ms-dos emx))
             ;; message-number-base36 doesn't handle bigints.
             (floatp (user-uid)))
         (let ((user (downcase (user-login-name))))
@@ -5622,7 +5633,8 @@ subscribed address (and not the additional To and Cc header contents)."
                (mapcar (lambda (rhs) (or (cadr (split-string rhs "@")) ""))
                        (mapcar 'downcase
                                (mapcar
-                                'car (mail-header-parse-addresses field))))))
+                                'cadr
+                                (mail-extract-address-components field t))))))
        (setq ace (if (string-match "\\`[[:ascii:]]+\\'" rhs)
                      rhs
                    (downcase (idna-to-ascii rhs))))
@@ -6286,13 +6298,22 @@ are not included."
     (if (gnus-alive-p)
        (setq message-draft-article
              (nndraft-request-associate-buffer "drafts"))
+
+      ;; If Gnus were alive, draft messages would be saved in the drafts folder.
+      ;; But Gnus is not alive, so arrange to save the draft message in a
+      ;; regular file in message-auto-save-directory.  Append a unique
+      ;; time-based suffix to the filename to allow multiple drafts to be saved
+      ;; simultaneously without overwriting each other (which mimics the
+      ;; functionality of the Gnus drafts folder).
       (setq buffer-file-name (expand-file-name
+                             (concat
                              (if (memq system-type
                                        '(ms-dos ms-windows windows-nt
                                                 cygwin cygwin32 win32 w32
                                                 mswindows))
                                  "message"
                                "*message*")
+                              (format-time-string "-%Y%m%d-%H%M%S"))
                              message-auto-save-directory))
       (setq buffer-auto-save-file-name (make-auto-save-file-name)))
     (clear-visited-file-modtime)
@@ -6858,14 +6879,13 @@ header line with the old Message-ID."
   (interactive)
   (let ((file-name (make-auto-save-file-name)))
     (cond ((save-window-excursion
-            (if (not (eq system-type 'vax-vms))
-                (with-output-to-temp-buffer "*Directory*"
-                  (with-current-buffer standard-output
-                    (fundamental-mode)) ; for Emacs 20.4+
-                  (buffer-disable-undo standard-output)
-                  (let ((default-directory "/"))
-                    (call-process
-                     "ls" nil standard-output nil "-l" file-name))))
+            (with-output-to-temp-buffer "*Directory*"
+              (with-current-buffer standard-output
+                (fundamental-mode))    ; for Emacs 20.4+
+              (buffer-disable-undo standard-output)
+              (let ((default-directory "/"))
+                (call-process
+                 "ls" nil standard-output nil "-l" file-name)))
             (yes-or-no-p (format "Recover auto save file %s? " file-name)))
           (let ((buffer-read-only nil))
             (erase-buffer)