[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 6ee3675: Fix face extension of overlay strings on buffer text wit
From: |
Eli Zaretskii |
Subject: |
master 6ee3675: Fix face extension of overlay strings on buffer text with faces |
Date: |
Thu, 12 Dec 2019 06:26:18 -0500 (EST) |
branch: master
commit 6ee3675dad6f2404d4177aa1ec8eada7286994f4
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>
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)
---
src/xdisp.c | 24 +++++++++++++++++++-----
1 file changed, 19 insertions(+), 5 deletions(-)
diff --git a/src/xdisp.c b/src/xdisp.c
index 08c6927..bfc48e3 100644
--- a/src/xdisp.c
+++ b/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,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 6ee3675: Fix face extension of overlay strings on buffer text with faces,
Eli Zaretskii <=