emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Making `eglot-server-programs' a custom variable?


From: Philip Kaludercic
Subject: Re: Making `eglot-server-programs' a custom variable?
Date: Sun, 13 Nov 2022 00:20:35 +0000

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Philip Kaludercic <philipk@posteo.net>
>> Cc: jporterbugs@gmail.com,  arash@gnu.org,  emacs-devel@gnu.org,
>>   joaotavora@gmail.com
>> Date: Sat, 12 Nov 2022 13:46:40 +0000
>> 
>> >> (I'm not just talking about Eglot right now)  If the default value is
>> >> defined in an non-autoloaded variable, you have to load the library to
>> >> access the value -- otherwise it simply wasn't loaded.
>> >> 
>> >> The "issue" here is just that loading everything you want to modify
>> >> during initialisation can get slow.
>> >
>> > Whether or not it is necessary to load the library depends on how the
>> > :set function of the defcustom is implemented.  I can see several ways
>> > of implementing it that won't require loading the library right away,
>> > and I'm sure you can see those ways as well.
>> 
>> Actually no, I am not sure I do.
>
> Any way that stored the changes of the variable's value in a data
> structure whose execution is deferred to when the library is first
> loaded.  This includes ` backquoted forms, eval-after-load, mode
> hooks, etc.
>
>> > To me, this says that storing the value in a defcustom hits that
>> > "issue" to which you were alluding, and for which I proposed a
>> > solution of having the defcustom be an add-on to the baseline value.
>> 
>> I see.  The issue is that if I just set the user option directly, say
>> even before loading the library I overwrite the default value.
>
> Once again, I'm talking about the user option being used to _augment_
> the default value of a variable.  Such a user option should by default
> have a nil value, so setting the value of the option doesn't overwrite
> the baseline value of the variable which the option will augment.

Ok.

> I feel there's a misunderstanding here, because I don't see why these
> obvious aspects need to be explained.  So let me provide an example as
> a possible clarification.

That might very well be possible.

> Under my proposal, the variable eglot-server-programs remains a
> defvar, and contains the baseline list of the servers.  To customize
> the list, users change the value of a separate user option, say,
> eglot-user-server-programs.  This user option's value is nil by
> default, and it allows users to specify both additions of servers to
> the baseline value of eglot-server-programs and removal of servers
> from that value.  

How would this look like?

>                   The :set function of eglot-user-server-programs then
> takes care of doing whatever is needed to make sure that the value of
> eglot-server-programs is modified according to
> eglot-user-server-programs's value when Eglot is started.

This I understand, but I don't see how this is preferable to a general
solution that doesn't require explicit support for any user option.

>> >> Maybe I have missed something, if a user option has a `repeat' or
>> >> `alist' type, you can't just say "append this and that value to the end
>> >> of some other value".  All you get to modify is the entire list, and all
>> >> you get to store is the entire list.
>> >
>> > That's a job for the :set function of the defcustom.
>> 
>> I am not sure I know what you are thinking of, but wouldn't this mean
>> all user options that have already been marked as having a `repeat' or
>> `alist' type, that these would now require an additional :set function?
>
> No, of course not.  I didn't mean any changes to the infrastructure
> that we use for Customize and user options in general.  See above, I
> hope I now explained what I had in mind.

I suppose it does.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]