(declare-function notmuch-search "notmuch" (query &optional oldest-first target-thread target-line continuation))
(declare-function notmuch-poll "notmuch" ())
-(defcustom notmuch-recent-searches-max 10
- "The number of recent searches to store and display."
+(defcustom notmuch-hello-recent-searches-max 10
+ "The number of recent searches to display."
:type 'integer
:group 'notmuch-hello)
(defvar notmuch-hello-url "http://notmuchmail.org"
"The `notmuch' web site.")
-(defvar notmuch-hello-recent-searches nil)
-
-(defun notmuch-hello-remember-search (search)
- (setq notmuch-hello-recent-searches
- (delete search notmuch-hello-recent-searches))
- (push search notmuch-hello-recent-searches)
- (if (> (length notmuch-hello-recent-searches)
- notmuch-recent-searches-max)
- (setq notmuch-hello-recent-searches (butlast notmuch-hello-recent-searches))))
-
(defun notmuch-hello-nice-number (n)
(let (result)
(while (> n 0)
search))
(defun notmuch-hello-search (search)
- (let ((search (notmuch-hello-trim search)))
- (notmuch-hello-remember-search search)
- (notmuch-search search notmuch-search-oldest-first nil nil #'notmuch-hello-search-continuation)))
+ (unless (null search)
+ (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-hello-search-continuation))
(defun notmuch-hello-add-saved-search (widget)
(interactive)
(let ((found-target-pos nil)
(final-target-pos nil)
- (search-bar-pos))
+ (default-pos))
(let* ((saved-alist
;; Filter out empty saved searches if required.
(if notmuch-show-empty-saved-searches
(indent-rigidly start (point) notmuch-hello-indent)))
(widget-insert "\nSearch: ")
- (setq search-bar-pos (point-marker))
+ (setq default-pos (point-marker))
(widget-create 'editable-field
;; Leave some space at the start and end of the
;; search boxes.
(put-text-property (1- (point)) (point) 'invisible t)
(widget-insert "\n")
- (when notmuch-hello-recent-searches
+ (when notmuch-search-history
(widget-insert "\nRecent searches: ")
(widget-create 'push-button
:notify (lambda (&rest ignore)
- (setq notmuch-hello-recent-searches nil)
+ (setq notmuch-search-history nil)
(notmuch-hello-update))
"clear")
(widget-insert "\n\n")
- (let ((start (point))
- (nth 0))
- (mapc (lambda (search)
- (let ((widget-symbol (intern (format "notmuch-hello-search-%d" nth))))
+ (let ((start (point)))
+ (loop for i from 1 to notmuch-hello-recent-searches-max
+ for search in notmuch-search-history do
+ (let ((widget-symbol (intern (format "notmuch-hello-search-%d" i))))
(set widget-symbol
(widget-create 'editable-field
;; Don't let the search boxes be
(notmuch-hello-add-saved-search widget))
:notmuch-saved-search-widget widget-symbol
"save"))
- (widget-insert "\n")
- (setq nth (1+ nth)))
- notmuch-hello-recent-searches)
+ (widget-insert "\n"))
(indent-rigidly start (point) notmuch-hello-indent)))
(when alltags-alist
(let ((start (point)))
(widget-insert "\n\n")
(widget-insert "Type a search query and hit RET to view matching threads.\n")
- (when notmuch-hello-recent-searches
+ (when notmuch-search-history
(widget-insert "Hit RET to re-submit a previous search. Edit it first if you like.\n")
(widget-insert "Save recent searches with the `save' button.\n"))
(when notmuch-saved-searches
(widget-forward 1)))
(unless (widget-at)
- (goto-char search-bar-pos))))
+ (goto-char default-pos))))
(run-hooks 'notmuch-hello-refresh-hook))
(t (list string)))))))
;; this was simpler than convincing completing-read to accept spaces:
(define-key keymap (kbd "<tab>") 'minibuffer-complete)
- (read-from-minibuffer prompt nil keymap nil
- 'notmuch-query-history nil nil))))
+ (let ((history-delete-duplicates t))
+ (read-from-minibuffer prompt nil keymap nil
+ 'notmuch-search-history nil nil)))))
;;;###autoload
-(defun notmuch-search (query &optional oldest-first target-thread target-line continuation)
- "Run \"notmuch search\" with the given query string and display results.
+(defun notmuch-search (&optional query oldest-first target-thread target-line continuation)
+ "Run \"notmuch search\" with the given `query' and display results.
-The optional parameters are used as follows:
+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
target-thread: A thread ID (with 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
appear in the search results."
- (interactive (list (notmuch-read-query "Notmuch search: ")))
+ (interactive)
+ (if (null query)
+ (setq query (notmuch-read-query "Notmuch search: ")))
(let ((buffer (get-buffer-create (notmuch-search-buffer-title query))))
(switch-to-buffer buffer)
(notmuch-search-mode)