]> code.delx.au - gnu-emacs/blobdiff - lisp/faces.el
*** empty log message ***
[gnu-emacs] / lisp / faces.el
index 4439390aa48ab5964c72f36ed1f18065fcf52558..f721ac0a7e868fdcf1b8b0193243eb0dbbe1dbe0 100644 (file)
@@ -148,7 +148,7 @@ If the face already exists, it is left unmodified.  Value is FACE."
 If NEW-FACE already exists as a face, it is modified to be like
 OLD-FACE.  If it doesn't already exist, it is created.
 
-If the optional argument FRAME is given as a frame,  NEW-FACE is
+If the optional argument FRAME is given as a frame, NEW-FACE is
 changed on FRAME only.
 If FRAME is t, the frame-independent default specification for OLD-FACE
 is copied to NEW-FACE.
@@ -196,13 +196,10 @@ should not be used anymore."
 If the optional argument FRAME is given, this gets the face NAME for
 that frame; otherwise, it uses the selected frame.
 If FRAME is the symbol t, then the global, non-frame face is returned.
-If NAME is already a face, it is simply returned.
-
-This function is defined for compatibility with Emacs 20.2.  It
-should not be used anymore."
+If NAME is already a face, it is simply returned."
   (or (facep name)
       (check-face name)))
-(make-obsolete 'internal-get-face "See `facep' and `check-face'." "21.1")
+(make-obsolete 'internal-get-face "see `facep' and `check-face'." "21.1")
 
 \f
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -227,7 +224,7 @@ Value is FACE."
 ;; support faces in display table entries.
 
 (defun face-id (face &optional frame)
-  "Return the interNal ID of face with name FACE.
+  "Return the internal ID of face with name FACE.
 If optional argument FRAME is nil or omitted, use the selected frame."
   (check-face face)
   (get face 'face))
@@ -1205,7 +1202,7 @@ The sample text is a string that comes from the variable
 
 (defun describe-face (face &optional frame)
   "Display the properties of face FACE on FRAME.
-Interactevely, FACE defaults to the faces of the character after point
+Interactively, FACE defaults to the faces of the character after point
 and FRAME defaults to the selected frame.
 
 If the optional argument FRAME is given, report on face FACE in that frame.
@@ -1245,7 +1242,7 @@ If FRAME is omitted or nil, use the selected frame."
              (princ (concat " (" customize-label ")\n"))
              (insert "Documentation: "
                      (or (face-documentation f)
-                         "not documented as a face.")
+                         "Not documented as a face.")
                      "\n\n")
              (with-current-buffer standard-output
                (save-excursion
@@ -1318,6 +1315,8 @@ If FRAME is nil, the current FRAME is used."
                        ((eq req 'background)
                         (memq (frame-parameter frame 'background-mode)
                               options))
+                       ((eq req 'supports)
+                        (display-supports-face-attributes-p options frame))
                        (t (error "Unknown req `%S' with options `%S'"
                                  req options)))))
     match))
@@ -1477,6 +1476,33 @@ If omitted or nil, that stands for the selected frame's display."
      (t
       (> (tty-color-gray-shades display) 2)))))
 
+(defun display-supports-face-attributes-p (attributes &optional display)
+  "Return non-nil if all the face attributes in ATTRIBUTES are supported.
+The optional argument DISPLAY can be a display name, a frame, or
+nil (meaning the selected frame's display)
+
+The definition of `supported' is somewhat heuristic, but basically means
+that a face containing all the attributes in ATTRIBUTES, when merged
+with the default face for display, can be represented in a way that's
+
+ (1) different in appearance than the default face, and
+ (2) `close in spirit' to what the attributes specify, if not exact.
+
+Point (2) implies that a `:weight black' attribute will be satisified by
+any display that can display bold, and a `:foreground \"yellow\"' as long
+as it can display a yellowish color, but `:slant italic' will _not_ be
+satisified by the tty display code's automatic substitution of a `dim'
+face for italic."
+  (let ((frame
+        (if (framep display)
+            display
+          (car (frames-on-display-list display)))))
+    ;; For now, we assume that non-tty displays can support everything.
+    ;; Later, we should add the ability to query about specific fonts,
+    ;; colors, etc.
+    (or (memq (framep frame) '(x w32 mac))
+       (tty-supports-face-attributes-p attributes frame))))
+
 \f
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;; Background mode.
@@ -1726,7 +1752,7 @@ created."
 ;; Update a frame's faces when we change its default font.
 
 (defalias 'frame-update-faces 'ignore)
-(make-obsolete 'frame-update-faces "No longer necessary" "21.1")
+(make-obsolete 'frame-update-faces "no longer necessary." "21.1")
 
 ;; Update the colors of FACE, after FRAME's own colors have been
 ;; changed.
@@ -1782,9 +1808,7 @@ created."
 (put 'modeline-inactive 'face-alias 'mode-line-inactive)
 
 (defface header-line
-  '((t
-     :inherit mode-line)
-    (((type tty))
+  '((((type tty))
      ;; This used to be `:inverse-video t', but that doesn't look very
      ;; good when combined with inverse-video mode-lines and multiple
      ;; windows.  Underlining looks better, and is more consistent with
@@ -1797,20 +1821,24 @@ created."
      :underline t)
     (((class color grayscale) (background light))
      :background "grey90" :foreground "grey20"
-     :box nil)
+     :box nil
+     :inherit mode-line)
     (((class color grayscale) (background dark))
      :background "grey20" :foreground "grey90"
-     :box nil)
+     :box nil
+     :inherit mode-line)
     (((class mono) (background light))
      :background "white" :foreground "black"
      :inverse-video nil
      :box nil
-     :underline t)
+     :underline t
+     :inherit mode-line)
     (((class mono) (background dark))
      :background "black" :foreground "white"
      :inverse-video nil
      :box nil
-     :underline t))
+     :underline t
+     :inherit mode-line))
   "Basic header-line face."
   :version "21.1"
   :group 'basic-faces)
@@ -1914,7 +1942,16 @@ created."
   :group 'basic-faces)
 
 
-(defface italic '((t :slant italic))
+(defface italic
+  '((((supports :slant italic))
+     :slant italic)
+    (((supports :underline t))
+     :underline t)
+    (t
+     ;; default to italic, even it doesn't appear to be supported,
+     ;; because in some cases the display engine will do it's own
+     ;; workaround (to `dim' on ttys)
+     :slant italic))
   "Basic italic font."
   :group 'basic-faces)