mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-23 07:19:15 +00:00
Fix face extension of overlay strings on buffer text with faces
* src/xdisp.c (face_at_pos): Reject the face returned by 'underlying_face_id' when we are filtering by face attribute, and that attribute's value fails the filter test. (Bug#38563)
This commit is contained in:
parent
d57bb0c323
commit
6ee3675dad
24
src/xdisp.c
24
src/xdisp.c
@ -4243,11 +4243,25 @@ face_at_pos (const struct it *it, enum lface_attribute_index attr_filter)
|
||||
the display string do. This sounds like a design bug,
|
||||
but Emacs always did that since v21.1, so changing that
|
||||
might be a big deal. */
|
||||
base_face_id = it->string_from_prefix_prop_p
|
||||
? (!NILP (Vface_remapping_alist)
|
||||
? lookup_basic_face (it->w, it->f, DEFAULT_FACE_ID)
|
||||
: DEFAULT_FACE_ID)
|
||||
: underlying_face_id (it);
|
||||
bool use_default = (it->string_from_prefix_prop_p != 0);
|
||||
if (!use_default)
|
||||
{
|
||||
base_face_id = underlying_face_id (it);
|
||||
/* Reject the underlying face, if that face is different
|
||||
from the iterator face, and we filter by attr_filter,
|
||||
and that face's value of the filter attribute is nil
|
||||
or unspecified; use the default face instead. */
|
||||
struct face *bf = FACE_FROM_ID_OR_NULL (it->f, base_face_id);
|
||||
if (base_face_id != it->base_face_id
|
||||
&& attr_filter > 0
|
||||
&& (NILP (bf->lface[attr_filter])
|
||||
|| EQ (bf->lface[attr_filter], Qunspecified)))
|
||||
use_default = true;
|
||||
}
|
||||
if (use_default)
|
||||
base_face_id = (!NILP (Vface_remapping_alist)
|
||||
? lookup_basic_face (it->w, it->f, DEFAULT_FACE_ID)
|
||||
: DEFAULT_FACE_ID);
|
||||
}
|
||||
|
||||
return face_at_string_position (it->w,
|
||||
|
Loading…
Reference in New Issue
Block a user