(set-buffer-modified-p nil)
(view-buffer (current-buffer) 'kill-buffer-if-not-modified))))
-(defcustom notmuch-search-hook '(hl-line-mode)
+(require 'hl-line)
+
+(defun notmuch-hl-line-mode ()
+ (prog1 (hl-line-mode)
+ (when hl-line-overlay
+ (overlay-put hl-line-overlay 'priority 1))))
+
+(defcustom notmuch-search-hook '(notmuch-hl-line-mode)
"List of functions to call when notmuch displays the search results."
:type 'hook
- :options '(hl-line-mode)
+ :options '(notmuch-hl-line-mode)
:group 'notmuch-search
:group 'notmuch-hooks)
"Return a list of authors for the current region"
(notmuch-search-properties-in-region 'notmuch-search-subject beg end))
-(defun notmuch-search-show-thread (&optional crypto-switch)
+(defun notmuch-search-show-thread ()
"Display the currently selected thread."
- (interactive "P")
+ (interactive)
(let ((thread-id (notmuch-search-find-thread-id))
(subject (notmuch-prettify-subject (notmuch-search-find-subject))))
(if (> (length thread-id) 0)
(current-buffer)
notmuch-search-query-string
;; Name the buffer based on the subject.
- (concat "*" (truncate-string-to-width subject 30 nil nil t) "*")
- crypto-switch)
+ (concat "*" (truncate-string-to-width subject 30 nil nil t) "*"))
(message "End of search results."))))
(defun notmuch-search-reply-to-thread (&optional prompt-for-sender)
(error (buffer-substring beg end))
))))))
-(defun notmuch-tag (query &rest tags)
- "Add/remove tags in TAGS to messages matching QUERY.
+(defun notmuch-tag (query &rest tag-changes)
+ "Add/remove tags in TAG-CHANGES 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.
+TAG-CHANGES 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."
;; Perform some validation
- (mapc (lambda (tag)
- (unless (string-match-p "^[-+]\\S-+$" tag)
+ (mapc (lambda (tag-change)
+ (unless (string-match-p "^[-+]\\S-+$" tag-change)
(error "Tag must be of the form `+this_tag' or `-that_tag'")))
- tags)
- (unless (null tags)
+ tag-changes)
+ (unless (null tag-changes)
(run-hooks 'notmuch-before-tag-hook)
(apply 'notmuch-call-notmuch-process "tag"
- (append tags (list "--" query)))
+ (append tag-changes (list "--" query)))
(run-hooks 'notmuch-after-tag-hook)))
(defcustom notmuch-before-tag-hook nil
the messages that are about to be tagged"
:type 'hook
- :options '(hl-line-mode)
+ :options '(notmuch-hl-line-mode)
:group 'notmuch-hooks)
(defcustom notmuch-after-tag-hook nil
'query' will be a string containing the search query that determines
the messages that were tagged"
:type 'hook
- :options '(hl-line-mode)
+ :options '(notmuch-hl-line-mode)
:group 'notmuch-hooks)
(defun notmuch-search-set-tags (tags)
(forward-line 1))
output)))
-(defun notmuch-search-tag-thread (&rest tags)
+(defun notmuch-search-tag-thread (&rest tag-changes)
"Change tags for the currently selected thread.
See `notmuch-search-tag-region' for details."
- (apply 'notmuch-search-tag-region (point) (point) tags))
+ (apply 'notmuch-search-tag-region (point) (point) tag-changes))
-(defun notmuch-search-tag-region (beg end &rest tags)
+(defun notmuch-search-tag-region (beg end &rest tag-changes)
"Change tags for threads in the given region.
TAGS is a list of tag operations for `notmuch-tag'. The tags are
added or removed for all threads in the region from BEG to END."
(let ((search-string (notmuch-search-find-thread-id-region-search beg end)))
- (apply 'notmuch-tag search-string tags)
+ (apply 'notmuch-tag search-string tag-changes)
(save-excursion
(let ((last-line (line-number-at-pos end))
(max-line (- (line-number-at-pos (point-max)) 2)))
(goto-char beg)
(while (<= (line-number-at-pos) (min last-line max-line))
(notmuch-search-set-tags
- (notmuch-update-tags (notmuch-search-get-tags) tags))
+ (notmuch-update-tags (notmuch-search-get-tags) tag-changes))
(forward-line))))))
(defun notmuch-search-tag (&optional initial-input)
(goto-char (point-min))
(forward-line (1- notmuch-search-target-line))))))))
-(defcustom notmuch-search-line-faces nil
+(defcustom notmuch-search-line-faces '(("unread" :weight bold)
+ ("flagged" :foreground "blue"))
"Tag/face mapping for line highlighting in notmuch-search.
Here is an example of how to color search results based on tags.
(goto-char (point-max))
(if (/= (match-beginning 1) line)
(insert (concat "Error: Unexpected output from notmuch search:\n" (substring string line (match-beginning 1)) "\n")))
- (let ((beg (point)))
- (notmuch-search-show-result date count authors
- (notmuch-prettify-subject subject) tags)
- (notmuch-search-color-line beg (point) tag-list)
- (put-text-property beg (point) 'notmuch-search-thread-id thread-id)
- (put-text-property beg (point) 'notmuch-search-authors authors)
- (put-text-property beg (point) 'notmuch-search-subject subject)
- (when (string= thread-id notmuch-search-target-thread)
- (set 'found-target beg)
- (set 'notmuch-search-target-thread "found")))
+ ;; We currently just throw away excluded matches.
+ (unless (eq (aref count 1) ?0)
+ (let ((beg (point)))
+ (notmuch-search-show-result date count authors
+ (notmuch-prettify-subject subject) tags)
+ (notmuch-search-color-line beg (point) tag-list)
+ (put-text-property beg (point) 'notmuch-search-thread-id thread-id)
+ (put-text-property beg (point) 'notmuch-search-authors authors)
+ (put-text-property beg (point) 'notmuch-search-subject subject)
+ (when (string= thread-id notmuch-search-target-thread)
+ (set 'found-target beg)
+ (set 'notmuch-search-target-thread "found"))))
(set 'line (match-end 0)))
(set 'more nil)
(while (and (< line (length string)) (= (elt string line) ?\n))
(goto-char found-target)))
(delete-process proc))))
-(defun notmuch-search-tag-all (&rest actions)
+(defun notmuch-search-tag-all (&rest tag-changes)
"Add/remove tags from all matching messages.
This command adds or removes tags from all messages matching the
characters as well as `_.+-'.
"
(interactive (notmuch-read-tag-changes))
- (apply 'notmuch-tag notmuch-search-query-string actions))
+ (apply 'notmuch-tag notmuch-search-query-string tag-changes))
(defun notmuch-search-buffer-title (query)
"Returns the title for a buffer with notmuch search results."