diff options
| author | Eli Zaretskii | 2020-07-30 16:56:36 +0300 |
|---|---|---|
| committer | Eli Zaretskii | 2020-08-13 16:38:44 +0300 |
| commit | f946e48bf5bfe051e77eee4c3c19633cbbb6e8c2 (patch) | |
| tree | 6e1e65e86cb7eae8ab8593348266d125c5cce9f2 /src | |
| parent | 63f614d76c115d1d4af447ce90177cf0183b5757 (diff) | |
| download | emacs-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.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 724aad4227e..6b72e68d315 100644 --- a/src/dispextern.h +++ b/src/dispextern.h | |||
| @@ -3559,7 +3559,7 @@ void recompute_basic_faces (struct frame *); | |||
| 3559 | int face_at_buffer_position (struct window *, ptrdiff_t, ptrdiff_t *, | 3559 | int 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); |
| 3561 | int face_for_overlay_string (struct window *, ptrdiff_t, ptrdiff_t *, ptrdiff_t, | 3561 | int face_for_overlay_string (struct window *, ptrdiff_t, ptrdiff_t *, ptrdiff_t, |
| 3562 | bool, Lisp_Object); | 3562 | bool, Lisp_Object, enum lface_attribute_index); |
| 3563 | int face_at_string_position (struct window *, Lisp_Object, ptrdiff_t, ptrdiff_t, | 3563 | int 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, | |||
| 6330 | int | 6330 | int |
| 6331 | face_for_overlay_string (struct window *w, ptrdiff_t pos, | 6331 | face_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 | ||