emacs: add prompt to create maildir for fcc if it does not exist.
authorJesse Rosenthal <jrosenthal@jhu.edu>
Tue, 27 Apr 2010 01:33:13 +0000 (21:33 -0400)
committerCarl Worth <cworth@cworth.org>
Tue, 27 Apr 2010 06:06:50 +0000 (23:06 -0700)
If the user specifies a maildir that does not exist, prompt the user to
see whether a maildir should be created. This will fail, with the
relevant explanation, if the location is not writable, or if a file
already exists in that location. If the location is a dir, but not a
maildir, this will add /tmp/cur/new to it.

emacs/notmuch-maildir-fcc.el

index 34b19154ac94995d7ab7098251724c308e876107..6d75b118018c30d6cabf58ba9bbe4043e042d4ec 100644 (file)
      (if (eq subdir nil) (setq subdir (car (car notmuch-fcc-dirs))))
      (unless (message-fetch-field "fcc")
        (message-add-header (concat "Fcc: " message-directory subdir)))
-     (unless (notmuch-maildir-fcc-dir-is-maildir-p 
-             (message-fetch-field "fcc"))
-       (error (format "%s is not a maildir." (message-fetch-field "fcc")))))))
-
+     (let ((fcc-header (message-fetch-field "fcc")))
+     (unless (notmuch-maildir-fcc-dir-is-maildir-p fcc-header)
+       (cond ((not (file-writable-p fcc-header))
+             (error (format "%s is not a maildir, but you don't have permission to create one." fcc-header)))
+            ((y-or-n-p (format "%s is not a maildir. Create it? "
+                                fcc-header))
+             (notmuch-maildir-fcc-create-maildir fcc-header))
+            (t
+             (error "Not sending message."))))))))
+             
 (defun notmuch-maildir-fcc-host-fixer (hostname)
   (replace-regexp-in-string "/\\|:"
                            '(lambda (s)
        (file-exists-p (concat dir "/new/"))
        (file-exists-p (concat dir "/tmp/"))))
 
+(defun notmuch-maildir-fcc-create-maildir (path)
+  (cond ((or (not (file-exists-p path)) (file-directory-p path))
+        (make-directory (concat path "/cur/") t)
+        (make-directory (concat path "/new/") t)
+        (make-directory (concat path "/tmp/") t))
+       ((file-regular-p path)
+        (error "%s is a file. Can't creat maildir." path))
+       (t
+        (error "I don't know how to create a maildir here"))))
+        
+  
+
 (defun notmuch-maildir-fcc-save-buffer-to-tmp (destdir)
   "Returns the msg id of the message written to the temp directory
 if successful, nil if not."