--- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el @@ -29,7 +29,8 @@ ;;; Code: (eval-when-compile - (require 'cl)) + (require 'cl) + (require 'subr-x)) ; For when-let. (require 'mailheader) (require 'gmm-utils) @@ -1331,12 +1332,10 @@ :group 'message-various :type '(repeat function)) -(defcustom message-auto-save-directory - (if (file-writable-p message-directory) - (file-name-as-directory (expand-file-name "drafts" message-directory)) - "~/") +(defcustom message-auto-save-directory nil "*Directory where Message auto-saves buffers if Gnus isn't running. If nil, Message won't auto-save." + :version 25.1 :group 'message-buffers :link '(custom-manual "(message)Various Message Variables") :type '(choice directory (const :tag "Don't auto-save" nil))) @@ -6666,12 +6665,24 @@ defun message-setup-1 (headers &optional yank-action actions return-action) ;; rmail-start-mail expects message-mail to return t (Bug#9392) t) +(defun message-auto-save-directory nil + "Return message auto save directory. +Return the value of the `message-auto-save-directory' variable if non-nil. +Otherwise, if `message-directory' is non-nil, return a suitable +directory name under it if it is writeable, or "~/" if not. +Return nil if all the above fails." + (cond ((not message-directory) nil) + ((file-writable-p message-directory) + (file-name-as-directory + (expand-file-name "drafts" message-directory))) + (t "~/"))) + (defun message-set-auto-save-file-name () "Associate the message buffer with a file in the drafts directory." - (when message-auto-save-directory + (when-let ((dir (message-auto-save-directory))) (unless (file-directory-p - (directory-file-name message-auto-save-directory)) - (make-directory message-auto-save-directory t)) + (directory-file-name dir)) + (make-directory dir t)) (if (gnus-alive-p) (setq message-draft-article (nndraft-request-associate-buffer "drafts")) @@ -6689,7 +6700,7 @@ defun message-set-auto-save-file-name () "message" "*message*") (format-time-string "-%Y%m%d-%H%M%S")) - message-auto-save-directory)) + dir)) (setq buffer-auto-save-file-name (make-auto-save-file-name))) (clear-visited-file-modtime) (setq buffer-file-coding-system message-draft-coding-system)))