]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix face extension past EOL in overlay strings
authorEli Zaretskii <eliz@gnu.org>
Thu, 30 Jul 2020 13:56:36 +0000 (16:56 +0300)
committerEli Zaretskii <eliz@gnu.org>
Thu, 30 Jul 2020 13:56:36 +0000 (16:56 +0300)
* 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.

src/dispextern.h
src/xdisp.c
src/xfaces.c

index e1d6eddc419eb11b76551602eab724b3293f2b01..311867a0c8cb4d7b4b14740f5864ad8fa95c9348 100644 (file)
@@ -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);
index eb7f3e7baa1063ccff6f6cc26a6a7c0e8db6728e..fc17014c0297459af81f356751f473316fa2e572 100644 (file)
@@ -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
        {
index c4a4e1c94f38972d35ff68c983b5d6aa6f3fe0b0..585cfa1cf4ac2c0395d10d54a4ea3c80066467d3 100644 (file)
@@ -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;