Subject: bug#64347: 30.0.50; Some customize faces shown as edited with -Q

From: Eli Zaretskii <[email-masked]>
Date: Sun, 09 Jul 2023 08:43:58 +0300

> Date: Sat, 8 Jul 2023 18:32:15 -0300
> Cc: [email-masked], [email-masked]
> From: Mauro Aranda <[email-masked]>
> 
> Since there are both ways to specify the same information for the
> :line-width value, there's always a chance of not sending the expected
> format to face-spec-match-p.
> 
> Let's say we have (:line-width 1).  Then the pre-filter converts it into
> (:line-width (1 . 1)), and then the post-filter should convert it back
> to (:line-width 1), and that works.
> 
> But if we have (:line-width (1 . 1)), the pre-filter does nothing, and
> the post-filter will transform it into (:line-width 1), and that way
> specs won't match.
> 
> So sometimes we want to post-filter to (:line-width WIDTH) and sometimes
> to (VWIDTH . HWIDTH) and there's currently not enough information to do
> that, or at least I missed it.
> 
>  > Did you make any progress with the one bug that's left after the other
>  > two are fixed?
> 
> I did find that face-attr-match-p uses equal even with properties like
> :underline and :box that can have plists as values.  But I haven't tried
> to fix it, because I got frustrated with the post-filter thing.

I guess I'm missing something here: why do we need those pre-filter
and post-filter conversions?  The C code understands both forms of
:line-width, so there should be no need for Lisp to do any
conversions, right?  So why do we do that? why not simply leave the
spec as it was originally?