emacs-devel
[Top][All Lists]
Advanced

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

Re: Defcustoms, how do users find them?


From: Lennart Borgman
Subject: Re: Defcustoms, how do users find them?
Date: Wed, 18 Nov 2009 00:13:45 +0100

On Tue, Nov 17, 2009 at 3:45 PM, Lennart Borgman
<address@hidden> wrote:
> On Tue, Nov 17, 2009 at 3:22 PM, Lennart Borgman
> <address@hidden> wrote:
>> On Tue, Nov 17, 2009 at 4:41 AM, Lennart Borgman
>> <address@hidden> wrote:
>>> On Tue, Nov 17, 2009 at 4:38 AM, Stefan Monnier
>>> <address@hidden> wrote:
>>>>> If it is really annoying to autoload defcustoms then maybe autoloading
>>>>> just defgroups would be a possibility? (Or are they already autoloaded
>>>>> in some way?)
>>>>
>>>> Yes, groups are autoloaded, thanks to cus-load.el.
>>>> We could make customize-variable's completion complete to all
>>>> defcustoms, using a similar scheme (and have customize-variable
>>>> automatically load the var's package if it's not yet loaded).
>>>> But autoloading the defcustoms is out of the question.
>>>
>>> I think that would solve the problem - if help/apropos functions also
>>> loaded the var's package.
>>
>>
>> As I understand it we then first have to modify
>> custom-make-dependencies so that it also collects defcustoms. Changing
>> the part where it write 'custom-loads to cus-dep.el should is enough
>> for this I guess, see below. Is this the way to do it? (And then add
>> the corresponding pieces to custom-variable-prompt etc.)
>>
>> *** In custom-make-dependencies change to this ****
>>
>>  (mapatoms (lambda (symbol)
>>              (let ((members (get symbol 'custom-group))
>
>
> And that was not a very good idea for how to modify
> custom-make-dependencies. Something like this should make it easier to
> write the rest since there is already a lot of stuff handling
> 'custom-loads:
>
>  (mapatoms (lambda (symbol)
>              (let ((members (get symbol 'custom-group))
>                    where found
>                    (sym-name (symbol-name symbol))
>                    (option (get symbol 'standard-value)))
>                (when members
>                  (dolist (member
>                           ;; So x and no-x builds won't differ.
>                           (sort (mapcar 'car members) 'string<))
>                    (setq where (get member 'custom-where))
>                    (unless (or (null where)
>                                (member where found))
>                      (push where found)))
>                  (when found
>                    (insert "(put '" sym-name " 'custom-unloaded 'group)\n")))
>                (when option
>                  (setq where (get option 'custom-where))
>                  (insert "(put '" sym-name " 'custom-unloaded 'option)\n")
>                  (unless (or (null where)
>                              (member where found))
>                    (push where found)))
>                (when found
>                  (insert "(put '" sym-name
>                          " 'custom-loads '")
>                  (prin1 (nreverse found) (current-buffer))
>                  (insert ")\n"))
>                )))
>


I tested this a little. Loading the new cus-load.el now takes about
2.5 times longer time than before. (This is an old pc, it now takes
0.5 sec.) There are approx 15 000 put statements (before there were
approx 1000).

Byte compiling will bring down load time to the same time as before
(or even less, it was not byte-compiled before), but I do not know if
there are any adverse effects from byte compiling it.

Is this the way to go to get completion etc for unloaded options (and faces)?




reply via email to

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