Subject: bug#70882: closed (Re: bug#70882: 30.0.50; [PATCH] Print the real direction in the prompt for '(previous|next)-matching-history-element')

From: [email-masked] (GNU bug Tracking System)
Date: Mon, 20 May 2024 01:37:01 +0000

Your bug report

#70882: 30.0.50; [PATCH] Print the real direction in the prompt for '(previous|next)-matching-history-element'

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
70882: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=70882
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#70882: 30.0.50; [PATCH] Print the real direction in the prompt for '(previous|next)-matching-history-element'
From: Jim Porter <[email-masked]>
To: Eli Zaretskii <[email-masked]>
Cc: [email-masked]
Date: Sun, 19 May 2024 18:35:27 -0700
List-Id: <debbugs-submit.debbugs.gnu.org>

On 5/18/2024 2:18 AM, Eli Zaretskii wrote:
> Thanks, LGTM.

Thanks for checking. Merged as 44d1687f1f6, and closing this bug.

Subject: 30.0.50; [PATCH] Print the real direction in the prompt for '(previous|next)-matching-history-element'
From: Jim Porter <[email-masked]>
To: [email-masked]
Date: Sat, 11 May 2024 11:53:18 -0700
List-Id: <debbugs-submit.debbugs.gnu.org>

To see the problem, start from "emacs -Q":

   M-x
   M-r      ;; Emacs prompts "Previous element matching regexp:"
   C-g

   M-- M-r  ;; Emacs prompts "Previous element matching regexp:" (?!)

In the last line, the prefix argument is negative, so the search will 
actually be for the *next* matching element. The attached patch fixes 
this so that the prompt message accounts for the prefix arg.

While I was here, I also made 'next-matching-history-element' use 
'format-prompt' like its 'previous-...' sibling.

From 514ccf9288bf29f74e1b2cdfde52a3bf19ae2833 Mon Sep 17 00:00:00 2001
From: Jim Porter <[email-masked]>
Date: Sat, 11 May 2024 11:41:11 -0700
Subject: [PATCH] Tell direction in prompts for
 '(previous|next)-matching-history-element'

Previously, this always said "Previous" for
'previous-matching-history-element' (likewise "Next").  Now, the prompt
accounts for a negative prefix argument changing the search direction.

* lisp/simple.el (previous-matching-history-element)
(next-matching-history-element): Consult numeric prefix argument to
determine the prompt string.
---
 lisp/simple.el | 33 +++++++++++++++++++--------------
 1 file changed, 19 insertions(+), 14 deletions(-)

diff --git a/lisp/simple.el b/lisp/simple.el
index deab52c4201..d10e414586f 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -2876,11 +2876,13 @@ previous-matching-history-element
 makes the search case-sensitive.
 See also `minibuffer-history-case-insensitive-variables'."
   (interactive
-   (let* ((enable-recursive-minibuffers t)
+   (let* ((n (prefix-numeric-value current-prefix-arg))
+          (enable-recursive-minibuffers t)
 	  (regexp (read-from-minibuffer
-                   (format-prompt "Previous element matching regexp"
+                   (format-prompt "%s element matching regexp"
                                   (and minibuffer-history-search-history
-                                       (car minibuffer-history-search-history)))
+                                       (car minibuffer-history-search-history))
+                                  (if (>= n 0) "Previous" "Next"))
 		   nil minibuffer-local-map nil
 		   'minibuffer-history-search-history
 		   (car minibuffer-history-search-history))))
@@ -2888,9 +2890,9 @@ previous-matching-history-element
      (list (if (string= regexp "")
 	       (if minibuffer-history-search-history
 		   (car minibuffer-history-search-history)
-		 (user-error "No previous history search regexp"))
+                 (user-error "No history search regexp"))
 	     regexp)
-	   (prefix-numeric-value current-prefix-arg))))
+           n)))
   (unless (zerop n)
     (if (and (zerop minibuffer-history-position)
 	     (null minibuffer-text-before-history))
@@ -2948,20 +2950,23 @@ next-matching-history-element
 `case-fold-search' is non-nil, but an uppercase letter in REGEXP
 makes the search case-sensitive."
   (interactive
-   (let* ((enable-recursive-minibuffers t)
-	  (regexp (read-from-minibuffer "Next element matching (regexp): "
-					nil
-					minibuffer-local-map
-					nil
-					'minibuffer-history-search-history
- 					(car minibuffer-history-search-history))))
+   (let* ((n (prefix-numeric-value current-prefix-arg))
+          (enable-recursive-minibuffers t)
+          (regexp (read-from-minibuffer
+                   (format-prompt "%s element matching regexp"
+                                  (and minibuffer-history-search-history
+                                       (car minibuffer-history-search-history))
+                                  (if (>= n 0) "Next" "Previous"))
+                   nil minibuffer-local-map nil
+                   'minibuffer-history-search-history
+                   (car minibuffer-history-search-history))))
      ;; Use the last regexp specified, by default, if input is empty.
      (list (if (string= regexp "")
 	       (if minibuffer-history-search-history
 		   (car minibuffer-history-search-history)
-		 (user-error "No previous history search regexp"))
+                 (user-error "No history search regexp"))
 	     regexp)
-	   (prefix-numeric-value current-prefix-arg))))
+           n)))
   (previous-matching-history-element regexp (- n)))
 
 (defvar minibuffer-temporary-goal-position nil)
-- 
2.25.1