emacs: Change FCC to be relative to notmuch mail store, not message-directory

Otherwise, FCC is too hard to use, (user must set it and also set message-
directory variable to match notmuch mail datbase path). As a rule, I'd like
for users of notmuch to not be required to muck around with non-notmuch
mail settings in emacs.

The above is only really possible now thanks to the recent addition of the
"notmuch config get" command which allows emacs to query the currently
configured notmuch database path.

This also now allows an absolute-path FCC to be set if desired.
This commit is contained in:
Carl Worth 2010-10-27 16:27:43 -07:00
parent 65f2e61f28
commit 8b6f3e3f45
2 changed files with 15 additions and 6 deletions

View file

@ -68,6 +68,13 @@ the user hasn't set this variable with the old or new value."
(match-string 2 long-string) (match-string 2 long-string)
"unknown"))) "unknown")))
(defun notmuch-database-path ()
"Return the database.path value from the notmuch configuration."
;; Trim off the trailing newline
(substring (shell-command-to-string
(concat notmuch-command " config get database.path"))
0 -1))
;; ;;
;; XXX: This should be a generic function in emacs somewhere, not ;; XXX: This should be a generic function in emacs somewhere, not

View file

@ -18,6 +18,8 @@
(require 'message) (require 'message)
(require 'notmuch-lib)
(defvar notmuch-maildir-fcc-count 0) (defvar notmuch-maildir-fcc-count 0)
(defcustom notmuch-fcc-dirs nil (defcustom notmuch-fcc-dirs nil
@ -43,10 +45,9 @@
used. The first entry is used as a default fallback when nothing used. The first entry is used as a default fallback when nothing
else matches. else matches.
In all cases, the complete FCC directory will be constructed by In all cases, a relative FCC directory will be understood to
concatenating the content of the variable 'message-directory' specify a directory within the notmuch mail store, (as set by
('~/Mail/' by default and customizable via M-x the database.path option in the notmuch configuration file).
customize-variable<RET>message-directory<RET>) and this value.
You will be prompted to create the directory if it does not exist yet when You will be prompted to create the directory if it does not exist yet when
sending a mail. sending a mail.
@ -90,8 +91,9 @@
;; if there is no fcc header yet, add ours ;; if there is no fcc header yet, add ours
(unless (message-fetch-field "fcc") (unless (message-fetch-field "fcc")
(message-add-header (concat "Fcc: " (message-add-header (concat "Fcc: "
(file-name-as-directory message-directory) (if (= (elt subdir 0) ?/)
subdir))) subdir
(concat (notmuch-database-path) "/" subdir)))))
;; finally test if fcc points to a valid maildir ;; finally test if fcc points to a valid maildir
(let ((fcc-header (message-fetch-field "fcc"))) (let ((fcc-header (message-fetch-field "fcc")))