mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-28 21:54:10 +01:00
emacs: maildir-fcc: prepare for use of notmuch insert
We move some code around in preparation for the use of notmuch insert. In particular, we move the check for a valid maildir for the fcc to when the message is sent rather than when the fcc header is inserted. The main motivation is consistency with the insert version (coming later) where we cannot check the validity until send. We allow the user some chance to correct the header; the choice here is intended to be consistent with the insert version to come.
This commit is contained in:
parent
74b54fb0fa
commit
37859d1fcb
1 changed files with 44 additions and 25 deletions
|
@ -65,11 +65,9 @@ yet when sending a mail."
|
||||||
:require 'notmuch-fcc-initialization
|
:require 'notmuch-fcc-initialization
|
||||||
:group 'notmuch-send)
|
:group 'notmuch-send)
|
||||||
|
|
||||||
(defun notmuch-fcc-handler (destdir)
|
|
||||||
"Write buffer to `destdir', marking it as sent
|
|
||||||
|
|
||||||
Intended to be dynamically bound to `message-fcc-handler-function'"
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
(notmuch-maildir-fcc-write-buffer-to-maildir destdir t))
|
;; Functions which set up the fcc header in the message buffer.
|
||||||
|
|
||||||
(defun notmuch-fcc-header-setup ()
|
(defun notmuch-fcc-header-setup ()
|
||||||
"Add an Fcc header to the current message buffer.
|
"Add an Fcc header to the current message buffer.
|
||||||
|
@ -110,6 +108,9 @@ by notmuch-mua-mail"
|
||||||
(error "Invalid `notmuch-fcc-dirs' setting (neither string nor list)")))))
|
(error "Invalid `notmuch-fcc-dirs' setting (neither string nor list)")))))
|
||||||
|
|
||||||
(when subdir
|
(when subdir
|
||||||
|
(notmuch-maildir-add-file-style-fcc-header subdir))))
|
||||||
|
|
||||||
|
(defun notmuch-maildir-add-file-style-fcc-header (subdir)
|
||||||
(message-add-header
|
(message-add-header
|
||||||
(concat "Fcc: "
|
(concat "Fcc: "
|
||||||
(file-truename
|
(file-truename
|
||||||
|
@ -117,19 +118,14 @@ by notmuch-mua-mail"
|
||||||
;; prepend the standard notmuch database path.
|
;; prepend the standard notmuch database path.
|
||||||
(if (= (elt subdir 0) ?/)
|
(if (= (elt subdir 0) ?/)
|
||||||
subdir
|
subdir
|
||||||
(concat (notmuch-database-path) "/" subdir)))))
|
(concat (notmuch-database-path) "/" subdir))))))
|
||||||
|
|
||||||
;; finally test if fcc points to a valid maildir
|
(defun notmuch-fcc-handler (fcc-header)
|
||||||
(let ((fcc-header (message-field-value "Fcc")))
|
"Store message with file fcc."
|
||||||
(unless (notmuch-maildir-fcc-dir-is-maildir-p fcc-header)
|
(notmuch-maildir-fcc-file-fcc fcc-header))
|
||||||
(cond ((not (file-writable-p fcc-header))
|
|
||||||
(error (format "No permission to create %s, which does not exist"
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
fcc-header)))
|
;; Functions for saving a message using file fcc.
|
||||||
((y-or-n-p (format "%s is not a maildir. Create it? "
|
|
||||||
fcc-header))
|
|
||||||
(notmuch-maildir-fcc-create-maildir fcc-header))
|
|
||||||
(t
|
|
||||||
(error "Message not sent"))))))))
|
|
||||||
|
|
||||||
(defun notmuch-maildir-fcc-host-fixer (hostname)
|
(defun notmuch-maildir-fcc-host-fixer (hostname)
|
||||||
(replace-regexp-in-string "/\\|:"
|
(replace-regexp-in-string "/\\|:"
|
||||||
|
@ -192,6 +188,29 @@ if successful, nil if not."
|
||||||
(concat destdir "/tmp/" msg-id)
|
(concat destdir "/tmp/" msg-id)
|
||||||
(concat destdir "/cur/" msg-id ":2," (when mark-seen "S"))))
|
(concat destdir "/cur/" msg-id ":2," (when mark-seen "S"))))
|
||||||
|
|
||||||
|
(defun notmuch-maildir-fcc-file-fcc (fcc-header)
|
||||||
|
"Write the message to the file specified by FCC-HEADER.
|
||||||
|
|
||||||
|
It offers the user a chance to correct the header, or filesystem,
|
||||||
|
if needed."
|
||||||
|
(if (notmuch-maildir-fcc-dir-is-maildir-p fcc-header)
|
||||||
|
(notmuch-maildir-fcc-write-buffer-to-maildir fcc-header 't)
|
||||||
|
;; The fcc-header is not a valid maildir see if the user wants to
|
||||||
|
;; fix it in some way.
|
||||||
|
(let* ((prompt (format "Fcc %s is not a maildir: (r)etry, (c)reate folder, (i)gnore, or (e)dit the header? "
|
||||||
|
fcc-header))
|
||||||
|
(response (read-char-choice prompt '(?r ?c ?i ?e))))
|
||||||
|
(case response
|
||||||
|
(?r (notmuch-maildir-fcc-file-fcc fcc-header))
|
||||||
|
(?c (if (file-writable-p fcc-header)
|
||||||
|
(notmuch-maildir-fcc-create-maildir fcc-header)
|
||||||
|
(message "No permission to create %s." fcc-header)
|
||||||
|
(sit-for 2))
|
||||||
|
(notmuch-maildir-fcc-file-fcc fcc-header))
|
||||||
|
(?i 't)
|
||||||
|
(?e (notmuch-maildir-fcc-file-fcc
|
||||||
|
(read-from-minibuffer "Fcc header: " fcc-header)))))))
|
||||||
|
|
||||||
(defun notmuch-maildir-fcc-write-buffer-to-maildir (destdir &optional mark-seen)
|
(defun notmuch-maildir-fcc-write-buffer-to-maildir (destdir &optional mark-seen)
|
||||||
"Writes the current buffer to maildir destdir. If mark-seen is
|
"Writes the current buffer to maildir destdir. If mark-seen is
|
||||||
non-nil, it will write it to cur/, and mark it as read. It should
|
non-nil, it will write it to cur/, and mark it as read. It should
|
||||||
|
|
Loading…
Reference in a new issue