Subject: bug#48925: [PATCH] Set `minibuffer-completion-*` variables buffer-locally in a few more places

From: <[email-masked]>
Date: Thu, 11 Nov 2021 14:04:17 +0100

Eli Zaretskii <[email-masked]> writes:

>> Cc: [email-masked]
>> Date: Thu, 11 Nov 2021 11:42:34 +0100
>> From: miha--- via "Bug reports for GNU Emacs,
>>  the Swiss army knife of text editors" <[email-masked]>
>> 
>> >> To be on the safer side, I guess we could replace the
>> >>
>> >>     specbind (Qminibuffer_completion_table, Qnil);
>> >>
>> >> with a use of `minibuffer-with-setup-hook` that sets the var to nil in
>> >> the new minibuffer.  But doing it in C is awkward so it would best be
>> >> done by moving the function to subr.el.
>> >
>> > Sounds like a good idea to me.  Miha, could you do that?
>> 
>> Okay, patch attached.
>
> Moving read-string to subr.el means the function will be unavailable
> during loadup until subr.elc is loaded.

Sorry, I forgot to include a disclaimer that I don't really know that
much about loadup and bootstrapping, I kind of just blindly moved the
function to lisp saw that "make" worked. I did check loadup.el and saw
that `read-string' or `call-interactively' aren't used directly before
subr.el, but I'm not sure that this is sufficient.

It may be used indirectly through `command-execute', which is defined in
simple.el, so I think it should be okay.

> What is awkward to do in C?  Maybe I could help with that, so that we
> wouldn't need to move this to Lisp.

We want to do what `minibuffer-with-setup-hook' does: add a function to
a hook that will remove itself from this hook. If I understand
correctly, we'd have to do this without `add-hook' and `remove-hook'
since they are defined in subr.el.

> Thanks.