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 598816DE0317 for ; Fri, 10 Jun 2016 16:04:28 -0700 (PDT) X-Virus-Scanned: Debian amavisd-new at cworth.org X-Spam-Flag: NO X-Spam-Score: -0.338 X-Spam-Level: X-Spam-Status: No, score=-0.338 tagged_above=-999 required=5 tests=[AWL=0.232, 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 Qxp3W1hToNeb for ; Fri, 10 Jun 2016 16:04:20 -0700 (PDT) Received: from mail-wm0-f66.google.com (mail-wm0-f66.google.com [74.125.82.66]) by arlo.cworth.org (Postfix) with ESMTPS id 3345B6DE0318 for ; Fri, 10 Jun 2016 16:03:13 -0700 (PDT) Received: by mail-wm0-f66.google.com with SMTP id k184so1702398wme.2 for ; Fri, 10 Jun 2016 16:03:13 -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=0t6RLAXXMYxS1mMewpk/jgqFS1PUEdeWY4LIYuwdcBo=; b=bZhbzPtU9pvvfbEAyI5uakjJCQGDTTtc4To2kC26Cj/N07MzFBGZXqVvmxpd8VIBKR NRijd6jQGSQ0pctUm2VKSpHyq35oHiodbgqar0BZkn4cycP4YEMRC8pUF+vBUyDCu4tF mv9YZKiLQOELBSdRSGDu1wFTrdDbncskg6ObqMBj/O2cag/dAkHjaNveaNzBqKOvzP+T D3t3SOqfQQZUYoZRl2C3AmrhJKzBd0hlVE7hIBf+KNejiQNtH4NyqnaGkaQyPHh2Kt+G 3qH4nCKY/GKpznng4ddsslmOOe/3gCV6GohMDIZr1zrIbwqf0Lko1uiFN/QzyF6Doj5X LF6w== 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=0t6RLAXXMYxS1mMewpk/jgqFS1PUEdeWY4LIYuwdcBo=; b=K+v1ovbOxziKreE00fhzI0Zhqwkg3rAHMcPIhcpmY53ACid/9ZbV0qOyHQW1zkDRYd BWZxcvm5aD85AJLh8mDj4JsqDtzP+AREE5AMF+qDhIQ/Rbx+6xCZirdAF08Ns4idCeUC eSqWPELSvJdeGsGZr0TxSx59vI9pdG1smQk8AZun1z2p4Pc9WILaUgEqoD+3wF3/vN3X 2hS/V3oH2Wt2Nx574rCFcOUnrVCQuwr/uTUEjarus2oeD1vMYPpEfuQP5n6Gmr7do0dJ OiHetjKPF32U/MoKoK4VKE2Ao0ftQ3nFA5EnYptPI6R3T06cmfZ4PaxappdMNUhb6rKl mEgQ== X-Gm-Message-State: ALyK8tL4DLlblpr/N70w4RE3HmoJd6GwINzvoexFOkEz6ufYVwisfex3wGJ2sb2NVOhx4g== X-Received: by 10.194.162.168 with SMTP id yb8mr4623834wjb.32.1465599791798; Fri, 10 Jun 2016 16:03:11 -0700 (PDT) Received: from localhost (5751dfa2.skybroadband.com. [87.81.223.162]) by smtp.gmail.com with ESMTPSA id j2sm6952404wjz.15.2016.06.10.16.03.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 10 Jun 2016 16:03:11 -0700 (PDT) From: Mark Walters To: notmuch@notmuchmail.org Subject: [PATCH 6/6] emacs: maildir: add the actual insert code Date: Sat, 11 Jun 2016 00:02:52 +0100 Message-Id: <1465599772-10297-7-git-send-email-markwalters1009@gmail.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1465599772-10297-1-git-send-email-markwalters1009@gmail.com> References: <1465599772-10297-1-git-send-email-markwalters1009@gmail.com> X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.20 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: Fri, 10 Jun 2016 23:04:28 -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 fc645c5..db75d0d 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 @@ -176,8 +193,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