* mu4e.el: be more helpful for the user when setting up mu4e

This commit is contained in:
djcb
2012-01-07 14:27:21 +02:00
parent 35f932bda5
commit 7bcfc9ac7c

View File

@ -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)