diff lisp/faces.el @ 5617:b0d712bbc2a6

The "flush" face property. -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2011-12-23 Didier Verna <didier@xemacs.org> * faces.h (struct Lisp_Face): New 'flush slot. * faces.h (struct face_cachel): New 'flush and 'flush_specified flags. * faces.h (WINDOW_FACE_CACHEL_FLUSH_P): * faces.h (FACE_FLUSH_P): New macros. * faces.c: Declare Qflush. * lisp.h: Externalize it. * faces.c (syms_of_faces): Define it. * faces.c (vars_of_faces): Update built-in face specifiers. * faces.c (complex_vars_of_faces): Update specifier fallbacks. * faces.c (mark_face): * faces.c (face_equal): * faces.c (face_getprop): * faces.c (face_putprop): * faces.c (face_remprop): * faces.c (face_plist): * faces.c (reset_face): * faces.c (update_face_inheritance_mapper): * faces.c (Fmake_face): * faces.c (update_face_cachel_data): * faces.c (merge_face_cachel_data): * faces.c (Fcopy_face): * fontcolor.c (face_boolean_validate): Handle the flush property. * redisplay.h (struct display_line): Rename 'default_findex slot to clearer name 'clear_findex. * redisplay.h (DISPLAY_LINE_INIT): Update accordingly. * redisplay-output.c (compare_display_blocks): * redisplay-output.c (output_display_line): * redisplay-output.c (redisplay_output_window): * redisplay.c (regenerate_window_extents_only_changed): * redisplay.c (regenerate_window_incrementally): Update the comparison tests between the current and desired display lines to cope for different 'clear_findex values. * redisplay.c (create_text_block): Initialize the display line's 'clear_findex slot to DEFAULT_INDEX. Record a new 'clear_findex value when we encounter a newline character displayed in a flushed face. * redisplay.c (create_string_text_block): Record a new 'clear_findex value when we encounter a newline character displayed in a flushed face. lisp/ChangeLog addition: 2011-12-23 Didier Verna <didier@xemacs.org> * cl-macs.el (face-flush-p): New defsetf. * faces.el (set-face-property): Document the flush property. * faces.el (face-flush-p): New function. * faces.el (set-face-flush-p): New function. * faces.el (face-equal): * cus-face.el (custom-face-attributes): * x-faces.el (x-init-face-from-resources): * x-faces.el (make-face-x-resource-internal): Handle the flush property.
author Didier Verna <didier@xemacs.org>
date Fri, 23 Dec 2011 10:56:16 +0100
parents 79a1a759ec3d
children 75ad4969a16d
line wrap: on
line diff
--- a/lisp/faces.el	Thu Dec 22 15:02:02 2011 +0000
+++ b/lisp/faces.el	Fri Dec 23 10:56:16 2011 +0100
@@ -361,6 +361,12 @@
                     Only used by faces on TTY devices.
                     For valid instantiators, see `make-face-boolean-specifier'.
 
+ flush              When the end of line is reached in a flushing face, also
+                    paint the rest of the line (up to the right border) with
+                    that face. The effect will only be visible if the face has
+                    a non default background.
+                    For valid instantiators, see `make-face-boolean-specifier'.
+
  inherit	    Face name or face object from which to inherit attributes,
                     or a list of such elements.  Attributes from inherited
                     faces are merged into the face like an underlying face
@@ -897,6 +903,20 @@
   (interactive (face-interactive "reverse-p" "reversed"))
   (set-face-property face 'reverse reverse-p locale tag-set how-to-add))
 
+(defun face-flush-p (face &optional domain default no-fallback)
+  "Return t if FACE is flushed in DOMAIN.
+See `face-property-instance' for the semantics of the DOMAIN argument."
+  (face-property-instance face 'flush domain default no-fallback))
+
+(defun set-face-flush-p (face flush-p &optional locale tag-set how-to-add)
+  "Change whether FACE is flushed in LOCALE.
+FLUSH-P is normally a face-boolean instantiator; see
+ `make-face-boolean-specifier'.
+See `set-face-property' for the semantics of the LOCALE, TAG-SET, and
+ HOW-TO-ADD arguments."
+  (interactive (face-interactive "flush-p" "flushed"))
+  (set-face-property face 'flush flush-p locale tag-set how-to-add))
+
 
 (defun face-property-equal (face1 face2 prop domain)
   (equal (face-property-instance face1 prop domain)
@@ -916,7 +936,7 @@
       (error "Invalid specifier domain"))
   (let ((device (dfw-device domain))
 	(common-props '(foreground background font display-table underline
-				   dim inherit))
+				   dim inherit flush))
 	(win-props '(background-pixmap background-placement strikethru))
 	(tty-props '(highlight blinking reverse)))