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`
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

View file

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

View file

@ -1191,11 +1191,11 @@ The arguments are:
(setq query (notmuch-read-query (concat "Notmuch "
(if unthreaded "unthreaded " "tree ")
"view search: "))))
(let ((buffer (get-buffer-create (generate-new-buffer-name
(let* ((name
(or buffer-name
(concat "*notmuch-"
(if unthreaded "unthreaded-" "tree-")
query "*")))))
(notmuch-search-buffer-title query
(if unthreaded "unthreaded" "tree"))))
(buffer (get-buffer-create (generate-new-buffer-name name)))
(inhibit-read-only t))
(pop-to-buffer-same-window 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-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."
(let* ((saved-search
(let (longest
@ -930,19 +962,20 @@ See `notmuch-tag' for information on the format of TAG-CHANGES."
do (setq longest tuple))
longest))
(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)))
(cond ((and saved-search (equal saved-search-query query))
;; 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
(concat "*notmuch-search-"
(replace-regexp-in-string
(let ((query (replace-regexp-in-string
(concat "^" (regexp-quote saved-search-query))
(concat "[ " saved-search-name " ]")
query)
"*"))
(t
(concat "*notmuch-search-" query "*")))))
query)))
(notmuch-search-format-buffer-name query saved-search-type t)))
(t (notmuch-search-format-buffer-name query type nil)))))
(defun notmuch-read-query (prompt)
"Read a notmuch-query from the minibuffer with completion.