aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii2020-07-30 16:56:36 +0300
committerEli Zaretskii2020-08-13 16:38:44 +0300
commitf946e48bf5bfe051e77eee4c3c19633cbbb6e8c2 (patch)
tree6e1e65e86cb7eae8ab8593348266d125c5cce9f2 /src
parent63f614d76c115d1d4af447ce90177cf0183b5757 (diff)
downloademacs-f946e48bf5bfe051e77eee4c3c19633cbbb6e8c2.tar.gz
emacs-f946e48bf5bfe051e77eee4c3c19633cbbb6e8c2.zip
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. (cherry picked from commit 35564bea4d73bc266743216599d01d644aed6fd8)
Diffstat (limited to 'src')
-rw-r--r--src/dispextern.h2
-rw-r--r--src/xdisp.c2
-rw-r--r--src/xfaces.c5
3 files changed, 5 insertions, 4 deletions
diff --git a/src/dispextern.h b/src/dispextern.h
index 724aad4227e..6b72e68d315 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -3559,7 +3559,7 @@ void recompute_basic_faces (struct frame *);
3559int face_at_buffer_position (struct window *, ptrdiff_t, ptrdiff_t *, 3559int face_at_buffer_position (struct window *, ptrdiff_t, ptrdiff_t *,
3560 ptrdiff_t, bool, int, enum lface_attribute_index); 3560 ptrdiff_t, bool, int, enum lface_attribute_index);
3561int face_for_overlay_string (struct window *, ptrdiff_t, ptrdiff_t *, ptrdiff_t, 3561int face_for_overlay_string (struct window *, ptrdiff_t, ptrdiff_t *, ptrdiff_t,
3562 bool, Lisp_Object); 3562 bool, Lisp_Object, enum lface_attribute_index);
3563int face_at_string_position (struct window *, Lisp_Object, ptrdiff_t, ptrdiff_t, 3563int face_at_string_position (struct window *, Lisp_Object, ptrdiff_t, ptrdiff_t,
3564 ptrdiff_t *, enum face_id, bool, 3564 ptrdiff_t *, enum face_id, bool,
3565 enum lface_attribute_index); 3565 enum lface_attribute_index);
diff --git a/src/xdisp.c b/src/xdisp.c
index a819f0aca38..37fe3800784 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -4322,7 +4322,7 @@ face_at_pos (const struct it *it, enum lface_attribute_index attr_filter)
4322 (IT_CHARPOS (*it) 4322 (IT_CHARPOS (*it)
4323 + TEXT_PROP_DISTANCE_LIMIT), 4323 + TEXT_PROP_DISTANCE_LIMIT),
4324 false, 4324 false,
4325 from_overlay); 4325 from_overlay, attr_filter);
4326 } 4326 }
4327 else 4327 else
4328 { 4328 {
diff --git a/src/xfaces.c b/src/xfaces.c
index 711ec48bbdd..12eb7de66e4 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -6330,7 +6330,8 @@ face_at_buffer_position (struct window *w, ptrdiff_t pos,
6330int 6330int
6331face_for_overlay_string (struct window *w, ptrdiff_t pos, 6331face_for_overlay_string (struct window *w, ptrdiff_t pos,
6332 ptrdiff_t *endptr, ptrdiff_t limit, 6332 ptrdiff_t *endptr, ptrdiff_t limit,
6333 bool mouse, Lisp_Object overlay) 6333 bool mouse, Lisp_Object overlay,
6334 enum lface_attribute_index attr_filter)
6334{ 6335{
6335 struct frame *f = XFRAME (w->frame); 6336 struct frame *f = XFRAME (w->frame);
6336 Lisp_Object attrs[LFACE_VECTOR_SIZE]; 6337 Lisp_Object attrs[LFACE_VECTOR_SIZE];
@@ -6369,7 +6370,7 @@ face_for_overlay_string (struct window *w, ptrdiff_t pos,
6369 6370
6370 /* Merge in attributes specified via text properties. */ 6371 /* Merge in attributes specified via text properties. */
6371 if (!NILP (prop)) 6372 if (!NILP (prop))
6372 merge_face_ref (w, f, prop, attrs, true, NULL, 0); 6373 merge_face_ref (w, f, prop, attrs, true, NULL, attr_filter);
6373 6374
6374 *endptr = endpos; 6375 *endptr = endpos;
6375 6376