[PATCH] emacs: use message-dont-reply-to-names when composing replies

Subject: [PATCH] emacs: use message-dont-reply-to-names when composing replies

Date: Sat, 4 Jun 2022 20:38:13 +0100

To: notmuch@notmuchmail.org

Cc: jao

From: jao


notmuch-mua functions for replies now use the built-in customizable
variable message-dont-reply-to-names with the same semantics as
message-mode.

Signed-off-by: jao <jao@gnu.org>
---
 doc/notmuch-emacs.rst               |  9 ++++++++
 emacs/notmuch-mua.el                | 13 ++++++++++++
 test/T454-emacs-dont-reply-names.sh | 33 +++++++++++++++++++++++++++++
 3 files changed, 55 insertions(+)
 create mode 100755 test/T454-emacs-dont-reply-names.sh

diff --git a/doc/notmuch-emacs.rst b/doc/notmuch-emacs.rst
index 78528785..970cd7b7 100644
--- a/doc/notmuch-emacs.rst
+++ b/doc/notmuch-emacs.rst
@@ -493,6 +493,15 @@ Sending Mail
        :code:`compose-mail`.  To use ``notmuch`` for this, customize this
        variable to the symbol :code:`notmuch-user-agent`.
 
+:index:`message-dont-reply-to-names`
+
+       When composing mail replies, Emacs's message mode uses the
+       variable :code:`message-dont-reply-to-names` to exclude
+       recipients matching a given collection of regular expressions
+       or satisfying an arbitrary predicate.  Notmuch's MUA inherits
+       this standard mechanism and will honour your customization of
+       this variable.
+
 Init File
 ---------
 
diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el
index 0ae33127..6f2b9789 100644
--- a/emacs/notmuch-mua.el
+++ b/emacs/notmuch-mua.el
@@ -382,6 +382,18 @@ instead of `message-mode' and SWITCH-FUNCTION is mandatory."
     (erase-buffer)
     (notmuch-message-mode)))
 
+(defun notmuch-mua--remove-dont-reply-to-names ()
+  (when-let ((nr (message-dont-reply-to-names)))
+    (let ((nr-filter (if (functionp nr)
+			 nr
+		       (lambda (mail) (unless (string-match-p nr mail) mail)))))
+      (dolist (header '("To" "Cc"))
+	(when-let ((v (message-fetch-field header)))
+	  (let* ((v (message-tokenize-header v))
+		 (vs (delq nil (mapcar nr-filter v)))
+		 (v (when vs (mapconcat #'string-trim vs ", "))))
+	    (message-replace-header header v)))))))
+
 (defun notmuch-mua-mail (&optional to subject other-headers _continue
 				   switch-function yank-action send-actions
 				   return-action &rest ignored)
@@ -422,6 +434,7 @@ moved to the \"To:\" header."
 	(message-this-is-mail t))
     (message-setup-1 headers yank-action send-actions return-action))
   (notmuch-fcc-header-setup)
+  (notmuch-mua--remove-dont-reply-to-names)
   (message-sort-headers)
   (message-hide-headers)
   (set-buffer-modified-p nil)
diff --git a/test/T454-emacs-dont-reply-names.sh b/test/T454-emacs-dont-reply-names.sh
new file mode 100755
index 00000000..64ae74af
--- /dev/null
+++ b/test/T454-emacs-dont-reply-names.sh
@@ -0,0 +1,33 @@
+#!/usr/bin/env bash
+
+test_description="emacs reply"
+. $(dirname "$0")/test-lib.sh || exit 1
+. $NOTMUCH_SRCDIR/test/test-lib-emacs.sh || exit 1
+
+EXPECTED=$NOTMUCH_SRCDIR/test/emacs-show.expected-output
+
+test_require_emacs
+
+add_email_corpus default
+
+test_begin_subtest "not replying"
+test_emacs '(let ((message-dont-reply-to-names "notmuchmail\\|noreply\\|harvard"))
+	      (notmuch-mua-new-reply
+	        "id:20091117203301.GV3165@dottiness.seas.harvard.edu" nil t)
+	      (test-visible-output "OUTPUT-FULL.raw"))'
+
+notmuch_dir_sanitize < OUTPUT-FULL.raw > OUTPUT-FULL
+head -6 OUTPUT-FULL > OUTPUT
+
+cat <<EOF > EXPECTED
+From: Notmuch Test Suite <test_suite@notmuchmail.org>
+To: Mikhail Gusarov <dottedmag@dottedmag.net>
+Subject: Re: [notmuch] Working with Maildir storage?
+In-Reply-To: <20091117203301.GV3165@dottiness.seas.harvard.edu>
+Fcc: MAIL_DIR/sent
+--text follows this line--
+EOF
+
+test_expect_equal_file EXPECTED OUTPUT
+
+test_done
-- 
2.36.1

_______________________________________________
notmuch mailing list -- notmuch@notmuchmail.org
To unsubscribe send an email to notmuch-leave@notmuchmail.org

Thread: