diff options
author | Eli Zaretskii <eliz@gnu.org> | 2020-07-30 16:56:36 +0300 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2020-07-30 16:56:36 +0300 |
commit | 35564bea4d73bc266743216599d01d644aed6fd8 (patch) | |
tree | 8f00c6199d19dceec8d4ad13b96c1a782f283f19 /src | |
parent | 50ea5b871dd264e3a7fd6c3977e021f1a365cb5f (diff) | |
download | emacs-35564bea4d73bc266743216599d01d644aed6fd8.tar.gz |
Fix face extension past EOL in overlay strings
* src/xdisp.c (face_at_pos): Pass ATTR_FILTER to
face_for_overlay_string.
* src/xfaces.c (face_for_overlay_string): Accept an additional
argument ATTR_INDEX and pass it to merge_face_ref for merging the
face at POS. This ensures a face from buffer text will not be
merged unless it specifies the :extend attribute. (Bug#42552)
* src/dispextern.h (face_for_overlay_string): Adjust prototype.
Diffstat (limited to 'src')
-rw-r--r-- | src/dispextern.h | 2 | ||||
-rw-r--r-- | src/xdisp.c | 2 | ||||
-rw-r--r-- | src/xfaces.c | 5 |
3 files changed, 5 insertions, 4 deletions
diff --git a/src/dispextern.h b/src/dispextern.h index e1d6eddc419..311867a0c8c 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -3538,7 +3538,7 @@ void recompute_basic_faces (struct frame *); int face_at_buffer_position (struct window *, ptrdiff_t, ptrdiff_t *, ptrdiff_t, bool, int, enum lface_attribute_index); int face_for_overlay_string (struct window *, ptrdiff_t, ptrdiff_t *, ptrdiff_t, - bool, Lisp_Object); + bool, Lisp_Object, enum lface_attribute_index); int face_at_string_position (struct window *, Lisp_Object, ptrdiff_t, ptrdiff_t, ptrdiff_t *, enum face_id, bool, enum lface_attribute_index); diff --git a/src/xdisp.c b/src/xdisp.c index eb7f3e7baa1..fc17014c029 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -4339,7 +4339,7 @@ face_at_pos (const struct it *it, enum lface_attribute_index attr_filter) (IT_CHARPOS (*it) + TEXT_PROP_DISTANCE_LIMIT), false, - from_overlay); + from_overlay, attr_filter); } else { diff --git a/src/xfaces.c b/src/xfaces.c index c4a4e1c94f3..585cfa1cf4a 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -6475,7 +6475,8 @@ face_at_buffer_position (struct window *w, ptrdiff_t pos, int face_for_overlay_string (struct window *w, ptrdiff_t pos, ptrdiff_t *endptr, ptrdiff_t limit, - bool mouse, Lisp_Object overlay) + bool mouse, Lisp_Object overlay, + enum lface_attribute_index attr_filter) { struct frame *f = XFRAME (w->frame); Lisp_Object attrs[LFACE_VECTOR_SIZE]; @@ -6514,7 +6515,7 @@ face_for_overlay_string (struct window *w, ptrdiff_t pos, /* Merge in attributes specified via text properties. */ if (!NILP (prop)) - merge_face_ref (w, f, prop, attrs, true, NULL, 0); + merge_face_ref (w, f, prop, attrs, true, NULL, attr_filter); *endptr = endpos; |