X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=emacs%2Fnotmuch-message.el;h=0164472f7b48e90d7a4ad74c27c390bccb270dc4;hp=301028154734009e409f4b5a9f6a48bfba337cf6;hb=HEAD;hpb=ee1180018ee3c772d7ac769222ff9c6940f3c838 diff --git a/emacs/notmuch-message.el b/emacs/notmuch-message.el index 30102815..0856a2e9 100644 --- a/emacs/notmuch-message.el +++ b/emacs/notmuch-message.el @@ -1,4 +1,4 @@ -;; notmuch-message.el --- message-mode functions specific to notmuch +;;; notmuch-message.el --- message-mode functions specific to notmuch -*- lexical-binding: t -*- ;; ;; Copyright © Jesse Rosenthal ;; @@ -15,37 +15,62 @@ ;; General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License -;; along with Notmuch. If not, see . +;; along with Notmuch. If not, see . ;; ;; Authors: Jesse Rosenthal +;;; Code: + +(require 'cl-lib) +(require 'pcase) +(require 'subr-x) + (require 'message) -(require 'notmuch-mua) +(require 'notmuch-tag) + +(defcustom notmuch-message-replied-tags '("+replied") + "List of tag changes to apply to a message when it has been replied to. -(defcustom notmuch-message-replied-tags '("replied") - "Tags to be automatically added to or removed from a message when it is replied to. -Any tag in the list will be added to a replied message or, -if it is prefaced with a \"-\", removed. +Tags starting with \"+\" (or not starting with either \"+\" or +\"-\") in the list will be added, and tags starting with \"-\" +will be removed from the message being replied to. For example, if you wanted to add a \"replied\" tag and remove -the \"inbox\" and \"todo\", you would set - (\"replied\" \"-inbox\" \"-todo\"\)" - :type 'list +the \"inbox\" and \"todo\" tags, you would set: + (\"+replied\" \"-inbox\" \"-todo\")" + :type '(repeat string) :group 'notmuch-send) -(defun notmuch-message-mark-replied () - ;; get the in-reply-to header and parse it for the message id. - (let ((rep (mail-header-parse-addresses (message-field-value "In-Reply-To")))) - (when (and notmuch-message-replied-tags rep) - ;; add a "+" to any tag that is doesn't already begin with a "+" - ;; or "-" - (let ((tags (mapcar (lambda (str) - (if (not (string-match "^[+-]" str)) - (concat "+" str) - str)) - notmuch-message-replied-tags))) - (apply 'notmuch-tag (notmuch-id-to-query (car (car rep))) tags))))) - -(add-hook 'message-send-hook 'notmuch-message-mark-replied) +(defcustom notmuch-message-forwarded-tags '("+forwarded") + "List of tag changes to apply to a message when it has been forwarded. + +Tags starting with \"+\" (or not starting with either \"+\" or +\"-\") in the list will be added, and tags starting with \"-\" +will be removed from the message being forwarded. + +For example, if you wanted to add a \"forwarded\" tag and remove +the \"inbox\" tag, you would set: + (\"+forwarded\" \"-inbox\")" + :type '(repeat string) + :group 'notmuch-send) + +(defvar-local notmuch-message-queued-tag-changes nil + "List of tag changes to be applied when sending a message. + +A list of queries and tag changes that are to be applied to them +when the message that was composed in the current buffer is being +send. Each item in this list is a list of strings, where the +first is a notmuch query and the rest are the tag changes to be +applied to the matching messages.") + +(defun notmuch-message-apply-queued-tag-changes () + ;; Apply the tag changes queued in the buffer-local variable + ;; notmuch-message-queued-tag-changes. + (pcase-dolist (`(,query . ,tags) notmuch-message-queued-tag-changes) + (notmuch-tag query tags))) + +(add-hook 'message-send-hook 'notmuch-message-apply-queued-tag-changes) (provide 'notmuch-message) + +;;; notmuch-message.el ends here