emacs-devel
[Top][All Lists]
Advanced

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

Re: :extend t inheritance


From: Eli Zaretskii
Subject: Re: :extend t inheritance
Date: Sat, 26 Oct 2019 22:45:36 +0300

> Date: Sat, 26 Oct 2019 19:21:40 +0000 (UTC)
> From: Ergus <address@hidden>
> Cc: address@hidden, address@hidden
> 
> Before `merge_named_face` filtered the call to `merge_face_vectors` if the 
> filter parameter (lets say :extend
> in our case) was `nil` or `undefined`. That was how the attr_filter worked. 
> 
> But in this case it is actually wrong when the face was inherited and the 
> attribute was `undefined` because
> maybe the `parent` face define the filter parameter to `non-nil`. 
> 
> So now `merge_named_face` calls `merge_face_vectors` if the parameter is 
> undefined too, and
> `merge_face_vectors` internally conditions if the merge is needed. The 
> problem is that the merge with the
> parent faces was always made writing the TO vector (in place) as it was not 
> conditional, but we don't know in
> advance if the parent (or the grand-parents) define the filter attribute to 
> non-nil 
> 
> So what I did in the `undefined` case was to make a copy of the TO vector 
> (tmp) and merge_ref there instead
> of for TO, after the merge I check if the attribute is set, and if so, then I 
> copy it into TO and continue with the
> merge. 

I understood all that, but the changes include more than what you
described (and your original message even said that you fixed a couple
of other bugs as well).  Those other things is what I was asking
about.  Just do

  git diff ...origin/fix/inherit_extend_face

in the master branch, and you will see those other changes right away.
For example, I see 2 comments deleted, and something about
stretch_ascent(?).  What is this stuff, and what does it solve?

Thanks.



reply via email to

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