* [PATCH v2 1/6] emacs: add helper for tag change list manipulation
2012-09-06 15:32 [PATCH v2 0/6] emacs: customization for tag changes on archive Jani Nikula
@ 2012-09-06 15:32 ` Jani Nikula
2012-09-06 15:32 ` [PATCH v2 2/6] emacs: fix notmuch-message-replied-tags defcustom type Jani Nikula
` (6 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Jani Nikula @ 2012-09-06 15:32 UTC (permalink / raw)
To: notmuch; +Cc: Tomi Ollila
Add a helper to create (and optionally reverse) a list of tag changes.
---
emacs/notmuch-tag.el | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/emacs/notmuch-tag.el b/emacs/notmuch-tag.el
index 0c0fc87..4fce3a9 100644
--- a/emacs/notmuch-tag.el
+++ b/emacs/notmuch-tag.el
@@ -140,6 +140,21 @@ notmuch-after-tag-hook will be run."
;; in all cases we return tag-changes as a list
tag-changes)
+(defun notmuch-tag-change-list (tags &optional reverse)
+ "Convert TAGS into a list of tag changes.
+
+Add a \"+\" prefix to any tag in TAGS list that doesn't already
+begin with a \"+\" or a \"-\". If REVERSE is non-nil, replace all
+\"+\" prefixes with \"-\" and vice versa in the result."
+ (mapcar (lambda (str)
+ (let ((s (if (string-match "^[+-]" str) str (concat "+" str))))
+ (if reverse
+ (concat (if (= (string-to-char s) ?-) "+" "-")
+ (substring s 1))
+ s)))
+ tags))
+
+
;;
(provide 'notmuch-tag)
--
1.7.9.5
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 2/6] emacs: fix notmuch-message-replied-tags defcustom type
2012-09-06 15:32 [PATCH v2 0/6] emacs: customization for tag changes on archive Jani Nikula
2012-09-06 15:32 ` [PATCH v2 1/6] emacs: add helper for tag change list manipulation Jani Nikula
@ 2012-09-06 15:32 ` Jani Nikula
2012-09-06 15:32 ` [PATCH v2 3/6] emacs: use new tag change helper to mark messages as replied Jani Nikula
` (5 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Jani Nikula @ 2012-09-06 15:32 UTC (permalink / raw)
To: notmuch; +Cc: Tomi Ollila
---
emacs/notmuch-message.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/emacs/notmuch-message.el b/emacs/notmuch-message.el
index d3738bf..3798046 100644
--- a/emacs/notmuch-message.el
+++ b/emacs/notmuch-message.el
@@ -31,7 +31,7 @@ if it is prefaced with a \"-\", removed.
For example, if you wanted to add a \"replied\" tag and remove
the \"inbox\" and \"todo\", you would set
(\"replied\" \"-inbox\" \"-todo\"\)"
- :type 'list
+ :type '(repeat string)
:group 'notmuch-send)
(defun notmuch-message-mark-replied ()
--
1.7.9.5
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 3/6] emacs: use new tag change helper to mark messages as replied
2012-09-06 15:32 [PATCH v2 0/6] emacs: customization for tag changes on archive Jani Nikula
2012-09-06 15:32 ` [PATCH v2 1/6] emacs: add helper for tag change list manipulation Jani Nikula
2012-09-06 15:32 ` [PATCH v2 2/6] emacs: fix notmuch-message-replied-tags defcustom type Jani Nikula
@ 2012-09-06 15:32 ` Jani Nikula
2012-09-06 15:32 ` [PATCH v2 4/6] emacs: add support for custom tag changes on message/thread archive Jani Nikula
` (4 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Jani Nikula @ 2012-09-06 15:32 UTC (permalink / raw)
To: notmuch; +Cc: Tomi Ollila
Clarify documentation while at it.
---
emacs/notmuch-message.el | 24 ++++++++++--------------
1 file changed, 10 insertions(+), 14 deletions(-)
diff --git a/emacs/notmuch-message.el b/emacs/notmuch-message.el
index 3798046..4dc4883 100644
--- a/emacs/notmuch-message.el
+++ b/emacs/notmuch-message.el
@@ -23,14 +23,16 @@
(require 'notmuch-tag)
(require 'notmuch-mua)
-(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.
+(defcustom notmuch-message-replied-tags '("+replied")
+ "List of tag changes to apply to a message when it has been replied to.
+
+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\"\)"
+the \"inbox\" and \"todo\" tags, you would set:
+ (\"+replied\" \"-inbox\" \"-todo\"\)"
:type '(repeat string)
:group 'notmuch-send)
@@ -38,14 +40,8 @@ the \"inbox\" and \"todo\", you would set
;; 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)))
- (funcall 'notmuch-tag (notmuch-id-to-query (car (car rep))) tags)))))
+ (funcall 'notmuch-tag (notmuch-id-to-query (car (car rep)))
+ (notmuch-tag-change-list notmuch-message-replied-tags)))))
(add-hook 'message-send-hook 'notmuch-message-mark-replied)
--
1.7.9.5
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 4/6] emacs: add support for custom tag changes on message/thread archive
2012-09-06 15:32 [PATCH v2 0/6] emacs: customization for tag changes on archive Jani Nikula
` (2 preceding siblings ...)
2012-09-06 15:32 ` [PATCH v2 3/6] emacs: use new tag change helper to mark messages as replied Jani Nikula
@ 2012-09-06 15:32 ` Jani Nikula
2012-09-06 15:32 ` [PATCH v2 5/6] emacs: add support for reversing notmuch-search-archive-thread tag changes Jani Nikula
` (3 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Jani Nikula @ 2012-09-06 15:32 UTC (permalink / raw)
To: notmuch; +Cc: Tomi Ollila
Add support for customization of the tag changes that are applied when
a message or a thread is archived. Instead of hard-coded removal of
the "inbox" tag, the user can now specify a list of tag changes to
perform.
---
emacs/notmuch-lib.el | 14 ++++++++++++++
emacs/notmuch-show.el | 29 +++++++++++++++++------------
emacs/notmuch.el | 12 ++++++++++--
3 files changed, 41 insertions(+), 14 deletions(-)
diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
index 900235b..20d990d 100644
--- a/emacs/notmuch-lib.el
+++ b/emacs/notmuch-lib.el
@@ -82,6 +82,20 @@
:type '(alist :key-type string :value-type string)
:group 'notmuch-hello)
+(defcustom notmuch-archive-tags '("-inbox")
+ "List of tag changes to apply to a message or a thread when it is archived.
+
+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 or thread being archived.
+
+For example, if you wanted to remove an \"inbox\" tag and add an
+\"archived\" tag, you would set:
+ (\"-inbox\" \"+archived\")"
+ :type '(repeat string)
+ :group 'notmuch-search
+ :group 'notmuch-show)
+
(defvar notmuch-folders nil
"Deprecated name for what is now known as `notmuch-saved-searches'.")
diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
index ce5ea6f..e701aec 100644
--- a/emacs/notmuch-show.el
+++ b/emacs/notmuch-show.el
@@ -1748,18 +1748,20 @@ argument, hide all of the messages."
(defun notmuch-show-archive-thread (&optional unarchive)
"Archive each message in thread.
-Archive each message currently shown by removing the \"inbox\"
-tag from each. If a prefix argument is given, the messages will
-be \"unarchived\" (ie. the \"inbox\" tag will be added instead of
-removed).
+Archive each message currently shown by applying the tag changes
+in `notmuch-archive-tags' to each (remove the \"inbox\" tag by
+default). If a prefix argument is given, the messages will be
+\"unarchived\", i.e. the tag changes in `notmuch-archive-tags'
+will be reversed.
Note: This command is safe from any race condition of new messages
being delivered to the same thread. It does not archive the
entire thread, but only the messages shown in the current
buffer."
(interactive "P")
- (let ((op (if unarchive "+" "-")))
- (notmuch-show-tag-all (concat op "inbox"))))
+ (when notmuch-archive-tags
+ (notmuch-show-tag-all
+ (notmuch-tag-change-list notmuch-archive-tags unarchive))))
(defun notmuch-show-archive-thread-then-next ()
"Archive all messages in the current buffer, then show next thread from search."
@@ -1774,14 +1776,17 @@ buffer."
(notmuch-show-next-thread))
(defun notmuch-show-archive-message (&optional unarchive)
- "Archive the current message (remove \"inbox\" tag).
+ "Archive the current message.
-If a prefix argument is given, the message will be
-\"unarchived\" (ie. the \"inbox\" tag will be added instead of
-removed)."
+Archive the current message by applying the tag changes in
+`notmuch-archive-tags' to it (remove the \"inbox\" tag by
+default). If a prefix argument is given, the message will be
+\"unarchived\", i.e. the tag changes in `notmuch-archive-tags'
+will be reversed."
(interactive "P")
- (let ((op (if unarchive "+" "-")))
- (notmuch-show-tag-message (concat op "inbox"))))
+ (when notmuch-archive-tags
+ (apply 'notmuch-show-tag-message
+ (notmuch-tag-change-list notmuch-archive-tags unarchive))))
(defun notmuch-show-archive-message-then-next-or-exit ()
"Archive the current message, then show the next open message in the current thread.
diff --git a/emacs/notmuch.el b/emacs/notmuch.el
index 1c43d3e..64caa3e 100644
--- a/emacs/notmuch.el
+++ b/emacs/notmuch.el
@@ -594,11 +594,19 @@ See `notmuch-tag' for information on the format of TAG-CHANGES."
(notmuch-search-tag "-"))
(defun notmuch-search-archive-thread ()
- "Archive the currently selected thread (remove its \"inbox\" tag).
+ "Archive the currently selected thread.
+
+Archive each message in the currently selected thread by applying
+the tag changes in `notmuch-archive-tags' to each (remove the
+\"inbox\" tag by default). If a prefix argument is given, the
+messages will be \"unarchived\" (i.e. the tag changes in
+`notmuch-archive-tags' will be reversed).
This function advances the next thread when finished."
(interactive)
- (notmuch-search-tag '("-inbox"))
+ (when notmuch-archive-tags
+ (notmuch-search-tag
+ (notmuch-tag-change-list notmuch-archive-tags)))
(notmuch-search-next-thread))
(defun notmuch-search-update-result (result &optional pos)
--
1.7.9.5
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 5/6] emacs: add support for reversing notmuch-search-archive-thread tag changes
2012-09-06 15:32 [PATCH v2 0/6] emacs: customization for tag changes on archive Jani Nikula
` (3 preceding siblings ...)
2012-09-06 15:32 ` [PATCH v2 4/6] emacs: add support for custom tag changes on message/thread archive Jani Nikula
@ 2012-09-06 15:32 ` Jani Nikula
2012-09-06 15:32 ` [PATCH v2 6/6] emacs: add support for reversing notmuch-show-mark-read " Jani Nikula
` (2 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Jani Nikula @ 2012-09-06 15:32 UTC (permalink / raw)
To: notmuch; +Cc: Tomi Ollila
Since archiving a thread can now be a user customized set of tag
changes, make reversing this easier. Allow a prefix argument to
notmuch-search-archive-thread to reverse the archiving, similar to the
unarchiving in notmuch-show-archive-message.
---
emacs/notmuch.el | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/emacs/notmuch.el b/emacs/notmuch.el
index 64caa3e..a8a85ce 100644
--- a/emacs/notmuch.el
+++ b/emacs/notmuch.el
@@ -593,7 +593,7 @@ See `notmuch-tag' for information on the format of TAG-CHANGES."
(interactive)
(notmuch-search-tag "-"))
-(defun notmuch-search-archive-thread ()
+(defun notmuch-search-archive-thread (&optional unarchive)
"Archive the currently selected thread.
Archive each message in the currently selected thread by applying
@@ -603,10 +603,10 @@ messages will be \"unarchived\" (i.e. the tag changes in
`notmuch-archive-tags' will be reversed).
This function advances the next thread when finished."
- (interactive)
+ (interactive "P")
(when notmuch-archive-tags
(notmuch-search-tag
- (notmuch-tag-change-list notmuch-archive-tags)))
+ (notmuch-tag-change-list notmuch-archive-tags unarchive)))
(notmuch-search-next-thread))
(defun notmuch-search-update-result (result &optional pos)
--
1.7.9.5
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 6/6] emacs: add support for reversing notmuch-show-mark-read tag changes
2012-09-06 15:32 [PATCH v2 0/6] emacs: customization for tag changes on archive Jani Nikula
` (4 preceding siblings ...)
2012-09-06 15:32 ` [PATCH v2 5/6] emacs: add support for reversing notmuch-search-archive-thread tag changes Jani Nikula
@ 2012-09-06 15:32 ` Jani Nikula
2012-09-07 7:27 ` [PATCH v2 0/6] emacs: customization for tag changes on archive Tomi Ollila
2012-09-19 11:14 ` David Bremner
7 siblings, 0 replies; 9+ messages in thread
From: Jani Nikula @ 2012-09-06 15:32 UTC (permalink / raw)
To: notmuch; +Cc: Tomi Ollila
Since marking a message as read can now be a user customized set of
tag changes, make reversing this easier. Allow a prefix argument to
notmuch-show-mark-read to reverse the marking as read, similar to the
unarchiving in notmuch-show-archive-message.
While at it, update the relevant documentation to match that of other
automatic tagging (i.e. archive and reply).
---
emacs/notmuch-show.el | 25 ++++++++++++++++++++-----
1 file changed, 20 insertions(+), 5 deletions(-)
diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
index e701aec..1c1cf9c 100644
--- a/emacs/notmuch-show.el
+++ b/emacs/notmuch-show.el
@@ -184,8 +184,15 @@ provided with an MLA argument nor `completing-read' input."
:group 'notmuch-show)
(defcustom notmuch-show-mark-read-tags '("-unread")
- "List of tags to apply when message is read, ie. shown in notmuch-show
-buffer."
+ "List of tag changes to apply to a message when it is marked as read.
+
+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 marked as read.
+
+For example, if you wanted to remove an \"unread\" tag and add a
+\"read\" tag (which would make little sense), you would set:
+ (\"-unread\" \"+read\")"
:type '(repeat string)
:group 'notmuch-show)
@@ -1390,10 +1397,18 @@ current thread."
"Are the headers of the current message visible?"
(notmuch-show-get-prop :headers-visible))
-(defun notmuch-show-mark-read ()
- "Apply `notmuch-show-mark-read-tags' to the message."
+(defun notmuch-show-mark-read (&optional unread)
+ "Mark the current message as read.
+
+Mark the current message as read by applying the tag changes in
+`notmuch-show-mark-read-tags' to it (remove the \"unread\" tag by
+default). If a prefix argument is given, the message will be
+marked as unread, i.e. the tag changes in
+`notmuch-show-mark-read-tags' will be reversed."
+ (interactive "P")
(when notmuch-show-mark-read-tags
- (apply 'notmuch-show-tag-message notmuch-show-mark-read-tags)))
+ (apply 'notmuch-show-tag-message
+ (notmuch-tag-change-list notmuch-show-mark-read-tags unread))))
;; Functions for getting attributes of several messages in the current
;; thread.
--
1.7.9.5
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v2 0/6] emacs: customization for tag changes on archive
2012-09-06 15:32 [PATCH v2 0/6] emacs: customization for tag changes on archive Jani Nikula
` (5 preceding siblings ...)
2012-09-06 15:32 ` [PATCH v2 6/6] emacs: add support for reversing notmuch-show-mark-read " Jani Nikula
@ 2012-09-07 7:27 ` Tomi Ollila
2012-09-19 11:14 ` David Bremner
7 siblings, 0 replies; 9+ messages in thread
From: Tomi Ollila @ 2012-09-07 7:27 UTC (permalink / raw)
To: Jani Nikula, notmuch
On Thu, Sep 06 2012, Jani Nikula <jani@nikula.org> wrote:
> Hi all, this is v2 of [1], the only change being Michal's suggestion [2] for
> patch 1/6.
>
> [1] id:"cover.1346614915.git.jani@nikula.org"
> [2] id:"xa1tipbvwdb0.fsf@mina86.com"
>
> BR,
> Jani.
LGTM
Tomi
>
>
> Jani Nikula (6):
> emacs: add helper for tag change list manipulation
> emacs: fix notmuch-message-replied-tags defcustom type
> emacs: use new tag change helper to mark messages as replied
> emacs: add support for custom tag changes on message/thread archive
> emacs: add support for reversing notmuch-search-archive-thread tag
> changes
> emacs: add support for reversing notmuch-show-mark-read tag changes
>
> emacs/notmuch-lib.el | 14 ++++++++++++
> emacs/notmuch-message.el | 26 ++++++++++------------
> emacs/notmuch-show.el | 54 +++++++++++++++++++++++++++++++---------------
> emacs/notmuch-tag.el | 15 +++++++++++++
> emacs/notmuch.el | 16 ++++++++++----
> 5 files changed, 89 insertions(+), 36 deletions(-)
>
> --
> 1.7.9.5
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 0/6] emacs: customization for tag changes on archive
2012-09-06 15:32 [PATCH v2 0/6] emacs: customization for tag changes on archive Jani Nikula
` (6 preceding siblings ...)
2012-09-07 7:27 ` [PATCH v2 0/6] emacs: customization for tag changes on archive Tomi Ollila
@ 2012-09-19 11:14 ` David Bremner
7 siblings, 0 replies; 9+ messages in thread
From: David Bremner @ 2012-09-19 11:14 UTC (permalink / raw)
To: Jani Nikula, notmuch
Jani Nikula <jani@nikula.org> writes:
> Hi all, this is v2 of [1], the only change being Michal's suggestion [2] for
> patch 1/6.
>
> [1] id:"cover.1346614915.git.jani@nikula.org"
> [2] id:"xa1tipbvwdb0.fsf@mina86.com"
>
Pushed,
d
^ permalink raw reply [flat|nested] 9+ messages in thread