Subject: bug#30994: bug#45857: 28.0.50; Not possible to set package-user-dir in early-init.el

From: Stefan Monnier <[email-masked]>
Date: Fri, 15 Jan 2021 17:19:33 -0500

>> >> > Basically, some variables can only be usefully initialized after some
>> >> > part(s) of startup have happened already.  One way of dealing with
>> >> > this is to have the variables record this information (e.g., in a
>> >> > plist of their symbol) that would allow us evaluate each variable only
>> >> > once, at the earliest opportunity where the prerequisites are
>> >> > fulfilled.
>> [...]
>> > I say we should get ready for the future now.  Introducing the
>> > infrastructure I mentioned is not a big deal.
>> Hmm... maybe I misunderstood what you meant by that infrastructure, then.
>> Could you outline more concretely what it would look like?
> In a nutshell: record the startup phase for each variable in a plits
> of its symbol.

Ah, so instead of just

    :initialize #'custom-initialize-delay

we'd have something like

    :initialize (custom-initialize-delay 'before-early-init)
or
    :initialize (custom-initialize-delay 'after-early-init)

Where `custom-initialize-delay` becomes something like

    (defun custom-initialize-delay (phase)
      (lambda (symbol)
        (push (cons symbol phase) custom-delayed-init-variables)))

depending on when we want the initialization to take place?

>> Also, would it currently result in a behavior that's different from:
>>
>> - initialize all delayed vars before early-init
>> - re-initialize blink-cursor-mode after early-init
>>
>> ?
>
> With my proposal, blink-cursor-mode will not be mentioned by name in
> any of these places.

Yes, of course, but I'm asking whether the resulting *behavior* you're
after is this one.

        Stefan