emacs: customizable names for search buffers

Customizable names for buffers presenting search results, via two
custom variables (notmuch-search-buffer-name-format and
notmuch-saved-search-buffer-name-format), defaulting to values
currently used for plain searches and including too tree and
unthreaded search buffers.

Amended by db: spelling fix.
This commit is contained in:
jao 2022-01-23 19:54:17 +00:00 committed by David Bremner
parent 21cce961b9
commit 15207652a1
4 changed files with 65 additions and 19 deletions

View file

@ -175,6 +175,16 @@ variables.
:index:`notmuch-search-oldest-first` :index:`notmuch-search-oldest-first`
Display the oldest threads at the top of the buffer Display the oldest threads at the top of the buffer
It is also possible to customize how the name of buffers containing
search results is formatted using the following variables:
:index:`notmuch-search-buffer-name-format`
|docstring::notmuch-search-buffer-name-format|
:index:`notmuch-saved-search-buffer-name-format`
|docstring::notmuch-saved-search-buffer-name-format|
.. _notmuch-show: .. _notmuch-show:
notmuch-show notmuch-show

View file

@ -486,11 +486,14 @@ diagonal."
(defun notmuch-hello-widget-search (widget &rest _ignore) (defun notmuch-hello-widget-search (widget &rest _ignore)
(cl-case (widget-get widget :notmuch-search-type) (cl-case (widget-get widget :notmuch-search-type)
(tree (tree
(let ((n (notmuch-search-format-buffer-name (widget-value widget) "tree" t)))
(notmuch-tree (widget-get widget :notmuch-search-terms) (notmuch-tree (widget-get widget :notmuch-search-terms)
nil nil nil nil nil nil nil nil n nil nil nil
(widget-get widget :notmuch-search-oldest-first))) (widget-get widget :notmuch-search-oldest-first))))
(unthreaded (unthreaded
(notmuch-unthreaded (widget-get widget :notmuch-search-terms))) (let ((n (notmuch-search-format-buffer-name (widget-value widget)
"unthreaded" t)))
(notmuch-unthreaded (widget-get widget :notmuch-search-terms) nil nil n)))
(t (t
(notmuch-search (widget-get widget :notmuch-search-terms) (notmuch-search (widget-get widget :notmuch-search-terms)
(widget-get widget :notmuch-search-oldest-first))))) (widget-get widget :notmuch-search-oldest-first)))))

View file

@ -1191,11 +1191,11 @@ The arguments are:
(setq query (notmuch-read-query (concat "Notmuch " (setq query (notmuch-read-query (concat "Notmuch "
(if unthreaded "unthreaded " "tree ") (if unthreaded "unthreaded " "tree ")
"view search: ")))) "view search: "))))
(let ((buffer (get-buffer-create (generate-new-buffer-name (let* ((name
(or buffer-name (or buffer-name
(concat "*notmuch-" (notmuch-search-buffer-title query
(if unthreaded "unthreaded-" "tree-") (if unthreaded "unthreaded" "tree"))))
query "*"))))) (buffer (get-buffer-create (generate-new-buffer-name name)))
(inhibit-read-only t)) (inhibit-read-only t))
(pop-to-buffer-same-window buffer)) (pop-to-buffer-same-window buffer))
;; Don't track undo information for this buffer ;; Don't track undo information for this buffer

View file

@ -915,7 +915,39 @@ See `notmuch-tag' for information on the format of TAG-CHANGES."
(notmuch-search-get-tags-region (point-min) (point-max)) "Tag all"))) (notmuch-search-get-tags-region (point-min) (point-max)) "Tag all")))
(notmuch-search-tag tag-changes (point-min) (point-max) t)) (notmuch-search-tag tag-changes (point-min) (point-max) t))
(defun notmuch-search-buffer-title (query) (defcustom notmuch-search-buffer-name-format "*notmuch-%t-%s*"
"Format for the name of search results buffers.
In this spec, %s will be replaced by a description of the search
query and %t by its type (search, tree or unthreaded). The
buffer name is formatted using `format-spec': see its docstring
for additional parameters for the s and t format specifiers.
See also `notmuch-saved-search-buffer-name-format'"
:type 'string
:group 'notmuch-search)
(defcustom notmuch-saved-search-buffer-name-format "*notmuch-saved-%t-%s*"
"Format for the name of search results buffers for saved searches.
In this spec, %s will be replaced by the saved search name and %t
by its type (search, tree or unthreaded). The buffer name is
formatted using `format-spec': see its docstring for additional
parameters for the s and t format specifiers.
See also `notmuch-search-buffer-name-format'"
:type 'string
:group 'notmuch-search)
(defun notmuch-search-format-buffer-name (query type saved)
"Compose a buffer name for the given QUERY, TYPE (search, tree,
unthreaded) and whether it's SAVED (t or nil)."
(let ((fmt (if saved
notmuch-saved-search-buffer-name-format
notmuch-search-buffer-name-format)))
(format-spec fmt `((?t . ,(or type "search")) (?s . ,query)))))
(defun notmuch-search-buffer-title (query &optional type)
"Returns the title for a buffer with notmuch search results." "Returns the title for a buffer with notmuch search results."
(let* ((saved-search (let* ((saved-search
(let (longest (let (longest
@ -930,19 +962,20 @@ See `notmuch-tag' for information on the format of TAG-CHANGES."
do (setq longest tuple)) do (setq longest tuple))
longest)) longest))
(saved-search-name (notmuch-saved-search-get saved-search :name)) (saved-search-name (notmuch-saved-search-get saved-search :name))
(saved-search-type (notmuch-saved-search-get saved-search :search-type))
(saved-search-query (notmuch-saved-search-get saved-search :query))) (saved-search-query (notmuch-saved-search-get saved-search :query)))
(cond ((and saved-search (equal saved-search-query query)) (cond ((and saved-search (equal saved-search-query query))
;; Query is the same as saved search (ignoring case) ;; Query is the same as saved search (ignoring case)
(concat "*notmuch-saved-search-" saved-search-name "*")) (notmuch-search-format-buffer-name saved-search-name
saved-search-type
t))
(saved-search (saved-search
(concat "*notmuch-search-" (let ((query (replace-regexp-in-string
(replace-regexp-in-string
(concat "^" (regexp-quote saved-search-query)) (concat "^" (regexp-quote saved-search-query))
(concat "[ " saved-search-name " ]") (concat "[ " saved-search-name " ]")
query) query)))
"*")) (notmuch-search-format-buffer-name query saved-search-type t)))
(t (t (notmuch-search-format-buffer-name query type nil)))))
(concat "*notmuch-search-" query "*")))))
(defun notmuch-read-query (prompt) (defun notmuch-read-query (prompt)
"Read a notmuch-query from the minibuffer with completion. "Read a notmuch-query from the minibuffer with completion.