diff lisp/faces.el @ 373:6240c7796c7a r21-2b2

Import from CVS: tag r21-2b2
author cvs
date Mon, 13 Aug 2007 11:04:06 +0200
parents cc15677e0335
children d883f39b8495
line wrap: on
line diff
--- a/lisp/faces.el	Mon Aug 13 11:03:09 2007 +0200
+++ b/lisp/faces.el	Mon Aug 13 11:04:06 2007 +0200
@@ -318,7 +318,6 @@
                     For valid instantiators, see `face-boolean-specifier-p'.
 
  dim                Dim all text covered by this face.
-                    Only used by faces on TTY devices.
                     For valid instantiators, see `face-boolean-specifier-p'.
 
  blinking           Blink all text covered by this face.
@@ -690,12 +689,12 @@
   (set-face-property face 'highlight highlight-p locale tag-set how-to-add))
 
 (defun face-dim-p (face &optional domain default no-fallback)
-  "Return t if FACE is dimmed in DOMAIN (TTY domains only).
+  "Return t if FACE is dimmed in DOMAIN.
 See `face-property-instance' for the semantics of the DOMAIN argument."
   (face-property-instance face 'dim domain default no-fallback))
 
 (defun set-face-dim-p (face dim-p &optional locale tag-set how-to-add)
-  "Change whether FACE is dimmed in LOCALE (TTY locales only).
+  "Change whether FACE is dimmed in LOCALE.
 DIM-P is normally a face-boolean instantiator; see
  `face-boolean-specifier-p'.
 See `set-face-property' for the semantics of the LOCALE, TAG-SET, and
@@ -750,9 +749,10 @@
   (if (not (valid-specifier-domain-p domain))
       (error "Invalid specifier domain"))
   (let ((device (dfw-device domain))
-	(common-props '(foreground background font display-table underline))
+	(common-props '(foreground background font display-table underline
+				   dim))
 	(win-props '(background-pixmap strikethru))
-	(tty-props '(highlight dim blinking reverse)))
+	(tty-props '(highlight blinking reverse)))
 
     ;; First check the properties which are used in common between the
     ;; x and tty devices.  Then, check those properties specific to
@@ -1256,6 +1256,39 @@
 	 (setq default-custom-frame-properties
 	       (extract-custom-frame-properties (selected-frame))))))
 
+(defun face-spec-update-all-matching (spec display plist)
+  "Update all entries in the face spec that could match display to
+have the entries from the new plist and return the new spec"
+  (mapcar
+   (lambda (e)
+     (let ((entries (car e))
+	   (options (cadr e))
+	   (match t)
+	   dplist
+	   (new-options plist)
+	   )
+       (unless (eq display t)
+	 (mapc (lambda (arg)
+		 (setq dplist (plist-put dplist (car arg) (cadr arg))))
+	       display))
+       (unless (eq entries t)
+	 (mapc (lambda (arg)
+		 (setq match (and match (eq (cadr arg)
+					    (plist-get
+					      dplist (car arg)
+					      (cadr arg))))))
+	       entries))
+       (if (not match)
+	   e
+	 (while new-options
+	   (setq options
+		 (plist-put options (car new-options) (cadr new-options)))
+	   (setq new-options (cddr new-options)))
+	 (list entries options))))
+   (copy-sequence spec)))
+       
+		    
+
 (defun face-spec-set-match-display (display &optional frame)
   "Return non-nil if DISPLAY matches FRAME.
 DISPLAY is part of a spec such as can be used in `defface'.