diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index de7e9ba..da5c871 100644 --- 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,15 +1332,16 @@ :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 'auto "*Directory where Message auto-saves buffers if Gnus isn't running. -If nil, Message won't auto-save." +If nil, Message won't auto-save. +If 'auto, derive from `message-directory'." + :version "25.1" :group 'message-buffers :link '(custom-manual "(message)Various Message Variables") - :type '(choice directory (const :tag "Don't auto-save" nil))) + :type '(choice directory + (const :tag "Don't auto-save" nil) + (const :tag "Derive from `message-directory'" auto))) (defcustom message-default-charset (and (not (mm-multibyte-p)) 'iso-8859-1) @@ -6666,12 +6668,28 @@ ;; 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 it is +a string or 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 ((or (stringp message-auto-save-directory) + (not message-auto-save-directory)) + message-auto-save-directory) + ((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 +6707,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)))