Subject: bug#65459: completing-read INITIAL-VALUE unaware of COLLECTION and REQUIRE-MATCH

From: Gregory Heytings <[email-masked]>
Date: Thu, 24 Aug 2023 12:30:51 +0000

>> (defun my-completing-read (prompt collection start)
>>   (minibuffer-with-setup-hook
>>       (:append
>>        (lambda ()
>>          (setq-local actual-minibuffer-default-add-function
>>                      minibuffer-default-add-function)
>>          (setq-local minibuffer-default-add-function
>>                      '(lambda () (setq minibuffer-default-add-done nil)
>>                         (funcall actual-minibuffer-default-add-function)))
>
> Why use ' on `lambda`?
>

I think my finger slipped.

>
> BTW, rather than the above two `setq-local`s, I think you can write:
>
>    (add-function :before (local 'minibuffer-default-add-function)
>                  (lambda () (setq minibuffer-default-add-done nil)))
>

Right.  I was writing that function as it if were for minibuffer.el, and 
was therefore avoiding advices.  But now I see that there are a couple of 
add-function in core anyway (it's not clear to me where the dividing line 
is).  So here's the final version:

(defun my-completing-read (prompt collection start)
   (minibuffer-with-setup-hook
       (:append
        (lambda ()
          (add-function :before (local 'minibuffer-default-add-function)
                        (lambda () (setq minibuffer-default-add-done nil)))
          (next-history-element start)
          (move-end-of-line nil)))
     (completing-read (format-prompt prompt nil) collection nil t)))

(my-completing-read "Grapheme" '("alpha" "beta" "gamma" "delta" "epsilon" "zeta" "eta") 1)

Heime, can you try that and tell us if it solves your problem?