notmuch.el: Add commands to add tag, remove tag, and archive (== remove inbox tag)

These have keybindings of '+', '-', and 'a'. The bug they have so
far is lack of visual feedback for their effect, and lack of undo.

(Also the fact that adding or removing a single tag for a thread
takes way too long--but that's as a Xapian issue as discussed here:

	replace_document should make minimal changes to database file
	http://trac.xapian.org/ticket/250
)
This commit is contained in:
Carl Worth 2009-10-31 12:09:06 -07:00
parent c37b1bdf2d
commit c33eed84f2

View file

@ -68,9 +68,12 @@
(defvar notmuch-search-mode-map (defvar notmuch-search-mode-map
(let ((map (make-sparse-keymap))) (let ((map (make-sparse-keymap)))
(define-key map "a" 'notmuch-search-archive-thread)
(define-key map "n" 'next-line) (define-key map "n" 'next-line)
(define-key map "p" 'previous-line) (define-key map "p" 'previous-line)
(define-key map "\r" 'notmuch-search-show-thread) (define-key map "\r" 'notmuch-search-show-thread)
(define-key map "+" 'notmuch-search-add-tag)
(define-key map "-" 'notmuch-search-remove-tag)
map) map)
"Keymap for \"notmuch search\" buffers.") "Keymap for \"notmuch search\" buffers.")
(fset 'notmuch-search-mode-map notmuch-search-mode-map) (fset 'notmuch-search-mode-map notmuch-search-mode-map)
@ -96,11 +99,30 @@
(interactive) (interactive)
(notmuch-show (notmuch-search-find-thread-id))) (notmuch-show (notmuch-search-find-thread-id)))
(defun notmuch-search-call-notmuch-process (&rest args)
(let ((error-buffer (get-buffer-create "*Notmuch errors*")))
(with-current-buffer error-buffer
(erase-buffer))
(if (eq (apply 'call-process "notmuch" nil error-buffer nil args) 0)
(point)
(progn
(with-current-buffer error-buffer
(let ((beg (point-min))
(end (- (point-max) 1)))
(error (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))))
(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))))
(defun notmuch-search-archive-thread () (defun notmuch-search-archive-thread ()
(interactive) (interactive)
(if (eq (call-process "notmuch" nil (get-buffer-create "*Messages*") nil "tag" "-inbox" (concat "thread:" (notmuch-search-find-thread-id))) 0) (notmuch-search-remove-tag "inbox"))
(let ((inhibit-read-only t))
(kill-whole-line))))
(defun notmuch-search (query) (defun notmuch-search (query)
"Run \"notmuch search\" with the given query string and display results." "Run \"notmuch search\" with the given query string and display results."