From d4c4318fb95ba2ed86823389cf82b11a2bcae073 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Mon, 2 Nov 2009 15:48:21 -0800 Subject: [PATCH] notmuch.el: Implement visual feedback for add/remove tags. There's no undo still, but at least you can see what you are doing now. --- TODO | 2 -- notmuch.el | 28 ++++++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/TODO b/TODO index bfdd8bc4..b94d055b 100644 --- a/TODO +++ b/TODO @@ -1,7 +1,5 @@ Add support to format a reply buffer for a particular message. -Add feedback for tag addition/removal to notmuch.el. - Hide thread IDs in notmuch-search mode in notmuch.el. Selectively hide headers and bodies in notmuch-show mode in diff --git a/notmuch.el b/notmuch.el index cedbdb33..73f02963 100644 --- a/notmuch.el +++ b/notmuch.el @@ -112,13 +112,37 @@ (error (buffer-substring beg end)) )))))) +(defun notmuch-search-set-tags (tags) + (save-excursion + (end-of-line) + (re-search-backward "(") + (forward-char) + (let ((beg (point)) + (inhibit-read-only t)) + (re-search-forward ")") + (backward-char) + (let ((end (point))) + (delete-region beg end) + (insert (mapconcat 'identity tags " ")))))) + +(defun notmuch-search-get-tags () + (save-excursion + (end-of-line) + (re-search-backward "(") + (let ((beg (+ (point) 1))) + (re-search-forward ")") + (let ((end (- (point) 1))) + (split-string (buffer-substring beg end)))))) + (defun notmuch-search-add-tag (tag) (interactive "sTag to add: ") - (notmuch-search-call-notmuch-process "tag" (concat "+" tag) (concat "thread:" (notmuch-search-find-thread-id)))) + (notmuch-search-call-notmuch-process "tag" (concat "+" tag) (concat "thread:" (notmuch-search-find-thread-id))) + (notmuch-search-set-tags (delete-dups (sort (cons tag (notmuch-search-get-tags)) 'string<)))) (defun notmuch-search-remove-tag (tag) (interactive "sTag to remove: ") - (notmuch-search-call-notmuch-process "tag" (concat "-" tag) (concat "thread:" (notmuch-search-find-thread-id)))) + (notmuch-search-call-notmuch-process "tag" (concat "-" tag) (concat "thread:" (notmuch-search-find-thread-id))) + (notmuch-search-set-tags (delete tag (notmuch-search-get-tags)))) (defun notmuch-search-archive-thread () (interactive)