From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by arlo.cworth.org (Postfix) with ESMTP id 990336DE11B3 for ; Sat, 3 Sep 2016 16:00:07 -0700 (PDT) X-Virus-Scanned: Debian amavisd-new at cworth.org X-Spam-Flag: NO X-Spam-Score: -0.356 X-Spam-Level: X-Spam-Status: No, score=-0.356 tagged_above=-999 required=5 tests=[AWL=0.214, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_PASS=-0.001] autolearn=disabled Received: from arlo.cworth.org ([127.0.0.1]) by localhost (arlo.cworth.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id dKSLof3XTHf7 for ; Sat, 3 Sep 2016 16:00:06 -0700 (PDT) Received: from mail-wm0-f44.google.com (mail-wm0-f44.google.com [74.125.82.44]) by arlo.cworth.org (Postfix) with ESMTPS id 4F3516DE0C66 for ; Sat, 3 Sep 2016 15:59:57 -0700 (PDT) Received: by mail-wm0-f44.google.com with SMTP id 1so81888289wmz.1 for ; Sat, 03 Sep 2016 15:59:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=pM/UYKha8hLfwS0vn1BBKInSyRwFBmdd9DvIVwcav9U=; b=vF5MQKOuH3y+rsQZN/OzRhkNG+p+I95MLuSW33kaIu80xrSrDcCXmy9DRF1u/6deje L7lB1zJe/pN/PRMlGOhF8niVbJYfyJuCdhf9xus/83dhZWVrU1G2iz8YBIh4ZaMkOMan B0LOP+yeCOxsvuTA5lSc+GeVH4n1yseusj2sCHaiwXYUOUuNVZNw452+fRpja5IPIzBh 06wLQfl2btG1V/9fKLx7W+ko+yRAEzDmL669h+29ACwY+06Ot6YuKJtRvxs3h9f4OuqL 0mCUJOSMHNOOGGVKUyr1k2MV2sVLd/BjcGmUstOvLYcOdgGPIEkJg915onpxnx+TxM+x xTjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=pM/UYKha8hLfwS0vn1BBKInSyRwFBmdd9DvIVwcav9U=; b=Ih2DjoZCAvBkjlQ8Ly/z2/W5aNH2qpLuqUCGqaEOtbqyIJRQadBfEe3oah+R5smwrF d1w/zj5JryyBQET/kZGQ6Bgla2xlfD7PpNM5YlTJY/MujgxR6mTT6+4blAEZaqPHVKb6 DDDgU/qGEyd64sBOmkPRBSOh8oZZUTjIU6/79m9HHaTEDptcdHAGzZXP5E4o9ryJ8yMK rqIWTQWS4YVwHSlUq6ghpkmtXb0BHibg5ZEwBuIRScwrJxU+FsxYd1rU8q0orc9nASXT 4klLHOsLfDbIabTLNpK7+c3mEQyAco5BxDjLm/Lvzy7VuWBnumVxd4KfQDXZplBWSplO kK5w== X-Gm-Message-State: AE9vXwNsz7mAkViBiqB58Uyjso1mlGrzTVoeo/HoJLCYBWHnJFRLxH/+9keL5pPkBgWZ0w== X-Received: by 10.28.196.14 with SMTP id u14mr8644858wmf.17.1472943594214; Sat, 03 Sep 2016 15:59:54 -0700 (PDT) Received: from localhost (5751dfa2.skybroadband.com. [87.81.223.162]) by smtp.gmail.com with ESMTPSA id h7sm17854064wjd.17.2016.09.03.15.59.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 03 Sep 2016 15:59:53 -0700 (PDT) From: Mark Walters To: notmuch@notmuchmail.org Subject: [PATCH v2 6/6] emacs: maildir: add the actual insert code Date: Sat, 3 Sep 2016 23:59:43 +0100 Message-Id: <1472943583-4547-7-git-send-email-markwalters1009@gmail.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1472943583-4547-1-git-send-email-markwalters1009@gmail.com> References: <1472943583-4547-1-git-send-email-markwalters1009@gmail.com> X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Sep 2016 23:00:07 -0000 With all the preparation it is now simple to add the actual insert code. Since insert can fail for many reasons we let the user decide interactively deal with it. We modify test-lib.el to set file fcc, so that all the old tests and emacs_fcc_message from test-lib.sh still work --- emacs/notmuch-maildir-fcc.el | 74 ++++++++++++++++++++++++++++++++++++++++++-- test/test-lib.el | 5 +++ 2 files changed, 76 insertions(+), 3 deletions(-) diff --git a/emacs/notmuch-maildir-fcc.el b/emacs/notmuch-maildir-fcc.el index cda51e7..1218c01 100644 --- a/emacs/notmuch-maildir-fcc.el +++ b/emacs/notmuch-maildir-fcc.el @@ -65,6 +65,12 @@ yet when sending a mail." :require 'notmuch-fcc-initialization :group 'notmuch-send) +(defcustom notmuch-maildir-use-notmuch-insert 't + "Should fcc use notmuch insert instead of simple fcc" + :type '(choice :tag "Fcc Method" + (const :tag "Use notmuch insert" t) + (const :tag "Use simple fcc" nil)) + :group 'notmuch-send) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Functions which set up the fcc header in the message buffer. @@ -108,7 +114,18 @@ by notmuch-mua-mail" (error "Invalid `notmuch-fcc-dirs' setting (neither string nor list)"))))) (when subdir - (notmuch-maildir-add-file-style-fcc-header subdir)))) + (if notmuch-maildir-use-notmuch-insert + (notmuch-maildir-add-notmuch-insert-style-fcc-header subdir) + (notmuch-maildir-add-file-style-fcc-header subdir))))) + +(defun notmuch-maildir-add-notmuch-insert-style-fcc-header (subdir) + ;; Notmuch insert does not accept absolute paths, so check the user + ;; really want this header inserted. + + (when (or (not (= (elt subdir 0) ?/)) + (y-or-n-p (format "Fcc header %s is an absolute path and notmuch insert is requested.\nInsert header anyway? " + subdir))) + (message-add-header (concat "Fcc: " subdir)))) (defun notmuch-maildir-add-file-style-fcc-header (subdir) (message-add-header @@ -173,8 +190,59 @@ This is a rearranged version of message mode's message-do-fcc." (kill-buffer (current-buffer))))))) (defun notmuch-fcc-handler (fcc-header) - "Store message with file fcc." - (notmuch-maildir-fcc-file-fcc fcc-header)) + "Store message with notmuch insert or normal (file) fcc. + +If `notmuch-maildir-use-notmuch-insert` is set then store the +message using notmuch insert. Otherwise store the message using +normal fcc." + (if notmuch-maildir-use-notmuch-insert + (notmuch-maildir-fcc-with-notmuch-insert fcc-header) + (notmuch-maildir-fcc-file-fcc fcc-header))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Functions for saving a message using notmuch insert. + +(defun notmuch-maildir-notmuch-insert-current-buffer (folder &optional create tags) + "Use notmuch insert to put the current buffer in the database. + +This inserts the current buffer as a message into the notmuch +database in folder FOLDER. If CREATE is non-nil it will supply +the --create-folder flag to create the folder if necessary. TAGS +should be a list of tag changes to apply to the inserted message." + (let* ((args (append (when create (list "--create-folder")) + (list (concat "--folder=" folder)) + tags))) + (apply 'notmuch-call-notmuch-process + :stdin-string (buffer-string) "insert" args))) + +(defun notmuch-maildir-fcc-with-notmuch-insert (fcc-header &optional create) + "Store message with notmuch insert. + +The fcc-header should be of the form \"folder +tag1 -tag2\" where +folder is the folder (relative to the notmuch mailstore) to store +the message in, and tag1 and tag2 are tag changes to apply to the +stored message. If CREATE is non-nil then create the folder if +necessary." + (let* ((args (split-string-and-unquote fcc-header)) + (folder (car args)) + (tags (cdr args))) + (condition-case nil + (notmuch-maildir-notmuch-insert-current-buffer folder create tags) + ;; Since there are many reasons notmuch insert could fail, e.g., + ;; locked database, non-existent folder (which could be due to a + ;; typo, or just the user want a new folder, let the user decide + ;; how to deal with it. + (error + (let ((response (read-char-choice + "Insert failed: (r)etry, (c)reate folder, (i)gnore, or (e)dit the header? " + '(?r ?c ?i ?e)))) + (case response + (?r (notmuch-maildir-fcc-with-notmuch-insert fcc-header)) + (?c (notmuch-maildir-fcc-with-notmuch-insert fcc-header 't)) + (?i 't) + (?e (notmuch-maildir-fcc-with-notmuch-insert + (read-from-minibuffer "Fcc header: " fcc-header))))))))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Functions for saving a message using file fcc. diff --git a/test/test-lib.el b/test/test-lib.el index 496626f..9946010 100644 --- a/test/test-lib.el +++ b/test/test-lib.el @@ -184,6 +184,11 @@ nothing." (setq notmuch-tag-deleted-formats '((".*" nil))) +;; Also for historical reasons, we set the fcc handler to file not +;; insert. + +(setq notmuch-maildir-use-notmuch-insert nil) + ;; force a common html renderer, to avoid test variations between ;; environments -- 2.1.4