]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow the fringe face to be remapped locally in a buffer
authorEli Zaretskii <eliz@gnu.org>
Sat, 3 Nov 2018 10:39:59 +0000 (12:39 +0200)
committerEli Zaretskii <eliz@gnu.org>
Sat, 3 Nov 2018 10:39:59 +0000 (12:39 +0200)
* src/fringe.c (draw_window_fringes): Switch to window's
buffer to get the local value of face-remapping-alist, if
necessary.  (Bug#33244)
* src/xfaces.c (syms_of_xfaces) <Qface_remapping_alist>: New
DEFSYM.

src/fringe.c
src/xfaces.c

index 6a44de1bf248043809ea243f861bc0881e98bd46..a1016ad349c8cdf23c94adb29df760a8f1f79e55 100644 (file)
@@ -909,6 +909,12 @@ draw_window_fringes (struct window *w, bool no_fringe_p)
   if (w->pseudo_window_p)
     return updated_p;
 
+  /* We must switch to the window's buffer to use its local value of
+     the fringe face, in case it's been remapped in face-remapping-alist.  */
+  Lisp_Object window_buffer = w->contents;
+  struct buffer *oldbuf = current_buffer;
+  set_buffer_internal_1 (XBUFFER (window_buffer));
+
   /* Must draw line if no fringe */
   if (no_fringe_p
       && (WINDOW_LEFT_FRINGE_WIDTH (w) == 0
@@ -926,6 +932,8 @@ draw_window_fringes (struct window *w, bool no_fringe_p)
       updated_p = 1;
     }
 
+  set_buffer_internal_1 (oldbuf);
+
   return updated_p;
 }
 
index 50593f6804cb95a113d2aef99dcfd0a4d38e7e17..6e06d56ba1d4ba6c6e78255ea64c53417d47e039 100644 (file)
@@ -6755,6 +6755,7 @@ Because Emacs normally only redraws screen areas when the underlying
 buffer contents change, you may need to call `redraw-display' after
 changing this variable for it to take effect.  */);
   Vface_remapping_alist = Qnil;
+  DEFSYM (Qface_remapping_alist,"face-remapping-alist");
 
   DEFVAR_LISP ("face-font-rescale-alist", Vface_font_rescale_alist,
               doc: /* Alist of fonts vs the rescaling factors.