From 7bcfc9ac7c7c248eff278015e733a2d2ca800d16 Mon Sep 17 00:00:00 2001 From: djcb Date: Sat, 7 Jan 2012 14:27:21 +0200 Subject: [PATCH] * mu4e.el: be more helpful for the user when setting up mu4e --- emacs/mu4e.el | 55 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/emacs/mu4e.el b/emacs/mu4e.el index 2ce49922..0e0c54e3 100644 --- a/emacs/mu4e.el +++ b/emacs/mu4e.el @@ -34,8 +34,6 @@ (require 'mu4e-send) (require 'mu4e-proc) -(require 'mu4e-version) ;; auto-generated - ;; mu4e-version.el is autogenerated, and defines mu4e-mu-version (require 'mu4e-version) @@ -51,15 +49,15 @@ :group 'mu4e :safe 'stringp) -(defcustom mu4e-mu-binary "mu" +(defcustom mu4e-mu-binary (executable-find "mu") "Name of the mu-binary to use; if it cannot be found in your PATH, you can specify the full path." :type 'file :group 'mu4e :safe 'stringp) -(defcustom mu4e-maildir nil - "Your Maildir directory. When `nil', mu will try to find it." +(defcustom mu4e-maildir (expand-file-name "~/Maildir") + "Your Maildir directory; by default, mu4e assumes ~/Maildir." :type 'directory :safe 'stringp :group 'mu4e) @@ -114,27 +112,21 @@ show up in the UI), and KEY is a shortcut key for the query.") "Special folders for mm." :group 'mu4e) -;; (defcustom mu4e-inbox-folder nil -;; "Your Inbox folder, relative to `mu4e-maildir', e.g. \"/Inbox\"." -;; :type 'string -;; :safe 'stringp -;; :group 'mu4e-folders) - -(defcustom mu4e-sent-folder nil +(defcustom mu4e-sent-folder "/sent" "Your folder for sent messages, relative to `mu4e-maildir', e.g. \"/Sent Items\"." :type 'string :safe 'stringp :group 'mu4e-folders) -(defcustom mu4e-draft-folder nil +(defcustom mu4e-drafts-folder "/drafts" "Your folder for draft messages, relative to `mu4e-maildir', e.g. \"/drafts\"" :type 'string :safe 'stringp :group 'mu4e-folders) -(defcustom mu4e-trash-folder nil +(defcustom mu4e-trash-folder "/trash" "Your folder for trashed messages, relative to `mu4e-maildir', e.g. \"/trash\"." :type 'string @@ -340,6 +332,35 @@ in which case it will be equal to `:to'.)") ;; mm startup function ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(defun mu4e-create-maildir-maybe (dir) + "Offer to create DIR if it does not exist yet. Return t if the +dir already existed, or has been created, nil otherwise." + (if (and (file-exists-p dir) (not (file-directory-p dir))) + (error "%s exists, but is not a directory." dir)) + (cond + ((file-directory-p dir) t) + ((yes-or-no-p (format "%s does not exist yes. Create now?" dir)) + (mu4e-proc-mkdir dir)) + (otherwise nil))) + +(defun mu4e-check-requirements () + "Check for the settings required for running mu4e." + (unless mu4e-maildir + (error "Please set `mu4e-maildir' to the full path to your + Maildir directory.")) + (unless (mu4e-create-maildir-maybe mu4e-maildir) + (error "%s is not a valid maildir directory" mu4e-maildir)) + (dolist (var '( mu4e-sent-folder + mu4e-drafts-folder + mu4e-trash-folder)) + (unless (and (boundp var) (symbol-value var)) + (error "Please set %S" var)) + (let* ((dir (symbol-value var)) (path (concat mu4e-maildir dir))) + (unless (string= (substring dir 0 1) "/") + (error "%S must start with a '/'")) + (unless (mu4e-create-maildir-maybe path) + (error "%s (%S) does not exist" path var))))) + (defun mu4e () "Start mm. We do this by sending a 'ping' to the mu server process, and start the main view if the 'pong' we receive from the @@ -347,11 +368,7 @@ server has the expected values." (interactive) (if (buffer-live-p (get-buffer mu4e-main-buffer-name)) (switch-to-buffer mu4e-main-buffer-name) - (dolist (var '(mu4e-maildir mu4e-inbox-folder mu4e-outbox-folder - mu4e-outbox-folder mu4e-sent-folder mu4e-drafts-folder - mu4e-trash-folder)) - (unless (and (boundp var) (symbol-value var)) - (error "Please set %S" var))) + (mu4e-check-requirements) ;; explicit version checks are a bit questionable, ;; better to check for specific features (if (< emacs-major-version 23)