:type 'file
:group 'notmuch)
-(defcustom notmuch-search-hook '(notmuch-hl-line-mode)
+(defcustom notmuch-search-hook nil
"List of functions to call when notmuch displays the search results."
:type 'hook
- :options '(notmuch-hl-line-mode)
:group 'notmuch-search
:group 'notmuch-hooks)
+(defcustom notmuch-hl-line t
+ "Use hl-line-mode to highlight current thread / message"
+ :type 'boolean
+ :group 'notmuch)
+
;;; Mime Utilities
(defun notmuch-foreach-mime-part (function mm-handle)
(define-key map "r" 'notmuch-search-reply-to-thread-sender)
(define-key map "R" 'notmuch-search-reply-to-thread)
(define-key map "o" 'notmuch-search-toggle-order)
+ (define-key map "i" 'notmuch-search-toggle-hide-excluded)
(define-key map "c" 'notmuch-search-stash-map)
(define-key map "t" 'notmuch-search-filter-by-tag)
(define-key map "l" 'notmuch-search-filter)
+ (define-key map "E" 'notmuch-search-edit-search)
(define-key map [mouse-1] 'notmuch-search-show-thread)
(define-key map "k" 'notmuch-tag-jump)
(define-key map "*" 'notmuch-search-tag-all)
(add-to-invisibility-spec (cons 'ellipsis t))
(setq truncate-lines t)
(setq buffer-read-only t)
+ (when (boundp 'untrusted-content)
+ (setq untrusted-content t))
(setq imenu-prev-index-position-function
#'notmuch-search-imenu-prev-index-position-function)
(setq imenu-extract-index-name-function
(defun notmuch-tree-from-search-current-query ()
"Tree view of current query."
(interactive)
- (notmuch-tree notmuch-search-query-string))
+ (notmuch-tree notmuch-search-query-string
+ nil nil nil nil nil nil
+ notmuch-search-oldest-first
+ notmuch-search-hide-excluded))
(defun notmuch-unthreaded-from-search-current-query ()
"Unthreaded view of current query."
(interactive)
- (notmuch-unthreaded notmuch-search-query-string))
+ (notmuch-unthreaded notmuch-search-query-string
+ nil nil nil nil
+ notmuch-search-oldest-first
+ notmuch-search-hide-excluded))
(defun notmuch-tree-from-search-thread ()
"Show the selected thread with notmuch-tree."
notmuch-search-query-string
nil
(notmuch-prettify-subject (notmuch-search-find-subject))
- t nil (current-buffer)))
+ t nil (current-buffer)
+ notmuch-search-oldest-first
+ notmuch-search-hide-excluded))
(defun notmuch-search-reply-to-thread (&optional prompt-for-sender)
"Begin composing a reply-all to the entire current thread in a new buffer."
overlay)
(insert invisible-string)
(setq overlay (make-overlay start (point)))
+ (overlay-put overlay 'evaporate t)
(overlay-put overlay 'invisible 'ellipsis)
(overlay-put overlay 'isearch-open-invisible #'delete-overlay)))
(insert padding))))
(notmuch-sexp-parse-partial-list 'notmuch-search-append-result
results-buf))
(with-current-buffer results-buf
+ (when (and notmuch-hl-line
+ ;; If we know where the cursor will end up (from
+ ;; the call to notmuch-search), avoid redrawing the
+ ;; hl-line overlay until the buffer is sufficiently
+ ;; filled. This check is intended as an
+ ;; optimization to reduce flicker.
+ (>=
+ (line-number-at-pos (point-max) t)
+ (or notmuch-search-target-line -1)))
+ (notmuch-hl-line-mode))
(notmuch--search-hook-wrapper)))))
;;; Commands (and some helper functions used by them)
(put 'notmuch-search 'notmuch-doc "Search for messages.")
;;;###autoload
-(defun notmuch-search (&optional query oldest-first target-thread target-line
- no-display)
+(defun notmuch-search (&optional query oldest-first hide-excluded target-thread
+ target-line no-display)
"Display threads matching QUERY in a notmuch-search buffer.
If QUERY is nil, it is read interactively from the minibuffer.
Other optional parameters are used as follows:
OLDEST-FIRST: A Boolean controlling the sort order of returned threads
+ HIDE-EXCLUDED: A boolean controlling whether to omit threads with excluded
+ tags.
TARGET-THREAD: A thread ID (without the thread: prefix) that will be made
current if it appears in the search results.
TARGET-LINE: The line number to move to if the target thread does not
(list
;; Prompt for a query
nil
- ;; Use the default search order (if we're doing a search from a
- ;; search buffer, ignore any buffer-local overrides)
- (default-value 'notmuch-search-oldest-first)))
+ ;; Use the default search order and exclude value (if we're doing a
+ ;; search from a search buffer, ignore any buffer-local overrides)
+ (default-value 'notmuch-search-oldest-first)
+ (default-value 'notmuch-search-hide-excluded)))
(let* ((query (or query (notmuch-read-query "Notmuch search: ")))
(buffer (get-buffer-create (notmuch-search-buffer-title query))))
- (if no-display
- (set-buffer buffer)
- (pop-to-buffer-same-window buffer))
+ (set-buffer buffer)
(notmuch-search-mode)
+ (unless no-display
+ (pop-to-buffer-same-window buffer))
;; Don't track undo information for this buffer
(setq buffer-undo-list t)
(setq notmuch-search-query-string query)
(setq notmuch-search-oldest-first oldest-first)
(setq notmuch-search-target-thread target-thread)
(setq notmuch-search-target-line target-line)
+ (setq notmuch-search-hide-excluded hide-excluded)
(notmuch-tag-clear-cache)
(when (get-buffer-process buffer)
(error "notmuch search process already running for query `%s'" query))
(if oldest-first
"--sort=oldest-first"
"--sort=newest-first")
+ (if hide-excluded
+ "--exclude=true"
+ "--exclude=false")
query)))
;; Use a scratch buffer to accumulate partial output.
;; This buffer will be killed by the sentinel, which
(interactive)
(notmuch-search notmuch-search-query-string
notmuch-search-oldest-first
+ notmuch-search-hide-excluded
(notmuch-search-find-thread-id 'bare)
(line-number-at-pos)
t)
(goto-char (point-min)))
+(defun notmuch-search-toggle-hide-excluded ()
+ "Toggle whether to hide excluded messages.
+
+This command toggles whether to hide excluded messages for the current
+search. The default value for this is defined by `notmuch-search-hide-excluded'."
+ (interactive)
+ (setq notmuch-search-hide-excluded (not notmuch-search-hide-excluded))
+ (notmuch-search-refresh-view))
+
(defun notmuch-search-toggle-order ()
"Toggle the current search order.
(notmuch-search (if (string= grouped-original-query "*")
grouped-query
(concat grouped-original-query " and " grouped-query))
- notmuch-search-oldest-first)))
+ notmuch-search-oldest-first
+ notmuch-search-hide-excluded)))
(defun notmuch-search-filter-by-tag (tag)
"Filter the current search results based on a single TAG.
(list (notmuch-select-tag-with-completion "Filter by tag: "
notmuch-search-query-string)))
(notmuch-search (concat notmuch-search-query-string " and tag:" tag)
- notmuch-search-oldest-first))
+ notmuch-search-oldest-first
+ notmuch-search-hide-excluded))
(defun notmuch-search-by-tag (tag)
"Display threads matching TAG in a notmuch-search buffer."
(interactive
(list (notmuch-select-tag-with-completion "Notmuch search tag: ")))
- (notmuch-search (concat "tag:" tag)))
+ (notmuch-search (concat "tag:" tag)
+ (default-value 'notmuch-search-oldest-first)
+ (default-value 'notmuch-search-hide-excluded)))
+
+(defun notmuch-search-edit-search (query)
+ "Edit the current search"
+ (interactive (list (read-from-minibuffer "Edit search: "
+ notmuch-search-query-string)))
+ (notmuch-search query notmuch-search-oldest-first))
;;;###autoload
(defun notmuch ()