Skip to content

Commit

Permalink
mu4e-search: try harder to update baseline
Browse files Browse the repository at this point in the history
Try to update the query baseline if we're search for the favorite-query,
whether as a bookmark or an "organic" query, through a new function
mu4e--search-maybe-reset-baseline

Note that the query must string-match _exactly_, equivalence is not
enough.

Some cosmetic updates.

Fixes #2775.
  • Loading branch information
djcb committed Oct 30, 2024
1 parent ae29b2d commit bbf3482
Showing 1 changed file with 22 additions and 19 deletions.
41 changes: 22 additions & 19 deletions mu4e/mu4e-search.el
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
;;; mu4e-search.el --- Search-related functions -*- lexical-binding: t -*-

;; Copyright (C) 2021,2022 Dirk-Jan C. Binnema
;; Copyright (C) 2021,2024 Dirk-Jan C. Binnema

;; Author: Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
;; Maintainer: Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
Expand Down Expand Up @@ -35,7 +35,7 @@
(require 'mu4e-mark)
(require 'mu4e-query-items)



;;; Configuration
(defgroup mu4e-search nil
"Search-related settings."
Expand Down Expand Up @@ -115,8 +115,9 @@ chronologically (`:date') by the newest message in the thread."
:group 'mu4e-search)

(defcustom mu4e-search-sort-direction 'descending
"Direction to sort by; a symbol either `descending' (sorting
Z->A) or `ascending' (sorting A->Z)."
"Direction to sort by.
A symbol either `descending' (sorting Z->A) or
`ascending' (sorting A->Z)."
:type '(radio (const ascending)
(const descending))
:group 'mu4e-search)
Expand Down Expand Up @@ -148,7 +149,7 @@ executed search, not just those that are invoked via bookmarks,
but also manually invoked searches."
:type 'hook
:group 'mu4e-search)


;; Internals

;;; History
Expand All @@ -160,8 +161,6 @@ but also manually invoked searches."
(defvar mu4e--search-last-query nil
"The present (most recent) query.")



;;; Interactive functions
(declare-function mu4e--search-execute "mu4e-headers")

Expand All @@ -170,6 +169,13 @@ but also manually invoked searches."
(defvar mu4e--search-msgid-target nil
"Message-id to jump to after the search has finished.")

(defun mu4e--search-maybe-reset-baseline (query)
"Reset the baseline if QUERY matches the favorite.
Note that the query must match the favorite _exactly_,
equivalence is not enough."
(when-let* ((fav (mu4e--bookmark-query (mu4e-bookmark-favorite))))
(when (and fav (string= fav query))
(mu4e--query-items-refresh 'reset-baseline))))

(defun mu4e-search (&optional expr prompt edit ignore-history msgid show)
"Search for query EXPR.
Expand All @@ -183,7 +189,10 @@ the user edit the query before executing it.
If IGNORE-HISTORY is true, do *not* update the query history
stack. If MSGID is non-nil, attempt to move point to the first
message with that message-id after searching. If SHOW is non-nil,
show the message with MSGID."
show the message with MSGID.
Attempts to reset the query baseline if EXPR is an exact match
with the favorite bookmark's query."
(interactive)
(let* ((prompt (mu4e-format (or prompt "Search for: ")))
(expr
Expand All @@ -194,6 +203,7 @@ show the message with MSGID."
(mu4e--search-execute expr ignore-history)
(setq mu4e--search-msgid-target msgid
mu4e--search-view-target show)
(mu4e--search-maybe-reset-baseline expr)
(mu4e--modeline-update)))

(defun mu4e-search-edit ()
Expand All @@ -210,12 +220,7 @@ the search."
(or expr
(mu4e-ask-bookmark
(if edit "Select bookmark: " "Bookmark: "))))
(expr (if (functionp expr) (funcall expr) expr))
(fav (mu4e--bookmark-query (mu4e-bookmark-favorite))))
;; reset baseline when searching for the favorite bookmark query
(when (and fav (string= fav expr))
(mu4e--query-items-refresh 'reset-baseline))

(expr (if (functionp expr) (funcall expr) expr)))
(run-hook-with-args 'mu4e-search-bookmark-hook expr)
(mu4e-search expr (when edit "Edit query: ") edit)))

Expand All @@ -224,7 +229,6 @@ the search."
(interactive)
(mu4e-search-bookmark nil t))


(defun mu4e-search-maildir (maildir &optional edit)
"Search the messages in MAILDIR.
The user is prompted to ask what maildir. If prefix-argument EDIT
Expand All @@ -239,7 +243,7 @@ is given, offer to edit the search query before executing it."
(mu4e-mark-handle-when-leaving)
(mu4e-search query))))

(defun mu4e-search-narrow(&optional filter)
(defun mu4e-search-narrow (&optional filter)
"Narrow the last search.
Do so by appending search expression FILTER to the last search
expression. Note that you can go back to the previous
Expand Down Expand Up @@ -328,7 +332,7 @@ either `future' or `past'."
(defun mu4e-last-query ()
"Get the most recent query or nil if there is none."
mu4e--search-last-query)


;;; Completion for queries

(defvar mu4e--search-hist nil "History list of searches.")
Expand Down Expand Up @@ -491,8 +495,7 @@ last search with the new setting."
(defvar mu4e-search-skip-duplicates-label '("U" . "") ;; 'U' for 'unique'
"Non-fancy and fancy labels for include-related search in the mode-line.")
(defvar mu4e-search-hide-label '("H" . "")
"Non-fancy and fancy labels to indicate header-hiding is active in
the mode-line.")
"Non-fancy and fancy labels to indicate header-hiding.")

(defun mu4e--search-modeline-item ()
"Get mu4e-search modeline item."
Expand Down

0 comments on commit bbf3482

Please sign in to comment.