mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 04:18:08 +01:00
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:
parent
f35db275c4
commit
d84e927091
3 changed files with 46 additions and 14 deletions
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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 ()
|
||||||
|
|
|
@ -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."
|
||||||
|
|
Loading…
Reference in a new issue