Hello! For reference, here's the little snippet I'm testing with: (completing-read "Prompt: " '("a" "b") nil (lambda (input) (string= "a" input))) where the only expected valid input is "a". Stefan Monnier writes: >> Here's another potential solution. While the attached patch seems to >> work, I'm not sure that minibuffer-completion-confirm should be checked >> in completion--do-completion instead of completion--complete-and-exit. > > It's definitely better to check it in `completion--complete-and-exit` > (which is about exiting and thus related to whether the content is > acceptable) than in `completion--do-completion` (which is just about > completion). I'm still not sure `completion--complete-and-exit' is the best place to check that input is valid before exiting. `completion--do-completion' contains the following cond clause, which prevents the user from exiting with, e.g., "c". ((null comp) (minibuffer-hide-completions) (unless completion-fail-discreetly (ding) (completion--message "No match")) (minibuffer--bitset nil nil nil)) Perhaps we should also run that same body when REQUIRE-MATCH is a function which returns nil? > The patch looks OK, thanks. We could make it call `completion-function` > instead of saying "no match" (after all, it has "complete" in its name), > but it comes with its own set of problems. If I understand correctly, the attached patch does this. I think this works inside of `completion-complete-and-exit', but maybe not inside of `minibuffer-force-complete-and-exit' since the former calls `completion--do-completion' internally but the latter does not. Still exploring ideas... Thanks! Joseph