* [PATCH v3] emacs: use message-dont-reply-to-names when composing replies
@ 2022-06-09 2:11 jao
2022-06-16 11:54 ` David Bremner
0 siblings, 1 reply; 2+ messages in thread
From: jao @ 2022-06-09 2:11 UTC (permalink / raw)
To: notmuch; +Cc: 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.
---
This version of the patch addresses stylistic issues according to review
Signed-off-by: jao <jao@gnu.org>
---
doc/notmuch-emacs.rst | 9 ++++
emacs/notmuch-mua.el | 19 ++++++++
test/T454-emacs-dont-reply-names.sh | 76 +++++++++++++++++++++++++++++
3 files changed, 104 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..0f9ef3c2 100644
--- a/emacs/notmuch-mua.el
+++ b/emacs/notmuch-mua.el
@@ -21,7 +21,10 @@
;;; Code:
+(eval-when-compile (require 'subr-x))
+
(require 'message)
+(require 'gmm-utils)
(require 'mm-view)
(require 'format-spec)
@@ -382,6 +385,21 @@ 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 (if (functionp message-dont-reply-to-names)
+ message-dont-reply-to-names
+ (gmm-regexp-concat message-dont-reply-to-names)))
+ (nr-filter
+ (if (functionp nr)
+ (lambda (mail) (and (not (funcall nr mail)) mail))
+ (lambda (mail) (and (not (string-match-p nr mail)) mail)))))
+ (dolist (header '("To" "Cc"))
+ (when-let ((v (message-fetch-field header)))
+ (let* ((tokens (mapcar #'string-trim (message-tokenize-header v)))
+ (good-tokens (delq nil (mapcar nr-filter tokens)))
+ (addr (and good-tokens (mapconcat #'identity good-tokens ", "))))
+ (message-replace-header header addr))))))
+
(defun notmuch-mua-mail (&optional to subject other-headers _continue
switch-function yank-action send-actions
return-action &rest ignored)
@@ -422,6 +440,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..3a770177
--- /dev/null
+++ b/test/T454-emacs-dont-reply-names.sh
@@ -0,0 +1,76 @@
+#!/usr/bin/env bash
+
+test_description="message-dont-reply-to-names in emacs replies"
+. $(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 "regular expression"
+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_begin_subtest "predicate"
+test_emacs '(let ((message-dont-reply-to-names
+ (lambda (m) (string-prefix-p "Mikhail" m))))
+ (notmuch-mua-new-reply
+ "id:20091117203301.GV3165@dottiness.seas.harvard.edu" nil t)
+ (test-visible-output "OUTPUT-FULL-PRED.raw"))'
+
+notmuch_dir_sanitize < OUTPUT-FULL-PRED.raw > OUTPUT-FULL-PRED
+head -7 OUTPUT-FULL-PRED > OUTPUT-PRED
+
+cat <<EOF > EXPECTED-PRED
+From: Notmuch Test Suite <test_suite@notmuchmail.org>
+To: Lars Kellogg-Stedman <lars@seas.harvard.edu>
+Cc: notmuch@notmuchmail.org
+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-PRED OUTPUT-PRED
+
+test_begin_subtest "nil value"
+test_emacs '(let ((message-dont-reply-to-names nil))
+ (notmuch-mua-new-reply
+ "id:20091117203301.GV3165@dottiness.seas.harvard.edu" nil t)
+ (test-visible-output "OUTPUT-FULL-NIL.raw"))'
+
+notmuch_dir_sanitize < OUTPUT-FULL-NIL.raw > OUTPUT-FULL-NIL
+head -7 OUTPUT-FULL-NIL > OUTPUT-NIL
+
+cat <<EOF > EXPECTED-NIL
+From: Notmuch Test Suite <test_suite@notmuchmail.org>
+To: Lars Kellogg-Stedman <lars@seas.harvard.edu>, Mikhail Gusarov <dottedmag@dottedmag.net>
+Cc: notmuch@notmuchmail.org
+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-NIL OUTPUT-NIL
+
+test_done
--
2.36.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v3] emacs: use message-dont-reply-to-names when composing replies
2022-06-09 2:11 [PATCH v3] emacs: use message-dont-reply-to-names when composing replies jao
@ 2022-06-16 11:54 ` David Bremner
0 siblings, 0 replies; 2+ messages in thread
From: David Bremner @ 2022-06-16 11:54 UTC (permalink / raw)
To: jao, notmuch; +Cc: jao
jao <jao@gnu.org> writes:
> notmuch-mua functions for replies now use the built-in customizable
> variable message-dont-reply-to-names with the same semantics as
> message-mode.
applied to master
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-06-16 11:54 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-09 2:11 [PATCH v3] emacs: use message-dont-reply-to-names when composing replies jao
2022-06-16 11:54 ` David Bremner
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).