From 8ad336dd0b01d9ad3a66f25691f5573231593b34 Mon Sep 17 00:00:00 2001 From: Mark Walters Date: Sat, 11 Jun 2016 00:02:52 +0100 Subject: [PATCH] [PATCH 6/6] emacs: maildir: add the actual insert code --- eb/fd8041fb792f3dca628d197034060ca650c596 | 203 ++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 eb/fd8041fb792f3dca628d197034060ca650c596 diff --git a/eb/fd8041fb792f3dca628d197034060ca650c596 b/eb/fd8041fb792f3dca628d197034060ca650c596 new file mode 100644 index 000000000..9c6f2d911 --- /dev/null +++ b/eb/fd8041fb792f3dca628d197034060ca650c596 @@ -0,0 +1,203 @@ +Return-Path: +X-Original-To: notmuch@notmuchmail.org +Delivered-To: notmuch@notmuchmail.org +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 + -- 2.26.2