emacs: add notmuch-before- and notmuch-after-tag-hook

This patch adds hooks that are run before/after messages are tagged
From the emacs interface.  In order to implement this and to avoid
having hooks parse all the arguments to the notmuch binary again, I
created a `notmuch-tag' function that other modules should use instead
of running (notmuch-call-notmuch-process "tag" ...) directly.
This commit is contained in:
Daniel Schoepe 2011-05-15 17:48:58 +02:00 committed by Carl Worth
parent f35db275c4
commit d84e927091
3 changed files with 46 additions and 14 deletions

View file

@ -44,8 +44,7 @@ the \"inbox\" and \"todo\", you would set
(concat "+" str) (concat "+" str)
str)) str))
notmuch-message-replied-tags))) notmuch-message-replied-tags)))
(apply 'notmuch-call-notmuch-process "tag" (apply 'notmuch-tag (concat "id:" (car (car rep))) tags)))))
(append tags (list (concat "id:" (car (car rep)))) nil))))))
(add-hook 'message-send-hook 'notmuch-message-mark-replied) (add-hook 'message-send-hook 'notmuch-message-mark-replied)

View file

@ -1218,10 +1218,8 @@ the result."
(new-tags (notmuch-show-add-tags-worker current-tags toadd))) (new-tags (notmuch-show-add-tags-worker current-tags toadd)))
(unless (equal current-tags new-tags) (unless (equal current-tags new-tags)
(apply 'notmuch-call-notmuch-process (apply 'notmuch-tag (notmuch-show-get-message-id)
(append (cons "tag"
(mapcar (lambda (s) (concat "+" s)) toadd)) (mapcar (lambda (s) (concat "+" s)) toadd))
(cons (notmuch-show-get-message-id) nil)))
(notmuch-show-set-tags new-tags)))) (notmuch-show-set-tags new-tags))))
(defun notmuch-show-remove-tag (&rest toremove) (defun notmuch-show-remove-tag (&rest toremove)
@ -1234,10 +1232,8 @@ the result."
(new-tags (notmuch-show-del-tags-worker current-tags toremove))) (new-tags (notmuch-show-del-tags-worker current-tags toremove)))
(unless (equal current-tags new-tags) (unless (equal current-tags new-tags)
(apply 'notmuch-call-notmuch-process (apply 'notmuch-tag (notmuch-show-get-message-id)
(append (cons "tag"
(mapcar (lambda (s) (concat "-" s)) toremove)) (mapcar (lambda (s) (concat "-" s)) toremove))
(cons (notmuch-show-get-message-id) nil)))
(notmuch-show-set-tags new-tags)))) (notmuch-show-set-tags new-tags))))
(defun notmuch-show-toggle-headers () (defun notmuch-show-toggle-headers ()

View file

@ -459,6 +459,44 @@ and will also appear in a buffer named \"*Notmuch errors*\"."
(error (buffer-substring beg end)) (error (buffer-substring beg end))
)))))) ))))))
(defun notmuch-tag (query &rest tags)
"Add/remove tags in TAGS to messages matching QUERY.
TAGS should be a list of strings of the form \"+TAG\" or \"-TAG\" and
QUERY should be a string containing the search-query.
Note: Other code should always use this function alter tags of
messages instead of running (notmuch-call-notmuch-process \"tag\" ..)
directly, so that hooks specified in notmuch-before-tag-hook and
notmuch-after-tag-hook will be run."
(run-hooks 'notmuch-before-tag-hook)
(apply 'notmuch-call-notmuch-process
(append (list "tag") tags (list "--" query)))
(run-hooks 'notmuch-after-tag-hook))
(defcustom notmuch-before-tag-hook nil
"Hooks that are run before tags of a message are modified.
'tags' will contain the tags that are about to be added or removed as
a list of strings of the form \"+TAG\" or \"-TAG\".
'query' will be a string containing the search query that determines
the messages that are about to be tagged"
:type 'hook
:options '(hl-line-mode)
:group 'notmuch)
(defcustom notmuch-after-tag-hook nil
"Hooks that are run before tags of a message are modified.
'tags' will contain the tags that were added or removed as
a list of strings of the form \"+TAG\" or \"-TAG\".
'query' will be a string containing the search query that determines
the messages that were tagged"
:type 'hook
:options '(hl-line-mode)
:group 'notmuch)
(defun notmuch-search-set-tags (tags) (defun notmuch-search-set-tags (tags)
(save-excursion (save-excursion
(end-of-line) (end-of-line)
@ -498,7 +536,7 @@ and will also appear in a buffer named \"*Notmuch errors*\"."
(defun notmuch-search-add-tag-region (tag beg end) (defun notmuch-search-add-tag-region (tag beg end)
(let ((search-id-string (mapconcat 'identity (notmuch-search-find-thread-id-region beg end) " or "))) (let ((search-id-string (mapconcat 'identity (notmuch-search-find-thread-id-region beg end) " or ")))
(notmuch-call-notmuch-process "tag" (concat "+" tag) search-id-string) (notmuch-tag search-id-string (concat "+" tag))
(save-excursion (save-excursion
(let ((last-line (line-number-at-pos end)) (let ((last-line (line-number-at-pos end))
(max-line (- (line-number-at-pos (point-max)) 2))) (max-line (- (line-number-at-pos (point-max)) 2)))
@ -512,7 +550,7 @@ and will also appear in a buffer named \"*Notmuch errors*\"."
(defun notmuch-search-remove-tag-region (tag beg end) (defun notmuch-search-remove-tag-region (tag beg end)
(let ((search-id-string (mapconcat 'identity (notmuch-search-find-thread-id-region beg end) " or "))) (let ((search-id-string (mapconcat 'identity (notmuch-search-find-thread-id-region beg end) " or ")))
(notmuch-call-notmuch-process "tag" (concat "-" tag) search-id-string) (notmuch-tag search-id-string (concat "-" tag))
(save-excursion (save-excursion
(let ((last-line (line-number-at-pos end)) (let ((last-line (line-number-at-pos end))
(max-line (- (line-number-at-pos (point-max)) 2))) (max-line (- (line-number-at-pos (point-max)) 2)))
@ -809,8 +847,7 @@ characters as well as `_.+-'.
(unless (string-match-p "^[-+][-+_.[:word:]]+$" (car words)) (unless (string-match-p "^[-+][-+_.[:word:]]+$" (car words))
(error "Action must be of the form `+thistag -that_tag'")) (error "Action must be of the form `+thistag -that_tag'"))
(setq words (cdr words)))) (setq words (cdr words))))
(apply 'notmuch-call-notmuch-process "tag" (apply 'notmuch-tag notmuch-search-query-string action-split)))
(append action-split (list notmuch-search-query-string) nil))))
(defun notmuch-search-buffer-title (query) (defun notmuch-search-buffer-title (query)
"Returns the title for a buffer with notmuch search results." "Returns the title for a buffer with notmuch search results."