unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: Sebastian Spaeth <Sebastian@SSpaeth.de>
To: Notmuch developer list <notmuch@notmuchmail.org>
Subject: [PATCH 7/7] Integrate notmuch-fcc mechansim
Date: Fri, 23 Apr 2010 11:38:57 +0200	[thread overview]
Message-ID: <1272015537-13225-1-git-send-email-Sebastian@SSpaeth.de> (raw)
In-Reply-To: <87ochbx3er.fsf@SSpaeth.de>

I have gone wild and added a defcustom "notmuch-fcc-dirs".
Depending on the value of that variable we will not do any
maildir fcc at all (nil, the default), or it is of the format
(("defaultsentbox")
 ("full name <email@address>" . "Work/sentbox")
 ("full name2 <email2@address2>" . "Work2/sentbox"))

The outbox name will be concatenated with the message mode
variable "message-directory" which is "~/Mail/" by default.

With this solution, no customization of a user's .emacs file
is needed at all.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
---
I went wild and did a proper notmuch integration including customizations.
Maildir FCC is turned off by default and can be turned on to some universal
SENTBOX or to Dirk's sepcial use case with multiple outboxes depending on 
the from address. Some testing would be appreciated before it is merged.
It seems to work nicely here. And be lenient, remember I am an elisp noob.

 emacs/notmuch-maildir-fcc.el |   86 ++++++++++++++++++++++++++++--------------
 1 files changed, 57 insertions(+), 29 deletions(-)

diff --git a/emacs/notmuch-maildir-fcc.el b/emacs/notmuch-maildir-fcc.el
index b7e1fb3..9f54dfb 100644
--- a/emacs/notmuch-maildir-fcc.el
+++ b/emacs/notmuch-maildir-fcc.el
@@ -12,39 +12,66 @@
 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 ;; Boston, MA 02110-1301, USA.
-
-;; Commentary:
-;;
-;; This is the beginning of a solution for storing sent mail in a
-;; maildir in emacs message mode, presented because some people might
-;; find it useful. It is *not* fully tested, it *may* overwrite files,
-;; and any directories you point this at may no longer be there
-;; afterwards. Use at your own risk.
-;;
-;; To use this as the fcc handler for message-mode, put
-;; one of the following in your init file:
-;;
-;; if you want Fcc'd messages to be marked as read:
-;;
-;;     (setq message-fcc-handler-function
-;;          '(lambda (destdir)
-;;	     (notmuch-maildir-fcc-write-buffer-to-maildir destdir t)))
-;;
-;; if you want Fcc'd messages to be marked as new:
-;;
-;;     (setq message-fcc-handler-function
-;;          '(lambda (destdir)
-;;	     (notmuch-maildir-fcc-write-buffer-to-maildir destdir nil)))
-;;
-;; It will then honor the Fcc header that you set in your mail. They can
-;; be set up automatically via:
 ;;
-;;     (add-hook 'message-send-hook
-;;          '(lambda ()
-;;             (message-add-header "Fcc: ~/mail/INBOX.Sent")))
+;; To use this as the fcc handler for message-mode,
+;; customize the notmuch-fcc-dirs variable
+
+(require 'message)
 
 (defvar notmuch-maildir-fcc-count 0)
 
+(defcustom notmuch-fcc-dirs nil
+ "If set to non-nil, this will cause message mode to file (fcc) your mail in the specified directory, depending on your From address.
+
+ The first entry (a list) is used as a default fallback
+ when nothing matches. So in the easiest case notmuch-fcc-dirs is
+ just something like ((\"INBOX.Sent\"))
+
+ If you need a more fancy setup, where you want different Outboxes depending
+ on your From address, you use something like this:
+
+     (   (\"defaultinbox\")
+         (\"Sebastian Spaeth <Sebastian@SSpaeth.de>\" . \"privat\")
+         (\"Sebastian Spaeth <SSpaeth@ethz.ch>\" . \"uni\")
+     )
+ 
+ This will constructs a path, concatenating the content of the
+ variable 'message-directory' (a message mode variable
+ customizable via m-x
+ customize-variable<RET>message-directory<RET>) and the second
+ part in the alist."
+ :require 'notmuch-fcc-initialization
+ :group 'notmuch
+)
+
+(defun notmuch-fcc-initialization ()
+  "If notmuch-fcc-directories is set, 
+   hook them into the message-fcc-handler-function"
+(if (not (eq notmuch-fcc-dirs nil)) (progn
+    ;Set up the message-fcc-handler to move mails to the maildir in Fcc
+    ;The parameter is hardcoded to mark messages as "seen"
+    (setq message-fcc-handler-function
+          '(lambda (destdir)
+             (notmuch-maildir-fcc-write-buffer-to-maildir destdir t)))
+    ;add a hook to actually insert the Fcc header when sending
+    ;(preferrably we would use message-header-setup-up, but notmuch-reply 
+    ; munges headers after that is run, so it won't work for replies within
+    ; notmuch)
+    (add-hook 'message-send-hook 'notmuch-fcc-header-setup))))
+
+(defun notmuch-fcc-header-setup ()
+  "Can be added to message-send-hook and will set the FCC header
+      based on the values of notmuch-fcc-directories (see the
+      variable customization there for examples). It uses the
+      first entry as default fallback if no From address
+      matches."
+  ; only do something if notmuch-fcc-dirs is set
+  (if notmuch-fcc-dirs
+   (let ((subdir (cdr (assoc (message-fetch-field "from") notmuch-fcc-dirs))))
+     (if (eq subdir nil) (setq subdir (car (car notmuch-fcc-dirs))))
+     (message-remove-header "Fcc")
+     (message-add-header (concat "Fcc: " message-directory subdir)))))
+
 (defun notmuch-maildir-fcc-host-fixer (hostname)
   (replace-regexp-in-string "/\\|:"
 			    '(lambda (s)
@@ -120,4 +147,5 @@ return t if successful, and nil otherwise."
 	  (delete-file (concat destdir "/tmp/" msg-id))))
       t)))
 
+(notmuch-fcc-initialization)
 (provide 'notmuch-maildir-fcc)
-- 
1.7.0.4

  parent reply	other threads:[~2010-04-23  9:39 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-21 18:36 Fcc, Maildir, and Emacs message-mode -- a bit of code Jesse Rosenthal
2010-01-27 14:44 ` Jameson Rollins
2010-01-29 13:21   ` Sebastian Spaeth
2010-01-29 14:46     ` Jameson Rollins
2010-01-29 14:54     ` Jesse Rosenthal
2010-04-07 20:04   ` Dirk Hohndel
2010-04-22  9:06 ` Sebastian Spaeth
2010-04-22  9:07   ` [PATCH 1/6] Add elisp file for FCC to maildir solution Sebastian Spaeth
2010-04-22  9:07   ` [PATCH] notmuch.el: Make notmuch-show buffer name first subject, instead of thread-id (supersedes V1--3) Sebastian Spaeth
2010-04-22 13:34     ` Sebastian Spaeth
2010-04-22  9:07   ` [PATCH 2/6] Integrate notmuch-maildir-fcc into notmuch Sebastian Spaeth
2010-04-22  9:07   ` [PATCH 3/6] notmuch-maildir-fcc: rename all jkr/* functions to notmuch-maildir-fcc-* Sebastian Spaeth
2010-04-22  9:07   ` [PATCH 4/6] add documentation example Sebastian Spaeth
2010-04-22  9:07   ` [PATCH 5/6] notmuch-maildir-fcc: use insert-buffer-substring Sebastian Spaeth
2010-04-22  9:07   ` [PATCH 6/6] notmuch-maildir-fcc: replace caddr with (car (cdr (cdr))) Sebastian Spaeth
2010-04-22 23:17   ` Fcc, Maildir, and Emacs message-mode -- a bit of code Dirk Hohndel
2010-04-23  7:13     ` Sebastian Spaeth
2010-04-23 10:08       ` Updated elisp FCC patches (was: Fcc, Maildir, and Emacs message-mode) Sebastian Spaeth
2010-04-23 14:01         ` Dirk Hohndel
2010-04-23 19:01           ` [PATCH 1/4] Add elisp file for FCC to maildir solution Sebastian Spaeth
2010-04-23 19:01           ` [PATCH 2/4] Integrate notmuch-maildir-fcc into notmuch Sebastian Spaeth
2010-04-23 19:01           ` [PATCH 3/4] notmuch-maildir-fcc: elisp syntax fixes Sebastian Spaeth
2010-04-23 19:01           ` [PATCH 4/4] Integrate notmuch-fcc mechansim Sebastian Spaeth
2010-04-23  9:38   ` Sebastian Spaeth [this message]
2010-04-24 23:10     ` [PATCH 7/7] " Dirk Hohndel
2010-04-26  8:23       ` [PATCH v3 1/4] Add elisp file for FCC to maildir solution Sebastian Spaeth
2010-04-26 21:21         ` Carl Worth
2010-04-26  8:23       ` [PATCH v3 2/4] Integrate notmuch-maildir-fcc into notmuch Sebastian Spaeth
2010-04-26  8:23       ` [PATCH v3 3/4] notmuch-maildir-fcc: elisp syntax fixes Sebastian Spaeth
2010-04-26  8:23       ` [PATCH v3 4/4] Integrate notmuch-fcc mechansim Sebastian Spaeth
2010-04-27  0:29         ` [PATCH] emacs: fcc should fail at the right time if it doesn't point to a maildir Jesse Rosenthal
2010-04-27  1:33           ` [PATCH] emacs: add prompt to create maildir for fcc if it does not exist Jesse Rosenthal
2010-04-27  3:08             ` [PATCH] emacs: Ensure that message-directory for Fcc has a trailing slash Jesse Rosenthal
2010-04-27  2:51           ` [PATCH] emacs: fcc should fail at the right time if it doesn't point to a maildir Dirk Hohndel
2010-04-27  6:10           ` Carl Worth

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://notmuchmail.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1272015537-13225-1-git-send-email-Sebastian@SSpaeth.de \
    --to=sebastian@sspaeth.de \
    --cc=notmuch@notmuchmail.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).