Subject: Re: bug#35689: Customizable char-fold

From: Juri Linkov <[email-masked]>
Date: Tue, 14 May 2019 23:14:12 +0300

>> > Oh, right.  Do you see a problem with a better patch:
>>
>> > +(eval-and-compile (defcustom char-fold-include-base nil
>> > +  "Include mappings from composite character to base letter."
>> > +  :type 'boolean
>> > +  :set (lambda (sym val)
>> > +         (set sym val)
>> > +         (when (boundp 'char-fold-table)
>> > +           (setq char-fold-table (char-fold-make-table))))
>>
>> Looks like it could work (though I haven't tested).  The docstrings
>> are
>> too terse for me easily follow, and they should probably include
>> something along the lines of "Setting this variable directly does not
>> take effect; either use M-x customize or ..."
>
> We don't gave defcustoms inside eval-and/when-compile anywhere else.
> Do we really need this?  For starters, it would defeat cus-dep.el, I think.

Indeed, better to try and simplify this.  The goal is to pre-compile
the default char-table because its calculation is compute-intensive,
and to recalculate a new value of char-table only in case
when customized values differ from the default values.

I can't find a standard way of doing this.  So instead of using eval-and-compile
I'll try to recalculate the value explicitly when variables are customized:

  (when (or (get 'char-fold-include-base  'customized-value)
            (get 'char-fold-include-alist 'customized-value)
            (get 'char-fold-exclude-alist 'customized-value))
    (setq char-fold-table (char-fold-make-table)))