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

From: Heime <[email-masked]>
Date: Thu, 24 Aug 2023 13:19:55 +0000

------- Original Message -------
On Friday, August 25th, 2023 at 12:30 AM, Gregory Heytings <[email-masked]> wrote:

> > > (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?

The behaviour is as it should be.  Although we should keep 'start' to correspond to 
collection index which customarily starts from value 0. 

Although I can use the function provided, I rather have all this incorporated in
'completing-read'.  Because 'completing-read' would benefit from it.  Particularly
now that its use is being extended.  This taking into account that my use case
is more aligned with its original operation, except that certain aspects which I have
shown to be important were not recognised at the time.  After some focused attention,
Stefan concurred how I have been making sense, particularly after seeing how `completing-read` 
actually behaves during the form of cycling I discussed at some length.