From 7b779782504a7b94f64f100a1f8bb71c483873e5 Mon Sep 17 00:00:00 2001 From: Joseph Turner Date: Mon, 18 Dec 2023 22:41:24 -0500 Subject: [PATCH] Fix completing-read functional REQUIRE-MATCH behavior * lisp/minibuffer.el (completion--do-completion): Refuse to exit minibuffer when REQUIRE-MATCH is a function which returns nil. (completion--complete-and-exit): Delegate handling of functional REQUIRE-MATCH to completion-function. See bug#66187. --- lisp/minibuffer.el | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 5c12d9fc914..5d26ff2423e 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -1408,7 +1408,11 @@ when the buffer's text is already an exact match." (- (point) beg) md))) (cond - ((null comp) + ((or (null comp) + (and (eq t comp) + (functionp minibuffer-completion-confirm) + (not (funcall minibuffer-completion-confirm + (buffer-substring beg end))))) (minibuffer-hide-completions) (unless completion-fail-discreetly (ding) @@ -1849,10 +1853,8 @@ appear to be a match." ;; Allow user to specify null string ((= beg end) (funcall exit-function)) ;; The CONFIRM argument is a predicate. - ((and (functionp minibuffer-completion-confirm) - (funcall minibuffer-completion-confirm - (buffer-substring beg end))) - (funcall exit-function)) + ((functionp minibuffer-completion-confirm) + (funcall completion-function)) ;; See if we have a completion from the table. ((test-completion (buffer-substring beg end) minibuffer-completion-table -- 2.41.0