[PATCH 09/11] emacs: add ability to show recipients instead of author in search
Jameson Graef Rollins
jrollins at finestructure.net
Sun Aug 19 18:52:48 PDT 2012
A new boolean argument is added to notmuch-search to control whether
thread authors or recipients are shown in the 'authors' field.
---
emacs/notmuch-hello.el | 6 +++---
emacs/notmuch.el | 40 +++++++++++++++++++++++++++++-----------
2 files changed, 32 insertions(+), 14 deletions(-)
diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el
index 684bedc..4615cf6 100644
--- a/emacs/notmuch-hello.el
+++ b/emacs/notmuch-hello.el
@@ -26,7 +26,7 @@
(require 'notmuch-lib)
(require 'notmuch-mua)
-(declare-function notmuch-search "notmuch" (query &optional oldest-first target-thread target-line continuation))
+(declare-function notmuch-search "notmuch" (query &optional oldest-first show-recipients target-thread target-line continuation))
(declare-function notmuch-poll "notmuch" ())
(defcustom notmuch-hello-recent-searches-max 10
@@ -280,7 +280,7 @@ afterwards.")
(setq search (notmuch-hello-trim search))
(let ((history-delete-duplicates t))
(add-to-history 'notmuch-search-history search)))
- (notmuch-search search notmuch-search-oldest-first nil nil
+ (notmuch-search search notmuch-search-oldest-first nil nil nil
#'notmuch-hello-search-continuation))
(defun notmuch-hello-add-saved-search (widget)
@@ -331,7 +331,7 @@ diagonal."
(notmuch-search (widget-get widget
:notmuch-search-terms)
notmuch-search-oldest-first
- nil nil #'notmuch-hello-search-continuation))
+ nil nil nil #'notmuch-hello-search-continuation))
(defun notmuch-saved-search-count (search)
(car (process-lines notmuch-command "count" search)))
diff --git a/emacs/notmuch.el b/emacs/notmuch.el
index 7b61e9b..d05b1e8 100644
--- a/emacs/notmuch.el
+++ b/emacs/notmuch.el
@@ -254,6 +254,7 @@ For a mouse binding, return nil."
(notmuch-common-do-stash (notmuch-search-find-thread-id)))
(defvar notmuch-search-query-string)
+(defvar notmuch-search-show-recipients)
(defvar notmuch-search-target-thread)
(defvar notmuch-search-target-line)
(defvar notmuch-search-continuation)
@@ -405,6 +406,7 @@ Complete list of currently available key bindings:
(make-local-variable 'notmuch-search-oldest-first)
(make-local-variable 'notmuch-search-target-thread)
(make-local-variable 'notmuch-search-target-line)
+ (make-local-variable 'notmuch-search-show-recipients)
(set (make-local-variable 'notmuch-search-continuation) nil)
(set (make-local-variable 'scroll-preserve-screen-position) t)
(add-to-invisibility-spec (cons 'ellipsis t))
@@ -781,7 +783,10 @@ non-authors is found, assume that all of the authors match."
'face 'notmuch-search-subject)))
((string-equal field "authors")
- (notmuch-search-insert-authors format-string (plist-get result :authors)))
+ (notmuch-search-insert-authors format-string
+ (if notmuch-search-show-recipients
+ (plist-get result :recipients)
+ (plist-get result :authors))))
((string-equal field "tags")
(let ((tags-str (mapconcat 'identity (plist-get result :tags) " ")))
@@ -931,13 +936,16 @@ PROMPT is the string to prompt with."
'notmuch-search-history nil nil)))))
;;;###autoload
-(defun notmuch-search (&optional query oldest-first target-thread target-line continuation)
+(defun notmuch-search (&optional query oldest-first show-recipients target-thread target-line continuation)
"Run \"notmuch search\" with the given `query' and display results.
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
+ show-recipients: A Boolean controlling whether or not thread
+ recipients instead of authors are shown in the
+ 'authors' field.
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
@@ -952,25 +960,34 @@ Other optional parameters are used as follows:
(set 'buffer-undo-list t)
(set 'notmuch-search-query-string query)
(set 'notmuch-search-oldest-first oldest-first)
+ (set 'notmuch-search-show-recipients show-recipients)
(set 'notmuch-search-target-thread target-thread)
(set 'notmuch-search-target-line target-line)
(set 'notmuch-search-continuation continuation)
(let ((proc (get-buffer-process (current-buffer)))
+ (proc-args (list
+ "notmuch-search" buffer
+ notmuch-command "search"
+ "--format=json"
+ (if oldest-first
+ "--sort=oldest-first"
+ "--sort=newest-first")))
(inhibit-read-only t))
+ (if show-recipients
+ (setq proc-args (append proc-args '("--include-recipients"))))
(if proc
(error "notmuch search process already running for query `%s'" query)
)
(erase-buffer)
(goto-char (point-min))
(save-excursion
- (let ((proc (start-process
- "notmuch-search" buffer
- notmuch-command "search"
- "--format=json"
- (if oldest-first
- "--sort=oldest-first"
- "--sort=newest-first")
- query))
+ (let (
+ ;; start-process insists on non-nil string arguments.
+ ;; This is annoying for variable length argument lists.
+ ;; We use apply here so that we can construct the
+ ;; start-process argument list ahead of time (instead of
+ ;; at invocation) to avoid nils.
+ (proc (apply 'start-process (append proc-args (list query))))
;; Use a scratch buffer to accumulate partial output.
;; This buffer will be killed by the sentinel, which
;; should be called no matter how the process dies.
@@ -995,11 +1012,12 @@ same relative position within the new buffer."
(interactive)
(let ((target-line (line-number-at-pos))
(oldest-first notmuch-search-oldest-first)
+ (show-recipients notmuch-search-show-recipients)
(target-thread (notmuch-search-find-thread-id 'bare))
(query notmuch-search-query-string)
(continuation notmuch-search-continuation))
(notmuch-kill-this-buffer)
- (notmuch-search query oldest-first target-thread target-line continuation)
+ (notmuch-search query oldest-first show-recipients target-thread target-line continuation)
(goto-char (point-min))))
(defcustom notmuch-poll-script nil
--
1.7.10.4
More information about the notmuch
mailing list