[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#66187: read-file-name unexpected behavior when MUSTMATCH is a functi
From: |
Joseph Turner |
Subject: |
bug#66187: read-file-name unexpected behavior when MUSTMATCH is a function |
Date: |
Mon, 18 Dec 2023 21:52:33 -0500 |
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 <monnier@iro.umontreal.ca> 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
0001-Fix-completing-read-functional-REQUIRE-MATCH-behavio-2.patch
Description: Text Data