annotate lisp/faces.el @ 82724:3e342b7c26dc

Move tutorials from etc/ to etc/tutorials/
author Glenn Morris <rgm@gnu.org>
date Wed, 22 Aug 2007 07:41:21 +0000
parents b8c796068320
children 984b1dfd7601 cd5e99697764
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1 ;;; faces.el --- Lisp faces
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2
64762
41bb365f41c4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64724
diff changeset
3 ;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
75347
e3694f1cb928 Add 2007 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 75166
diff changeset
4 ;; 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
5
38697
a19197c6442f Keyword added and FSF specified as Maintainer.
Pavel Janík <Pavel@Janik.cz>
parents: 38233
diff changeset
6 ;; Maintainer: FSF
45078
829beb9a6a4b Follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 44896
diff changeset
7 ;; Keywords: internal
38697
a19197c6442f Keyword added and FSF specified as Maintainer.
Pavel Janík <Pavel@Janik.cz>
parents: 38233
diff changeset
8
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
10
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
78236
9355f9b7bbff Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents: 76731
diff changeset
13 ;; the Free Software Foundation; either version 3, or (at your option)
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
14 ;; any later version.
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
15
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
19 ;; GNU General Public License for more details.
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
20
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64091
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63984
diff changeset
23 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63984
diff changeset
24 ;; Boston, MA 02110-1301, USA.
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
25
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
26 ;;; Commentary:
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
27
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
28 ;;; Code:
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
29
10107
2af74ff52cd0 At compile time, discard any defsubr definitions
Richard M. Stallman <rms@gnu.org>
parents: 10105
diff changeset
30 (eval-when-compile
31528
a461cad7a942 (face-x-resources): Make custom type more specific.
Dave Love <fx@gnu.org>
parents: 31500
diff changeset
31 (require 'cl)
a461cad7a942 (face-x-resources): Make custom type more specific.
Dave Love <fx@gnu.org>
parents: 31500
diff changeset
32 ;; Warning suppression -- can't require x-win in batch:
a461cad7a942 (face-x-resources): Make custom type more specific.
Dave Love <fx@gnu.org>
parents: 31500
diff changeset
33 (autoload 'xw-defined-colors "x-win"))
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
34
65289
f6a81af3abe8 (help-xref-stack-item): Add defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 65084
diff changeset
35 (defvar help-xref-stack-item)
2744
f4fc0c4c76f9 Re-arranged stuff to put defsubst accessors at the top
Jim Blandy <jimb@redhat.com>
parents: 2715
diff changeset
36
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
37 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
38 ;;; Font selection.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
39 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
40
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
41 (defgroup font-selection nil
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
42 "Influencing face font selection."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
43 :group 'faces)
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
44
12562
a9b08e50d6ec (x-create-frame-with-faces): Set background-mode
Karl Heuer <kwzh@gnu.org>
parents: 12475
diff changeset
45
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
46 (defcustom face-font-selection-order
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
47 '(:width :height :weight :slant)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
48 "*A list specifying how face font selection chooses fonts.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
49 Each of the four symbols `:width', `:height', `:weight', and `:slant'
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
50 must appear once in the list, and the list must not contain any other
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
51 elements. Font selection tries to find a best matching font for
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
52 those face attributes first that appear first in the list. For
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
53 example, if `:slant' appears before `:height', font selection first
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
54 tries to find a font with a suitable slant, even if this results in
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
55 a font height that isn't optimal."
48713
a91fa6973510 (face-font-selection-order)
Andreas Schwab <schwab@suse.de>
parents: 48522
diff changeset
56 :tag "Font selection order"
30306
7a694e8efd12 (face-font-selection-order)
Gerd Moellmann <gerd@gnu.org>
parents: 30188
diff changeset
57 :type '(list symbol symbol symbol symbol)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
58 :group 'font-selection
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
59 :set #'(lambda (symbol value)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
60 (set-default symbol value)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
61 (internal-set-font-selection-order value)))
17522
209c61e51bd0 (frame-set-background-mode): New function.
Richard M. Stallman <rms@gnu.org>
parents: 17386
diff changeset
62
33371
8259eb8d96c2 (face-font-registry-alternatives): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents: 33008
diff changeset
63
8259eb8d96c2 (face-font-registry-alternatives): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents: 33008
diff changeset
64 ;; This is defined originally in xfaces.c.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
65 (defcustom face-font-family-alternatives
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
66 '(("courier" "fixed")
27888
3e1c17057b79 (face-font-family-alternatives): Add arial to helv.
Jason Rumney <jasonr@gnu.org>
parents: 27831
diff changeset
67 ("helv" "helvetica" "arial" "fixed"))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
68 "*Alist of alternative font family names.
42705
963ac6b8fb83 Fix typos.
Pavel Janík <Pavel@Janik.cz>
parents: 42670
diff changeset
69 Each element has the form (FAMILY ALTERNATIVE1 ALTERNATIVE2 ...).
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
70 If fonts of family FAMILY can't be loaded, try ALTERNATIVE1, then
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
71 ALTERNATIVE2 etc."
48713
a91fa6973510 (face-font-selection-order)
Andreas Schwab <schwab@suse.de>
parents: 48522
diff changeset
72 :tag "Alternative font families to try"
30306
7a694e8efd12 (face-font-selection-order)
Gerd Moellmann <gerd@gnu.org>
parents: 30188
diff changeset
73 :type '(repeat (repeat string))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
74 :group 'font-selection
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
75 :set #'(lambda (symbol value)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
76 (set-default symbol value)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
77 (internal-set-alternative-font-family-alist value)))
13725
9729af46fe60 Take optional arg FRAME.
Simon Marshall <simon@gnu.org>
parents: 13704
diff changeset
78
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
79
33371
8259eb8d96c2 (face-font-registry-alternatives): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents: 33008
diff changeset
80 ;; This is defined originally in xfaces.c.
8259eb8d96c2 (face-font-registry-alternatives): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents: 33008
diff changeset
81 (defcustom face-font-registry-alternatives
39549
044b46ec5fff (face-font-registry-alternatives) [windows-nt]: Make
Andrew Innes <andrewi@gnu.org>
parents: 38697
diff changeset
82 (if (eq system-type 'windows-nt)
42969
bdcf2b5f4ae2 (face-font-registry-alternatives) [windows-nt]: Add
Jason Rumney <jasonr@gnu.org>
parents: 42705
diff changeset
83 '(("iso8859-1" "ms-oemlatin")
bdcf2b5f4ae2 (face-font-registry-alternatives) [windows-nt]: Add
Jason Rumney <jasonr@gnu.org>
parents: 42705
diff changeset
84 ("gb2312.1980" "gb2312")
39549
044b46ec5fff (face-font-registry-alternatives) [windows-nt]: Make
Andrew Innes <andrewi@gnu.org>
parents: 38697
diff changeset
85 ("jisx0208.1990" "jisx0208.1983" "jisx0208.1978")
044b46ec5fff (face-font-registry-alternatives) [windows-nt]: Make
Andrew Innes <andrewi@gnu.org>
parents: 38697
diff changeset
86 ("ksc5601.1989" "ksx1001.1992" "ksc5601.1987")
044b46ec5fff (face-font-registry-alternatives) [windows-nt]: Make
Andrew Innes <andrewi@gnu.org>
parents: 38697
diff changeset
87 ("muletibetan-2" "muletibetan-0"))
044b46ec5fff (face-font-registry-alternatives) [windows-nt]: Make
Andrew Innes <andrewi@gnu.org>
parents: 38697
diff changeset
88 '(("gb2312.1980" "gb2312.80&gb8565.88" "gbk*")
044b46ec5fff (face-font-registry-alternatives) [windows-nt]: Make
Andrew Innes <andrewi@gnu.org>
parents: 38697
diff changeset
89 ("jisx0208.1990" "jisx0208.1983" "jisx0208.1978")
044b46ec5fff (face-font-registry-alternatives) [windows-nt]: Make
Andrew Innes <andrewi@gnu.org>
parents: 38697
diff changeset
90 ("ksc5601.1989" "ksx1001.1992" "ksc5601.1987")
044b46ec5fff (face-font-registry-alternatives) [windows-nt]: Make
Andrew Innes <andrewi@gnu.org>
parents: 38697
diff changeset
91 ("muletibetan-2" "muletibetan-0")))
33371
8259eb8d96c2 (face-font-registry-alternatives): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents: 33008
diff changeset
92 "*Alist of alternative font registry names.
42705
963ac6b8fb83 Fix typos.
Pavel Janík <Pavel@Janik.cz>
parents: 42670
diff changeset
93 Each element has the form (REGISTRY ALTERNATIVE1 ALTERNATIVE2 ...).
34162
08b928780fd1 (face-font-registry-alternatives): Add entries for CJK
Kenichi Handa <handa@m17n.org>
parents: 34018
diff changeset
94 If fonts of registry REGISTRY can be loaded, font selection
08b928780fd1 (face-font-registry-alternatives): Add entries for CJK
Kenichi Handa <handa@m17n.org>
parents: 34018
diff changeset
95 tries to find a best matching font among all fonts of registry
08b928780fd1 (face-font-registry-alternatives): Add entries for CJK
Kenichi Handa <handa@m17n.org>
parents: 34018
diff changeset
96 REGISTRY, ALTERNATIVE1, ALTERNATIVE2, and etc."
48713
a91fa6973510 (face-font-selection-order)
Andreas Schwab <schwab@suse.de>
parents: 48522
diff changeset
97 :tag "Alternative font registries to try"
33371
8259eb8d96c2 (face-font-registry-alternatives): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents: 33008
diff changeset
98 :type '(repeat (repeat string))
33419
21ac2c51ac59 (face-font-registry-alternatives): Add :version.
Dave Love <fx@gnu.org>
parents: 33371
diff changeset
99 :version "21.1"
33371
8259eb8d96c2 (face-font-registry-alternatives): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents: 33008
diff changeset
100 :group 'font-selection
8259eb8d96c2 (face-font-registry-alternatives): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents: 33008
diff changeset
101 :set #'(lambda (symbol value)
8259eb8d96c2 (face-font-registry-alternatives): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents: 33008
diff changeset
102 (set-default symbol value)
8259eb8d96c2 (face-font-registry-alternatives): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents: 33008
diff changeset
103 (internal-set-alternative-font-registry-alist value)))
8259eb8d96c2 (face-font-registry-alternatives): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents: 33008
diff changeset
104
8259eb8d96c2 (face-font-registry-alternatives): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents: 33008
diff changeset
105
2744
f4fc0c4c76f9 Re-arranged stuff to put defsubst accessors at the top
Jim Blandy <jimb@redhat.com>
parents: 2715
diff changeset
106
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
107 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
108 ;;; Creation, copying.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
109 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2744
f4fc0c4c76f9 Re-arranged stuff to put defsubst accessors at the top
Jim Blandy <jimb@redhat.com>
parents: 2715
diff changeset
110
3925
f286657c098e * faces.el (global-face-data): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 3911
diff changeset
111
2744
f4fc0c4c76f9 Re-arranged stuff to put defsubst accessors at the top
Jim Blandy <jimb@redhat.com>
parents: 2715
diff changeset
112 (defun face-list ()
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
113 "Return a list of all defined face names."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
114 (mapcar #'car face-new-frame-defaults))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
115
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
116
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
117 ;;; ### If not frame-local initialize by what X resources?
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
118
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
119 (defun make-face (face &optional no-init-from-resources)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
120 "Define a new face with name FACE, a symbol.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
121 NO-INIT-FROM-RESOURCES non-nil means don't initialize frame-local
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
122 variants of FACE from X resources. (X resources recognized are found
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
123 in the global variable `face-x-resources'.) If FACE is already known
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
124 as a face, leave it unmodified. Value is FACE."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
125 (interactive "SMake face: ")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
126 (unless (facep face)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
127 ;; Make frame-local faces (this also makes the global one).
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
128 (dolist (frame (frame-list))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
129 (internal-make-lisp-face face frame))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
130 ;; Add the face to the face menu.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
131 (when (fboundp 'facemenu-add-new-face)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
132 (facemenu-add-new-face face))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
133 ;; Define frame-local faces for all frames from X resources.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
134 (unless no-init-from-resources
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
135 (make-face-x-resource-internal face)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
136 face)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
137
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
138
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
139 (defun make-empty-face (face)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
140 "Define a new, empty face with name FACE.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
141 If the face already exists, it is left unmodified. Value is FACE."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
142 (interactive "SMake empty face: ")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
143 (make-face face 'no-init-from-resources))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
144
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
145
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
146 (defun copy-face (old-face new-face &optional frame new-frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
147 "Define a face just like OLD-FACE, with name NEW-FACE.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
148
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
149 If NEW-FACE already exists as a face, it is modified to be like
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
150 OLD-FACE. If it doesn't already exist, it is created.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
151
47258
86c1fc3c48f5 (copy-face): Fix spacing.
Juanma Barranquero <lekktu@gmail.com>
parents: 46267
diff changeset
152 If the optional argument FRAME is given as a frame, NEW-FACE is
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
153 changed on FRAME only.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
154 If FRAME is t, the frame-independent default specification for OLD-FACE
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
155 is copied to NEW-FACE.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
156 If FRAME is nil, copying is done for the frame-independent defaults
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
157 and for each existing frame.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
158
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
159 If the optional fourth argument NEW-FRAME is given,
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
160 copy the information from face OLD-FACE on frame FRAME
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
161 to NEW-FACE on frame NEW-FRAME."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
162 (let ((inhibit-quit t))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
163 (if (null frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
164 (progn
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
165 (dolist (frame (frame-list))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
166 (copy-face old-face new-face frame))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
167 (copy-face old-face new-face t))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
168 (internal-copy-lisp-face old-face new-face frame new-frame))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
169 new-face))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
170
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
171
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
172
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
173 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
174 ;;; Obsolete functions
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
175 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
176
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
177 ;; The functions in this section are defined because Lisp packages use
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
178 ;; them, despite the prefix `internal-' suggesting that they are
28840
d0531e35d9f2 Some doc fixes.
Dave Love <fx@gnu.org>
parents: 28214
diff changeset
179 ;; private to the face implementation.
2744
f4fc0c4c76f9 Re-arranged stuff to put defsubst accessors at the top
Jim Blandy <jimb@redhat.com>
parents: 2715
diff changeset
180
f4fc0c4c76f9 Re-arranged stuff to put defsubst accessors at the top
Jim Blandy <jimb@redhat.com>
parents: 2715
diff changeset
181 (defun internal-find-face (name &optional frame)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
182 "Retrieve the face named NAME.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
183 Return nil if there is no such face.
75579
5e69c78ab3f4 (internal-find-face, internal-get-face): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 75566
diff changeset
184 If NAME is already a face, it is simply returned.
5e69c78ab3f4 (internal-find-face, internal-get-face): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 75566
diff changeset
185 The optional argument FRAME is ignored."
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
186 (facep name))
29354
4ed4a700358b Update calls to make-obsolete with a WHEN argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28907
diff changeset
187 (make-obsolete 'internal-find-face 'facep "21.1")
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
188
2744
f4fc0c4c76f9 Re-arranged stuff to put defsubst accessors at the top
Jim Blandy <jimb@redhat.com>
parents: 2715
diff changeset
189
f4fc0c4c76f9 Re-arranged stuff to put defsubst accessors at the top
Jim Blandy <jimb@redhat.com>
parents: 2715
diff changeset
190 (defun internal-get-face (name &optional frame)
f4fc0c4c76f9 Re-arranged stuff to put defsubst accessors at the top
Jim Blandy <jimb@redhat.com>
parents: 2715
diff changeset
191 "Retrieve the face named NAME; error if there is none.
75579
5e69c78ab3f4 (internal-find-face, internal-get-face): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 75566
diff changeset
192 If NAME is already a face, it is simply returned.
5e69c78ab3f4 (internal-find-face, internal-get-face): Doc fixes.
Juanma Barranquero <lekktu@gmail.com>
parents: 75566
diff changeset
193 The optional argument FRAME is ignored."
40351
a44d4a7dd8de (internal-get-face): Use facep instead of the obsolete
Eli Zaretskii <eliz@gnu.org>
parents: 39830
diff changeset
194 (or (facep name)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
195 (check-face name)))
46053
ef0684c3e07b (frame-update-faces): Fix obsolescence declaration.
Juanma Barranquero <lekktu@gmail.com>
parents: 46041
diff changeset
196 (make-obsolete 'internal-get-face "see `facep' and `check-face'." "21.1")
2744
f4fc0c4c76f9 Re-arranged stuff to put defsubst accessors at the top
Jim Blandy <jimb@redhat.com>
parents: 2715
diff changeset
197
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
198
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
199 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
200 ;;; Predicates, type checks.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
201 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
202
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
203 (defun facep (face)
63775
7878662e4c72 (facep): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 63716
diff changeset
204 "Return non-nil if FACE is a face name or internal face object.
7878662e4c72 (facep): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 63716
diff changeset
205 Return nil otherwise. A face name can be a string or a symbol.
7878662e4c72 (facep): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 63716
diff changeset
206 An internal face object is a vector of the kind used internally
7878662e4c72 (facep): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 63716
diff changeset
207 to record face data."
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
208 (internal-lisp-face-p face))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
209
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
210
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
211 (defun check-face (face)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
212 "Signal an error if FACE doesn't name a face.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
213 Value is FACE."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
214 (unless (facep face)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
215 (error "Not a face: %s" face))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
216 face)
2744
f4fc0c4c76f9 Re-arranged stuff to put defsubst accessors at the top
Jim Blandy <jimb@redhat.com>
parents: 2715
diff changeset
217
f4fc0c4c76f9 Re-arranged stuff to put defsubst accessors at the top
Jim Blandy <jimb@redhat.com>
parents: 2715
diff changeset
218
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
219 ;; The ID returned is not to be confused with the internally used IDs
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
220 ;; of realized faces. The ID assigned to Lisp faces is used to
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
221 ;; support faces in display table entries.
17386
b251c8820860 (make-face): New arg no-resources.
Richard M. Stallman <rms@gnu.org>
parents: 17173
diff changeset
222
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
223 (defun face-id (face &optional frame)
46267
cd9282aa1d8a (face-id): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 46146
diff changeset
224 "Return the internal ID of face with name FACE.
81148
afd58ab52ea7 (face-id): If the argument is a face alias, return the ID of the target face.
Juanma Barranquero <lekktu@gmail.com>
parents: 76731
diff changeset
225 If FACE is a face-alias, return the ID of the target face.
60495
8e1bab51992b (face-id): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 60162
diff changeset
226 The optional argument FRAME is ignored, since the internal face ID
8e1bab51992b (face-id): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 60162
diff changeset
227 of a face name is the same for all frames."
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
228 (check-face face)
81148
afd58ab52ea7 (face-id): If the argument is a face alias, return the ID of the target face.
Juanma Barranquero <lekktu@gmail.com>
parents: 76731
diff changeset
229 (or (get face 'face)
afd58ab52ea7 (face-id): If the argument is a face alias, return the ID of the target face.
Juanma Barranquero <lekktu@gmail.com>
parents: 76731
diff changeset
230 (face-id (get face 'face-alias))))
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
231
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
232 (defun face-equal (face1 face2 &optional frame)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
233 "Non-nil if faces FACE1 and FACE2 are equal.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
234 Faces are considered equal if all their attributes are equal.
62968
88922a349851 (face-equal): Improve argument/docstring consistency.
Juanma Barranquero <lekktu@gmail.com>
parents: 62947
diff changeset
235 If the optional argument FRAME is given, report on FACE1 and FACE2 in that frame.
88922a349851 (face-equal): Improve argument/docstring consistency.
Juanma Barranquero <lekktu@gmail.com>
parents: 62947
diff changeset
236 If FRAME is t, report on the defaults for FACE1 and FACE2 (for new frames).
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
237 If FRAME is omitted or nil, use the selected frame."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
238 (internal-lisp-face-equal-p face1 face2 frame))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
239
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
240
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
241 (defun face-differs-from-default-p (face &optional frame)
55899
4592654cd2e9 Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-369
Miles Bader <miles@gnu.org>
parents: 55898
diff changeset
242 "Return non-nil if FACE displays differently from the default face.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
243 If the optional argument FRAME is given, report on face FACE in that frame.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
244 If FRAME is t, report on the defaults for face FACE (for new frames).
55899
4592654cd2e9 Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-369
Miles Bader <miles@gnu.org>
parents: 55898
diff changeset
245 If FRAME is omitted or nil, use the selected frame."
55902
084530cb1b2f Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-372
Miles Bader <miles@gnu.org>
parents: 55901
diff changeset
246 (let ((attrs
084530cb1b2f Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-372
Miles Bader <miles@gnu.org>
parents: 55901
diff changeset
247 '(:family :width :height :weight :slant :foreground
75566
be6933d061a1 (color-values): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 75347
diff changeset
248 :background :underline :overline :strike-through
be6933d061a1 (color-values): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 75347
diff changeset
249 :box :inverse-video))
55902
084530cb1b2f Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-372
Miles Bader <miles@gnu.org>
parents: 55901
diff changeset
250 (differs nil))
084530cb1b2f Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-372
Miles Bader <miles@gnu.org>
parents: 55901
diff changeset
251 (while (and attrs (not differs))
084530cb1b2f Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-372
Miles Bader <miles@gnu.org>
parents: 55901
diff changeset
252 (let* ((attr (pop attrs))
084530cb1b2f Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-372
Miles Bader <miles@gnu.org>
parents: 55901
diff changeset
253 (attr-val (face-attribute face attr frame t)))
084530cb1b2f Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-372
Miles Bader <miles@gnu.org>
parents: 55901
diff changeset
254 (when (and
084530cb1b2f Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-372
Miles Bader <miles@gnu.org>
parents: 55901
diff changeset
255 (not (eq attr-val 'unspecified))
084530cb1b2f Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-372
Miles Bader <miles@gnu.org>
parents: 55901
diff changeset
256 (display-supports-face-attributes-p (list attr attr-val)
084530cb1b2f Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-372
Miles Bader <miles@gnu.org>
parents: 55901
diff changeset
257 frame))
084530cb1b2f Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-372
Miles Bader <miles@gnu.org>
parents: 55901
diff changeset
258 (setq differs attr))))
084530cb1b2f Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-372
Miles Bader <miles@gnu.org>
parents: 55901
diff changeset
259 differs))
10379
f9d713e8c77c (face-nontrivial-p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10375
diff changeset
260
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
261
10379
f9d713e8c77c (face-nontrivial-p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10375
diff changeset
262 (defun face-nontrivial-p (face &optional frame)
f9d713e8c77c (face-nontrivial-p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10375
diff changeset
263 "True if face FACE has some non-nil attribute.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
264 If the optional argument FRAME is given, report on face FACE in that frame.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
265 If FRAME is t, report on the defaults for face FACE (for new frames).
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
266 If FRAME is omitted or nil, use the selected frame."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
267 (not (internal-lisp-face-empty-p face frame)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
268
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
269
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
270
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
271 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
272 ;;; Setting face attributes from X resources.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
273 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
274
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
275 (defcustom face-x-resources
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
276 '((:family (".attributeFamily" . "Face.AttributeFamily"))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
277 (:width (".attributeWidth" . "Face.AttributeWidth"))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
278 (:height (".attributeHeight" . "Face.AttributeHeight"))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
279 (:weight (".attributeWeight" . "Face.AttributeWeight"))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
280 (:slant (".attributeSlant" . "Face.AttributeSlant"))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
281 (:foreground (".attributeForeground" . "Face.AttributeForeground"))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
282 (:background (".attributeBackground" . "Face.AttributeBackground"))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
283 (:overline (".attributeOverline" . "Face.AttributeOverline"))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
284 (:strike-through (".attributeStrikeThrough" . "Face.AttributeStrikeThrough"))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
285 (:box (".attributeBox" . "Face.AttributeBox"))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
286 (:underline (".attributeUnderline" . "Face.AttributeUnderline"))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
287 (:inverse-video (".attributeInverse" . "Face.AttributeInverse"))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
288 (:stipple
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
289 (".attributeStipple" . "Face.AttributeStipple")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
290 (".attributeBackgroundPixmap" . "Face.AttributeBackgroundPixmap"))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
291 (:bold (".attributeBold" . "Face.AttributeBold"))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
292 (:italic (".attributeItalic" . "Face.AttributeItalic"))
31193
a15c5cb8ec71 (face-x-resources): Add entry for :inherit.
Miles Bader <miles@gnu.org>
parents: 31190
diff changeset
293 (:font (".attributeFont" . "Face.AttributeFont"))
a15c5cb8ec71 (face-x-resources): Add entry for :inherit.
Miles Bader <miles@gnu.org>
parents: 31190
diff changeset
294 (:inherit (".attributeInherit" . "Face.AttributeInherit")))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
295 "*List of X resources and classes for face attributes.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
296 Each element has the form (ATTRIBUTE ENTRY1 ENTRY2...) where ATTRIBUTE is
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
297 the name of a face attribute, and each ENTRY is a cons of the form
39830
aed9c3afb7ed (describe-face): Call help-setup-xref earlier.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39799
diff changeset
298 \(RESOURCE . CLASS) with RESOURCE being the resource and CLASS being the
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
299 X resource class for the attribute."
31528
a461cad7a942 (face-x-resources): Make custom type more specific.
Dave Love <fx@gnu.org>
parents: 31500
diff changeset
300 :type '(repeat (cons symbol (repeat (cons string string))))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
301 :group 'faces)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
302
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
303
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
304 (defun set-face-attribute-from-resource (face attribute resource class frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
305 "Set FACE's ATTRIBUTE from X resource RESOURCE, class CLASS on FRAME.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
306 Value is the attribute value specified by the resource, or nil
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
307 if not present. This function displays a message if the resource
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
308 specifies an invalid attribute."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
309 (let* ((face-name (face-name face))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
310 (value (internal-face-x-get-resource (concat face-name resource)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
311 class frame)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
312 (when value
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
313 (condition-case ()
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
314 (internal-set-lisp-face-attribute-from-resource
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
315 face attribute (downcase value) frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
316 (error
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
317 (message "Face %s, frame %s: invalid attribute %s %s from X resource"
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
318 face-name frame attribute value))))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
319 value))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
320
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
321
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
322 (defun set-face-attributes-from-resources (face frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
323 "Set attributes of FACE from X resources for FRAME."
32752
923b8d6d8277 Initial check-in: changes for building Emacs under Mac OS.
Andrew Choi <akochoi@shaw.ca>
parents: 32734
diff changeset
324 (when (memq (framep frame) '(x w32 mac))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
325 (dolist (definition face-x-resources)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
326 (let ((attribute (car definition)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
327 (dolist (entry (cdr definition))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
328 (set-face-attribute-from-resource face attribute (car entry)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
329 (cdr entry) frame))))))
37943
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
330
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
331
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
332 (defun make-face-x-resource-internal (face &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
333 "Fill frame-local FACE on FRAME from X resources.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
334 FRAME nil or not specified means do it for all frames."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
335 (if (null frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
336 (dolist (frame (frame-list))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
337 (set-face-attributes-from-resources face frame))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
338 (set-face-attributes-from-resources face frame)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
339
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
340
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
341
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
342 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
343 ;;; Retrieving face attributes.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
344 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
345
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
346 (defun face-name (face)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
347 "Return the name of face FACE."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
348 (symbol-name (check-face face)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
349
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
350
40399
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
351 (defun face-attribute (face attribute &optional frame inherit)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
352 "Return the value of FACE's ATTRIBUTE on FRAME.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
353 If the optional argument FRAME is given, report on face FACE in that frame.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
354 If FRAME is t, report on the defaults for face FACE (for new frames).
40399
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
355 If FRAME is omitted or nil, use the selected frame.
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
356
67049
580816de789f * faces.el: Revert 2005-11-17 change. :ignore-defface is now
Chong Yidong <cyd@stupidchicken.com>
parents: 66975
diff changeset
357 If INHERIT is nil, only attributes directly defined by FACE are considered,
580816de789f * faces.el: Revert 2005-11-17 change. :ignore-defface is now
Chong Yidong <cyd@stupidchicken.com>
parents: 66975
diff changeset
358 so the return value may be `unspecified', or a relative value.
40399
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
359 If INHERIT is non-nil, FACE's definition of ATTRIBUTE is merged with the
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
360 faces specified by its `:inherit' attribute; however the return value
67049
580816de789f * faces.el: Revert 2005-11-17 change. :ignore-defface is now
Chong Yidong <cyd@stupidchicken.com>
parents: 66975
diff changeset
361 may still be `unspecified' or relative.
40399
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
362 If INHERIT is a face or a list of faces, then the result is further merged
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
363 with that face (or faces), until it becomes specified and absolute.
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
364
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
365 To ensure that the return value is always specified and absolute, use a
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
366 value of `default' for INHERIT; this will resolve any unspecified or
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
367 relative values by merging with the `default' face (which is always
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
368 completely specified)."
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
369 (let ((value (internal-get-lisp-face-attribute face attribute frame)))
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
370 (when (and inherit (face-attribute-relative-p attribute value))
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
371 ;; VALUE is relative, so merge with inherited faces
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
372 (let ((inh-from (face-attribute face :inherit frame)))
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
373 (unless (or (null inh-from) (eq inh-from 'unspecified))
66596
56a63119fa20 (face-attribute): Handle the case where a face inherits from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66360
diff changeset
374 (condition-case nil
56a63119fa20 (face-attribute): Handle the case where a face inherits from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66360
diff changeset
375 (setq value
56a63119fa20 (face-attribute): Handle the case where a face inherits from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66360
diff changeset
376 (face-attribute-merged-with attribute value inh-from frame))
56a63119fa20 (face-attribute): Handle the case where a face inherits from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66360
diff changeset
377 ;; The `inherit' attribute may point to non existent faces.
56a63119fa20 (face-attribute): Handle the case where a face inherits from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66360
diff changeset
378 (error nil)))))
40399
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
379 (when (and inherit
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
380 (not (eq inherit t))
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
381 (face-attribute-relative-p attribute value))
43711
d15360503e4e (face-spec-choose): Allow `t' to appear before the end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43550
diff changeset
382 ;; We should merge with INHERIT as well
40399
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
383 (setq value (face-attribute-merged-with attribute value inherit frame)))
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
384 value))
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
385
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
386 (defun face-attribute-merged-with (attribute value faces &optional frame)
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
387 "Merges ATTRIBUTE, initially VALUE, with faces from FACES until absolute.
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
388 FACES may be either a single face or a list of faces.
64539
c94d5f576885 (describe-face): "?\ " -> "?\s".
Juanma Barranquero <lekktu@gmail.com>
parents: 64497
diff changeset
389 \[This is an internal function.]"
40399
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
390 (cond ((not (face-attribute-relative-p attribute value))
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
391 value)
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
392 ((null faces)
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
393 value)
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
394 ((consp faces)
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
395 (face-attribute-merged-with
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
396 attribute
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
397 (face-attribute-merged-with attribute value (car faces) frame)
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
398 (cdr faces)
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
399 frame))
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
400 (t
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
401 (merge-face-attribute attribute
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
402 value
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
403 (face-attribute faces attribute frame t)))))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
404
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
405
40399
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
406 (defmacro face-attribute-specified-or (value &rest body)
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
407 "Return VALUE, unless it's `unspecified', in which case evaluate BODY and return the result."
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
408 (let ((temp (make-symbol "value")))
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
409 `(let ((,temp ,value))
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
410 (if (not (eq ,temp 'unspecified))
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
411 ,temp
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
412 ,@body))))
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
413
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
414 (defun face-foreground (face &optional frame inherit)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
415 "Return the foreground color name of FACE, or nil if unspecified.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
416 If the optional argument FRAME is given, report on face FACE in that frame.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
417 If FRAME is t, report on the defaults for face FACE (for new frames).
40399
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
418 If FRAME is omitted or nil, use the selected frame.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
419
40399
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
420 If INHERIT is nil, only a foreground color directly defined by FACE is
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
421 considered, so the return value may be nil.
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
422 If INHERIT is t, and FACE doesn't define a foreground color, then any
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
423 foreground color that FACE inherits through its `:inherit' attribute
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
424 is considered as well; however the return value may still be nil.
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
425 If INHERIT is a face or a list of faces, then it is used to try to
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
426 resolve an unspecified foreground color.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
427
40399
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
428 To ensure that a valid color is always returned, use a value of
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
429 `default' for INHERIT; this will resolve any unspecified values by
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
430 merging with the `default' face (which is always completely specified)."
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
431 (face-attribute-specified-or (face-attribute face :foreground frame inherit)
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
432 nil))
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
433
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
434 (defun face-background (face &optional frame inherit)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
435 "Return the background color name of FACE, or nil if unspecified.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
436 If the optional argument FRAME is given, report on face FACE in that frame.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
437 If FRAME is t, report on the defaults for face FACE (for new frames).
40399
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
438 If FRAME is omitted or nil, use the selected frame.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
439
40399
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
440 If INHERIT is nil, only a background color directly defined by FACE is
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
441 considered, so the return value may be nil.
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
442 If INHERIT is t, and FACE doesn't define a background color, then any
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
443 background color that FACE inherits through its `:inherit' attribute
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
444 is considered as well; however the return value may still be nil.
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
445 If INHERIT is a face or a list of faces, then it is used to try to
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
446 resolve an unspecified background color.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
447
40399
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
448 To ensure that a valid color is always returned, use a value of
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
449 `default' for INHERIT; this will resolve any unspecified values by
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
450 merging with the `default' face (which is always completely specified)."
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
451 (face-attribute-specified-or (face-attribute face :background frame inherit)
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
452 nil))
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
453
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
454 (defun face-stipple (face &optional frame inherit)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
455 "Return the stipple pixmap name of FACE, or nil if unspecified.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
456 If the optional argument FRAME is given, report on face FACE in that frame.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
457 If FRAME is t, report on the defaults for face FACE (for new frames).
40399
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
458 If FRAME is omitted or nil, use the selected frame.
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
459
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
460 If INHERIT is nil, only a stipple directly defined by FACE is
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
461 considered, so the return value may be nil.
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
462 If INHERIT is t, and FACE doesn't define a stipple, then any stipple
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
463 that FACE inherits through its `:inherit' attribute is considered as
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
464 well; however the return value may still be nil.
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
465 If INHERIT is a face or a list of faces, then it is used to try to
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
466 resolve an unspecified stipple.
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
467
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
468 To ensure that a valid stipple or nil is always returned, use a value of
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
469 `default' for INHERIT; this will resolve any unspecified values by merging
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
470 with the `default' face (which is always completely specified)."
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
471 (face-attribute-specified-or (face-attribute face :stipple frame inherit)
3e67855bb4bf (face-attribute): Add INHERIT argument, consider face inheritance if non-nil.
Miles Bader <miles@gnu.org>
parents: 40351
diff changeset
472 nil))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
473
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
474
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
475 (defalias 'face-background-pixmap 'face-stipple)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
476
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
477
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
478 (defun face-underline-p (face &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
479 "Return non-nil if FACE is underlined.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
480 If the optional argument FRAME is given, report on face FACE in that frame.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
481 If FRAME is t, report on the defaults for face FACE (for new frames).
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
482 If FRAME is omitted or nil, use the selected frame."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
483 (eq (face-attribute face :underline frame) t))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
484
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
485
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
486 (defun face-inverse-video-p (face &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
487 "Return non-nil if FACE is in inverse video on FRAME.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
488 If the optional argument FRAME is given, report on face FACE in that frame.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
489 If FRAME is t, report on the defaults for face FACE (for new frames).
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
490 If FRAME is omitted or nil, use the selected frame."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
491 (eq (face-attribute face :inverse-video frame) t))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
492
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
493
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
494 (defun face-bold-p (face &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
495 "Return non-nil if the font of FACE is bold on FRAME.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
496 If the optional argument FRAME is given, report on face FACE in that frame.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
497 If FRAME is t, report on the defaults for face FACE (for new frames).
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
498 If FRAME is omitted or nil, use the selected frame.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
499 Use `face-attribute' for finer control."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
500 (let ((bold (face-attribute face :weight frame)))
25561
67c224f5cc1a (face-bold-p): Don't return t if face has lighter
Gerd Moellmann <gerd@gnu.org>
parents: 25545
diff changeset
501 (memq bold '(semi-bold bold extra-bold ultra-bold))))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
502
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
503
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
504 (defun face-italic-p (face &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
505 "Return non-nil if the font of FACE is italic on FRAME.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
506 If the optional argument FRAME is given, report on face FACE in that frame.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
507 If FRAME is t, report on the defaults for face FACE (for new frames).
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
508 If FRAME is omitted or nil, use the selected frame.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
509 Use `face-attribute' for finer control."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
510 (let ((italic (face-attribute face :slant frame)))
25616
4dbea85f5af0 (face-italic-p): Return t only for values `italic'
Gerd Moellmann <gerd@gnu.org>
parents: 25588
diff changeset
511 (memq italic '(italic oblique))))
37943
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
512
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
513
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
514
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
515 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
516 ;;; Face documentation.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
517 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
518
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
519 (defun face-documentation (face)
63660
47c90f7c23df (face-documentation, set-face-attribute)
Glenn Morris <rgm@gnu.org>
parents: 63650
diff changeset
520 "Get the documentation string for FACE.
47c90f7c23df (face-documentation, set-face-attribute)
Glenn Morris <rgm@gnu.org>
parents: 63650
diff changeset
521 If FACE is a face-alias, get the documentation for the target face."
47c90f7c23df (face-documentation, set-face-attribute)
Glenn Morris <rgm@gnu.org>
parents: 63650
diff changeset
522 (let ((alias (get face 'face-alias))
47c90f7c23df (face-documentation, set-face-attribute)
Glenn Morris <rgm@gnu.org>
parents: 63650
diff changeset
523 doc)
47c90f7c23df (face-documentation, set-face-attribute)
Glenn Morris <rgm@gnu.org>
parents: 63650
diff changeset
524 (if alias
47c90f7c23df (face-documentation, set-face-attribute)
Glenn Morris <rgm@gnu.org>
parents: 63650
diff changeset
525 (progn
47c90f7c23df (face-documentation, set-face-attribute)
Glenn Morris <rgm@gnu.org>
parents: 63650
diff changeset
526 (setq doc (get alias 'face-documentation))
47c90f7c23df (face-documentation, set-face-attribute)
Glenn Morris <rgm@gnu.org>
parents: 63650
diff changeset
527 (format "%s is an alias for the face `%s'.%s" face alias
47c90f7c23df (face-documentation, set-face-attribute)
Glenn Morris <rgm@gnu.org>
parents: 63650
diff changeset
528 (if doc (format "\n%s" doc)
47c90f7c23df (face-documentation, set-face-attribute)
Glenn Morris <rgm@gnu.org>
parents: 63650
diff changeset
529 "")))
47c90f7c23df (face-documentation, set-face-attribute)
Glenn Morris <rgm@gnu.org>
parents: 63650
diff changeset
530 (get face 'face-documentation))))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
531
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
532
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
533 (defun set-face-documentation (face string)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
534 "Set the documentation string for FACE to STRING."
26927
27d6c0e07ea8 (set-face-attribute): Purecopy the attributes set.
Dave Love <fx@gnu.org>
parents: 26902
diff changeset
535 ;; Perhaps the text should go in DOC.
26657
b5c0d55411ad (set-face-documentation): Purecopy STRING.
Dave Love <fx@gnu.org>
parents: 26353
diff changeset
536 (put face 'face-documentation (purecopy string)))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
537
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
538
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
539 (defalias 'face-doc-string 'face-documentation)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
540 (defalias 'set-face-doc-string 'set-face-documentation)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
541
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
542
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
543
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
544 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
545 ;; Setting face attributes.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
546 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
547
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
548
66360
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
549 (defvar inhibit-face-set-after-frame-default nil
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
550 "If non-nil, that tells `face-set-after-frame-default' to do nothing.")
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
551
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
552 (defun set-face-attribute (face frame &rest args)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
553 "Set attributes of FACE on FRAME from ARGS.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
554
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
555 FRAME nil means change attributes on all frames. FRAME t means change
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
556 the default for new frames (this is done automatically each time an
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
557 attribute is changed on all frames).
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
558
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
559 ARGS must come in pairs ATTRIBUTE VALUE. ATTRIBUTE must be a valid
67049
580816de789f * faces.el: Revert 2005-11-17 change. :ignore-defface is now
Chong Yidong <cyd@stupidchicken.com>
parents: 66975
diff changeset
560 face attribute name. All attributes can be set to `unspecified';
580816de789f * faces.el: Revert 2005-11-17 change. :ignore-defface is now
Chong Yidong <cyd@stupidchicken.com>
parents: 66975
diff changeset
561 this fact is not further mentioned below.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
562
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
563 The following attributes are recognized:
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
564
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
565 `:family'
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
566
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
567 VALUE must be a string specifying the font family, e.g. ``courier'',
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
568 or a fontset alias name. If a font family is specified, wild-cards `*'
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
569 and `?' are allowed.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
570
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
571 `:width'
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
572
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
573 VALUE specifies the relative proportionate width of the font to use.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
574 It must be one of the symbols `ultra-condensed', `extra-condensed',
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
575 `condensed', `semi-condensed', `normal', `semi-expanded', `expanded',
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
576 `extra-expanded', or `ultra-expanded'.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
577
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
578 `:height'
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
579
31190
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
580 VALUE must be either an integer specifying the height of the font to use
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
581 in 1/10 pt, a floating point number specifying the amount by which to
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
582 scale any underlying face, or a function, which is called with the old
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
583 height (from the underlying face), and should return the new height.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
584
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
585 `:weight'
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
586
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
587 VALUE specifies the weight of the font to use. It must be one of the
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
588 symbols `ultra-bold', `extra-bold', `bold', `semi-bold', `normal',
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
589 `semi-light', `light', `extra-light', `ultra-light'.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
590
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
591 `:slant'
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
592
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
593 VALUE specifies the slant of the font to use. It must be one of the
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
594 symbols `italic', `oblique', `normal', `reverse-italic', or
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
595 `reverse-oblique'.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
596
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
597 `:foreground', `:background'
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
598
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
599 VALUE must be a color name, a string.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
600
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
601 `:underline'
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
602
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
603 VALUE specifies whether characters in FACE should be underlined. If
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
604 VALUE is t, underline with foreground color of the face. If VALUE is
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
605 a string, underline with that color. If VALUE is nil, explicitly
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
606 don't underline.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
607
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
608 `:overline'
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
609
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
610 VALUE specifies whether characters in FACE should be overlined. If
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
611 VALUE is t, overline with foreground color of the face. If VALUE is a
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
612 string, overline with that color. If VALUE is nil, explicitly don't
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
613 overline.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
614
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
615 `:strike-through'
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
616
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
617 VALUE specifies whether characters in FACE should be drawn with a line
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
618 striking through them. If VALUE is t, use the foreground color of the
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
619 face. If VALUE is a string, strike-through with that color. If VALUE
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
620 is nil, explicitly don't strike through.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
621
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
622 `:box'
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
623
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
624 VALUE specifies whether characters in FACE should have a box drawn
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
625 around them. If VALUE is nil, explicitly don't draw boxes. If
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
626 VALUE is t, draw a box with lines of width 1 in the foreground color
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
627 of the face. If VALUE is a string, the string must be a color name,
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
628 and the box is drawn in that color with a line width of 1. Otherwise,
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
629 VALUE must be a property list of the form `(:line-width WIDTH
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
630 :color COLOR :style STYLE)'. If a keyword/value pair is missing from
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
631 the property list, a default value will be used for the value, as
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
632 specified below. WIDTH specifies the width of the lines to draw; it
36009
3f009240cc7d (set-face-attribute): Describe the case of a negative
Kenichi Handa <handa@m17n.org>
parents: 34682
diff changeset
633 defaults to 1. If WIDTH is negative, the absolute value is the width
3f009240cc7d (set-face-attribute): Describe the case of a negative
Kenichi Handa <handa@m17n.org>
parents: 34682
diff changeset
634 of the lines, and draw top/bottom lines inside the characters area,
3f009240cc7d (set-face-attribute): Describe the case of a negative
Kenichi Handa <handa@m17n.org>
parents: 34682
diff changeset
635 not around it. COLOR is the name of the color to draw in, default is
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
636 the foreground color of the face for simple boxes, and the background
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
637 color of the face for 3D boxes. STYLE specifies whether a 3D box
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
638 should be draw. If STYLE is `released-button', draw a box looking
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
639 like a released 3D button. If STYLE is `pressed-button' draw a box
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
640 that appears like a pressed button. If STYLE is nil, the default if
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
641 the property list doesn't contain a style specification, draw a 2D
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
642 box.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
643
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
644 `:inverse-video'
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
645
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
646 VALUE specifies whether characters in FACE should be displayed in
28840
d0531e35d9f2 Some doc fixes.
Dave Love <fx@gnu.org>
parents: 28214
diff changeset
647 inverse video. VALUE must be one of t or nil.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
648
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
649 `:stipple'
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
650
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
651 If VALUE is a string, it must be the name of a file of pixmap data.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
652 The directories listed in the `x-bitmap-file-path' variable are
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
653 searched. Alternatively, VALUE may be a list of the form (WIDTH
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
654 HEIGHT DATA) where WIDTH and HEIGHT are the size in pixels, and DATA
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
655 is a string containing the raw bits of the bitmap. VALUE nil means
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
656 explicitly don't use a stipple pattern.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
657
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
658 For convenience, attributes `:family', `:width', `:height', `:weight',
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
659 and `:slant' may also be set in one step from an X font name:
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
660
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
661 `:font'
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
662
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
663 Set font-related face attributes from VALUE. VALUE must be a valid
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
664 XLFD font name. If it is a font name pattern, the first matching font
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
665 will be used.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
666
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
667 For compatibility with Emacs 20, keywords `:bold' and `:italic' can
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
668 be used to specify that a bold or italic font should be used. VALUE
31190
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
669 must be t or nil in that case. A value of `unspecified' is not allowed.
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
670
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
671 `:inherit'
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
672
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
673 VALUE is the name of a face from which to inherit attributes, or a list
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
674 of face names. Attributes from inherited faces are merged into the face
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
675 like an underlying face would be, with higher priority than underlying faces."
31439
d7a98f35b441 (set-face-attribute): Simplify by calling
Gerd Moellmann <gerd@gnu.org>
parents: 31401
diff changeset
676 (let ((where (if (null frame) 0 frame)))
d7a98f35b441 (set-face-attribute): Simplify by calling
Gerd Moellmann <gerd@gnu.org>
parents: 31401
diff changeset
677 (setq args (purecopy args))
51280
c2efaecb5d8f (set-face-attribute): Set face-modified prop to t
Richard M. Stallman <rms@gnu.org>
parents: 51248
diff changeset
678 ;; If we set the new-frame defaults, this face is modified outside Custom.
c2efaecb5d8f (set-face-attribute): Set face-modified prop to t
Richard M. Stallman <rms@gnu.org>
parents: 51248
diff changeset
679 (if (memq where '(0 t))
63660
47c90f7c23df (face-documentation, set-face-attribute)
Glenn Morris <rgm@gnu.org>
parents: 63650
diff changeset
680 (put (or (get face 'face-alias) face) 'face-modified t))
31439
d7a98f35b441 (set-face-attribute): Simplify by calling
Gerd Moellmann <gerd@gnu.org>
parents: 31401
diff changeset
681 (while args
66360
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
682 ;; Don't recursively set the attributes from the frame's font param
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
683 ;; when we update the frame's font param fro the attributes.
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
684 (let ((inhibit-face-set-after-frame-default t))
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
685 (internal-set-lisp-face-attribute face (car args)
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
686 (purecopy (cadr args))
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
687 where))
31439
d7a98f35b441 (set-face-attribute): Simplify by calling
Gerd Moellmann <gerd@gnu.org>
parents: 31401
diff changeset
688 (setq args (cdr (cdr args))))))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
689
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
690
26337
6bf33b333eb2 (make-face-bold, make-face-unbold, make-face-italic)
Gerd Moellmann <gerd@gnu.org>
parents: 25947
diff changeset
691 (defun make-face-bold (face &optional frame noerror)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
692 "Make the font of FACE be bold, if possible.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
693 FRAME nil or not specified means change face on all frames.
26337
6bf33b333eb2 (make-face-bold, make-face-unbold, make-face-italic)
Gerd Moellmann <gerd@gnu.org>
parents: 25947
diff changeset
694 Argument NOERROR is ignored and retained for compatibility.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
695 Use `set-face-attribute' for finer control of the font weight."
40456
1f5aee41efe9 (read-face-name): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 40454
diff changeset
696 (interactive (list (read-face-name "Make which face bold")))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
697 (set-face-attribute face frame :weight 'bold))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
698
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
699
26337
6bf33b333eb2 (make-face-bold, make-face-unbold, make-face-italic)
Gerd Moellmann <gerd@gnu.org>
parents: 25947
diff changeset
700 (defun make-face-unbold (face &optional frame noerror)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
701 "Make the font of FACE be non-bold, if possible.
26337
6bf33b333eb2 (make-face-bold, make-face-unbold, make-face-italic)
Gerd Moellmann <gerd@gnu.org>
parents: 25947
diff changeset
702 FRAME nil or not specified means change face on all frames.
6bf33b333eb2 (make-face-bold, make-face-unbold, make-face-italic)
Gerd Moellmann <gerd@gnu.org>
parents: 25947
diff changeset
703 Argument NOERROR is ignored and retained for compatibility."
40456
1f5aee41efe9 (read-face-name): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 40454
diff changeset
704 (interactive (list (read-face-name "Make which face non-bold")))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
705 (set-face-attribute face frame :weight 'normal))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
706
37943
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
707
26337
6bf33b333eb2 (make-face-bold, make-face-unbold, make-face-italic)
Gerd Moellmann <gerd@gnu.org>
parents: 25947
diff changeset
708 (defun make-face-italic (face &optional frame noerror)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
709 "Make the font of FACE be italic, if possible.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
710 FRAME nil or not specified means change face on all frames.
26337
6bf33b333eb2 (make-face-bold, make-face-unbold, make-face-italic)
Gerd Moellmann <gerd@gnu.org>
parents: 25947
diff changeset
711 Argument NOERROR is ignored and retained for compatibility.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
712 Use `set-face-attribute' for finer control of the font slant."
40456
1f5aee41efe9 (read-face-name): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 40454
diff changeset
713 (interactive (list (read-face-name "Make which face italic")))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
714 (set-face-attribute face frame :slant 'italic))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
715
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
716
26337
6bf33b333eb2 (make-face-bold, make-face-unbold, make-face-italic)
Gerd Moellmann <gerd@gnu.org>
parents: 25947
diff changeset
717 (defun make-face-unitalic (face &optional frame noerror)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
718 "Make the font of FACE be non-italic, if possible.
28840
d0531e35d9f2 Some doc fixes.
Dave Love <fx@gnu.org>
parents: 28214
diff changeset
719 FRAME nil or not specified means change face on all frames.
d0531e35d9f2 Some doc fixes.
Dave Love <fx@gnu.org>
parents: 28214
diff changeset
720 Argument NOERROR is ignored and retained for compatibility."
40456
1f5aee41efe9 (read-face-name): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 40454
diff changeset
721 (interactive (list (read-face-name "Make which face non-italic")))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
722 (set-face-attribute face frame :slant 'normal))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
723
37943
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
724
26337
6bf33b333eb2 (make-face-bold, make-face-unbold, make-face-italic)
Gerd Moellmann <gerd@gnu.org>
parents: 25947
diff changeset
725 (defun make-face-bold-italic (face &optional frame noerror)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
726 "Make the font of FACE be bold and italic, if possible.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
727 FRAME nil or not specified means change face on all frames.
26337
6bf33b333eb2 (make-face-bold, make-face-unbold, make-face-italic)
Gerd Moellmann <gerd@gnu.org>
parents: 25947
diff changeset
728 Argument NOERROR is ignored and retained for compatibility.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
729 Use `set-face-attribute' for finer control of font weight and slant."
40456
1f5aee41efe9 (read-face-name): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 40454
diff changeset
730 (interactive (list (read-face-name "Make which face bold-italic")))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
731 (set-face-attribute face frame :weight 'bold :slant 'italic))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
732
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
733
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
734 (defun set-face-font (face font &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
735 "Change font-related attributes of FACE to those of FONT (a string).
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
736 FRAME nil or not specified means change face on all frames.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
737 This sets the attributes `:family', `:width', `:height', `:weight',
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
738 and `:slant'. When called interactively, prompt for the face and font."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
739 (interactive (read-face-and-attribute :font))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
740 (set-face-attribute face frame :font font))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
741
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
742
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
743 ;; Implementation note: Emulating gray background colors with a
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
744 ;; stipple pattern is now part of the face realization process, and is
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
745 ;; done in C depending on the frame on which the face is realized.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
746
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
747 (defun set-face-background (face color &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
748 "Change the background color of face FACE to COLOR (a string).
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
749 FRAME nil or not specified means change face on all frames.
59281
95516eef1d5b (set-face-background, set-face-foreground): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 59262
diff changeset
750 COLOR can be a system-defined color name (see `list-colors-display')
95516eef1d5b (set-face-background, set-face-foreground): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 59262
diff changeset
751 or a hex spec of the form #RRGGBB.
95516eef1d5b (set-face-background, set-face-foreground): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 59262
diff changeset
752 When called interactively, prompts for the face and color."
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
753 (interactive (read-face-and-attribute :background))
36060
d9b4d1370073 (set-face-background, set-face-foreground)
Miles Bader <miles@gnu.org>
parents: 36035
diff changeset
754 (set-face-attribute face frame :background (or color 'unspecified)))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
755
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
756
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
757 (defun set-face-foreground (face color &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
758 "Change the foreground color of face FACE to COLOR (a string).
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
759 FRAME nil or not specified means change face on all frames.
59281
95516eef1d5b (set-face-background, set-face-foreground): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 59262
diff changeset
760 COLOR can be a system-defined color name (see `list-colors-display')
95516eef1d5b (set-face-background, set-face-foreground): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 59262
diff changeset
761 or a hex spec of the form #RRGGBB.
95516eef1d5b (set-face-background, set-face-foreground): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 59262
diff changeset
762 When called interactively, prompts for the face and color."
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
763 (interactive (read-face-and-attribute :foreground))
36060
d9b4d1370073 (set-face-background, set-face-foreground)
Miles Bader <miles@gnu.org>
parents: 36035
diff changeset
764 (set-face-attribute face frame :foreground (or color 'unspecified)))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
765
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
766
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
767 (defun set-face-stipple (face stipple &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
768 "Change the stipple pixmap of face FACE to STIPPLE.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
769 FRAME nil or not specified means change face on all frames.
28840
d0531e35d9f2 Some doc fixes.
Dave Love <fx@gnu.org>
parents: 28214
diff changeset
770 STIPPLE should be a string, the name of a file of pixmap data.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
771 The directories listed in the `x-bitmap-file-path' variable are searched.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
772
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
773 Alternatively, STIPPLE may be a list of the form (WIDTH HEIGHT DATA)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
774 where WIDTH and HEIGHT are the size in pixels,
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
775 and DATA is a string, containing the raw bits of the bitmap."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
776 (interactive (read-face-and-attribute :stipple))
36060
d9b4d1370073 (set-face-background, set-face-foreground)
Miles Bader <miles@gnu.org>
parents: 36035
diff changeset
777 (set-face-attribute face frame :stipple (or stipple 'unspecified)))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
778
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
779
75591
a0f90fb2d33d (set-face-underline-p, modify-face): Rename arg UNDERLINE-P
Juanma Barranquero <lekktu@gmail.com>
parents: 75579
diff changeset
780 (defun set-face-underline-p (face underline &optional frame)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
781 "Specify whether face FACE is underlined.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
782 UNDERLINE nil means FACE explicitly doesn't underline.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
783 UNDERLINE non-nil means FACE explicitly does underlining
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
784 with the same of the foreground color.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
785 If UNDERLINE is a string, underline with the color named UNDERLINE.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
786 FRAME nil or not specified means change face on all frames.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
787 Use `set-face-attribute' to ``unspecify'' underlining."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
788 (interactive
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
789 (let ((list (read-face-and-attribute :underline)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
790 (list (car list) (eq (car (cdr list)) t))))
75591
a0f90fb2d33d (set-face-underline-p, modify-face): Rename arg UNDERLINE-P
Juanma Barranquero <lekktu@gmail.com>
parents: 75579
diff changeset
791 (set-face-attribute face frame :underline underline))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
792
65068
6606e83775f0 (set-face-underline): Delete this duplicate function
Juri Linkov <juri@jurta.org>
parents: 64762
diff changeset
793 (define-obsolete-function-alias 'set-face-underline
6606e83775f0 (set-face-underline): Delete this duplicate function
Juri Linkov <juri@jurta.org>
parents: 64762
diff changeset
794 'set-face-underline-p "22.1")
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
795
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
796
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
797 (defun set-face-inverse-video-p (face inverse-video-p &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
798 "Specify whether face FACE is in inverse video.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
799 INVERSE-VIDEO-P non-nil means FACE displays explicitly in inverse video.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
800 INVERSE-VIDEO-P nil means FACE explicitly is not in inverse video.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
801 FRAME nil or not specified means change face on all frames.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
802 Use `set-face-attribute' to ``unspecify'' the inverse video attribute."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
803 (interactive
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
804 (let ((list (read-face-and-attribute :inverse-video)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
805 (list (car list) (eq (car (cdr list)) t))))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
806 (set-face-attribute face frame :inverse-video inverse-video-p))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
807
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
808
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
809 (defun set-face-bold-p (face bold-p &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
810 "Specify whether face FACE is bold.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
811 BOLD-P non-nil means FACE should explicitly display bold.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
812 BOLD-P nil means FACE should explicitly display non-bold.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
813 FRAME nil or not specified means change face on all frames.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
814 Use `set-face-attribute' or `modify-face' for finer control."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
815 (if (null bold-p)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
816 (make-face-unbold face frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
817 (make-face-bold face frame)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
818
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
819
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
820 (defun set-face-italic-p (face italic-p &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
821 "Specify whether face FACE is italic.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
822 ITALIC-P non-nil means FACE should explicitly display italic.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
823 ITALIC-P nil means FACE should explicitly display non-italic.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
824 FRAME nil or not specified means change face on all frames.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
825 Use `set-face-attribute' or `modify-face' for finer control."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
826 (if (null italic-p)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
827 (make-face-unitalic face frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
828 (make-face-italic face frame)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
829
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
830
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
831 (defalias 'set-face-background-pixmap 'set-face-stipple)
10379
f9d713e8c77c (face-nontrivial-p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10375
diff changeset
832
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
833
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
834 (defun invert-face (face &optional frame)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
835 "Swap the foreground and background colors of FACE.
40454
ce83eda9592d (invert-face): Check for 'unspecified, not for nil,
Eli Zaretskii <eliz@gnu.org>
parents: 40399
diff changeset
836 If FRAME is omitted or nil, it means change face on all frames.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
837 If FACE specifies neither foreground nor background color,
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
838 set its foreground and background to the background and foreground
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
839 of the default face. Value is FACE."
40456
1f5aee41efe9 (read-face-name): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 40454
diff changeset
840 (interactive (list (read-face-name "Invert face")))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
841 (let ((fg (face-attribute face :foreground frame))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
842 (bg (face-attribute face :background frame)))
40454
ce83eda9592d (invert-face): Check for 'unspecified, not for nil,
Eli Zaretskii <eliz@gnu.org>
parents: 40399
diff changeset
843 (if (not (and (eq fg 'unspecified) (eq bg 'unspecified)))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
844 (set-face-attribute face frame :foreground bg :background fg)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
845 (set-face-attribute face frame
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
846 :foreground
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
847 (face-attribute 'default :background frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
848 :background
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
849 (face-attribute 'default :foreground frame))))
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
850 face)
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
851
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
852
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
853 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
854 ;;; Interactively modifying faces.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
855 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
856
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
857 (defun read-face-name (prompt &optional string-describing-default multiple)
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
858 "Read a face, defaulting to the face or faces on the char after point.
71521
1109575a2873 * help-mode.el (help-xref-symbol-regexp): Add property as a keyword
Nick Roberts <nickrob@snap.net.nz>
parents: 71231
diff changeset
859 If it has the property `read-face-name', that overrides the `face' property.
71591
defa6bf31164 (read-face-name): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 71521
diff changeset
860 PROMPT should be a string that describes what the caller will do with the face;
defa6bf31164 (read-face-name): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 71521
diff changeset
861 it should not end in a space.
defa6bf31164 (read-face-name): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 71521
diff changeset
862 STRING-DESCRIBING-DEFAULT should describe what default the caller will use if
defa6bf31164 (read-face-name): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 71521
diff changeset
863 the user just types RET; you can omit it.
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
864 If MULTIPLE is non-nil, return a list of faces (possibly only one).
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
865 Otherwise, return a single face."
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
866 (let ((faceprop (or (get-char-property (point) 'read-face-name)
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
867 (get-char-property (point) 'face)))
63382
9cbfa983c1cf (read-face-name): Use complete-in-turn complete non-aliases
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 63311
diff changeset
868 (aliasfaces nil)
9cbfa983c1cf (read-face-name): Use complete-in-turn complete non-aliases
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 63311
diff changeset
869 (nonaliasfaces nil)
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
870 faces)
63984
37ff9b4c3659 (read-face-name): Put the code for getting a face name
Juri Linkov <juri@jurta.org>
parents: 63881
diff changeset
871 ;; Try to get a face name from the buffer.
37ff9b4c3659 (read-face-name): Put the code for getting a face name
Juri Linkov <juri@jurta.org>
parents: 63881
diff changeset
872 (if (memq (intern-soft (thing-at-point 'symbol)) (face-list))
37ff9b4c3659 (read-face-name): Put the code for getting a face name
Juri Linkov <juri@jurta.org>
parents: 63881
diff changeset
873 (setq faces (list (intern-soft (thing-at-point 'symbol)))))
37ff9b4c3659 (read-face-name): Put the code for getting a face name
Juri Linkov <juri@jurta.org>
parents: 63881
diff changeset
874 ;; Add the named faces that the `face' property uses.
59262
c9bf2e1b7e1a (read-face-name): Don't treat an attribute spec as a list of faces.
Richard M. Stallman <rms@gnu.org>
parents: 59077
diff changeset
875 (if (and (listp faceprop)
c9bf2e1b7e1a (read-face-name): Don't treat an attribute spec as a list of faces.
Richard M. Stallman <rms@gnu.org>
parents: 59077
diff changeset
876 ;; Don't treat an attribute spec as a list of faces.
c9bf2e1b7e1a (read-face-name): Don't treat an attribute spec as a list of faces.
Richard M. Stallman <rms@gnu.org>
parents: 59077
diff changeset
877 (not (keywordp (car faceprop)))
c9bf2e1b7e1a (read-face-name): Don't treat an attribute spec as a list of faces.
Richard M. Stallman <rms@gnu.org>
parents: 59077
diff changeset
878 (not (memq (car faceprop) '(foreground-color background-color))))
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
879 (dolist (f faceprop)
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
880 (if (symbolp f)
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
881 (push f faces)))
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
882 (if (symbolp faceprop)
59262
c9bf2e1b7e1a (read-face-name): Don't treat an attribute spec as a list of faces.
Richard M. Stallman <rms@gnu.org>
parents: 59077
diff changeset
883 (push faceprop faces)))
64724
719375653e09 (read-face-name): Delete duplicate faces.
Juri Linkov <juri@jurta.org>
parents: 64539
diff changeset
884 (delete-dups faces)
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
885
63382
9cbfa983c1cf (read-face-name): Use complete-in-turn complete non-aliases
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 63311
diff changeset
886 ;; Build up the completion tables.
9cbfa983c1cf (read-face-name): Use complete-in-turn complete non-aliases
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 63311
diff changeset
887 (mapatoms (lambda (s)
9cbfa983c1cf (read-face-name): Use complete-in-turn complete non-aliases
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 63311
diff changeset
888 (if (custom-facep s)
9cbfa983c1cf (read-face-name): Use complete-in-turn complete non-aliases
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 63311
diff changeset
889 (if (get s 'face-alias)
9cbfa983c1cf (read-face-name): Use complete-in-turn complete non-aliases
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 63311
diff changeset
890 (push (symbol-name s) aliasfaces)
9cbfa983c1cf (read-face-name): Use complete-in-turn complete non-aliases
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 63311
diff changeset
891 (push (symbol-name s) nonaliasfaces)))))
9cbfa983c1cf (read-face-name): Use complete-in-turn complete non-aliases
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 63311
diff changeset
892
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
893 ;; If we only want one, and the default is more than one,
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
894 ;; discard the unwanted ones now.
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
895 (unless multiple
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
896 (if faces
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
897 (setq faces (list (car faces)))))
63984
37ff9b4c3659 (read-face-name): Put the code for getting a face name
Juri Linkov <juri@jurta.org>
parents: 63881
diff changeset
898 (require 'crm)
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
899 (let* ((input
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
900 ;; Read the input.
63984
37ff9b4c3659 (read-face-name): Put the code for getting a face name
Juri Linkov <juri@jurta.org>
parents: 63881
diff changeset
901 (completing-read-multiple
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
902 (if (or faces string-describing-default)
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
903 (format "%s (default %s): " prompt
63984
37ff9b4c3659 (read-face-name): Put the code for getting a face name
Juri Linkov <juri@jurta.org>
parents: 63881
diff changeset
904 (if faces (mapconcat 'symbol-name faces ",")
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
905 string-describing-default))
44896
fc1fdc78c3eb (read-face-name): Format the prompt correctly when there's no default.
Miles Bader <miles@gnu.org>
parents: 44892
diff changeset
906 (format "%s: " prompt))
63984
37ff9b4c3659 (read-face-name): Put the code for getting a face name
Juri Linkov <juri@jurta.org>
parents: 63881
diff changeset
907 (complete-in-turn nonaliasfaces aliasfaces)
37ff9b4c3659 (read-face-name): Put the code for getting a face name
Juri Linkov <juri@jurta.org>
parents: 63881
diff changeset
908 nil t nil nil
37ff9b4c3659 (read-face-name): Put the code for getting a face name
Juri Linkov <juri@jurta.org>
parents: 63881
diff changeset
909 (if faces (mapconcat 'symbol-name faces ","))))
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
910 ;; Canonicalize the output.
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
911 (output
63984
37ff9b4c3659 (read-face-name): Put the code for getting a face name
Juri Linkov <juri@jurta.org>
parents: 63881
diff changeset
912 (cond ((or (equal input "") (equal input '("")))
37ff9b4c3659 (read-face-name): Put the code for getting a face name
Juri Linkov <juri@jurta.org>
parents: 63881
diff changeset
913 faces)
37ff9b4c3659 (read-face-name): Put the code for getting a face name
Juri Linkov <juri@jurta.org>
parents: 63881
diff changeset
914 ((stringp input)
37ff9b4c3659 (read-face-name): Put the code for getting a face name
Juri Linkov <juri@jurta.org>
parents: 63881
diff changeset
915 (mapcar 'intern (split-string input ", *" t)))
37ff9b4c3659 (read-face-name): Put the code for getting a face name
Juri Linkov <juri@jurta.org>
parents: 63881
diff changeset
916 ((listp input)
37ff9b4c3659 (read-face-name): Put the code for getting a face name
Juri Linkov <juri@jurta.org>
parents: 63881
diff changeset
917 (mapcar 'intern input))
37ff9b4c3659 (read-face-name): Put the code for getting a face name
Juri Linkov <juri@jurta.org>
parents: 63881
diff changeset
918 (input))))
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
919 ;; Return either a list of faces or just one face.
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
920 (if multiple
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
921 output
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
922 (car output)))))
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
923
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
924
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
925 (defun face-valid-attribute-values (attribute &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
926 "Return valid values for face attribute ATTRIBUTE.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
927 The optional argument FRAME is used to determine available fonts
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
928 and colors. If it is nil or not specified, the selected frame is
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
929 used. Value is an alist of (NAME . VALUE) if ATTRIBUTE expects a value
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
930 out of a set of discrete values. Value is `integerp' if ATTRIBUTE expects
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
931 an integer value."
37943
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
932 (let ((valid
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
933 (case attribute
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
934 (:family
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
935 (if window-system
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
936 (mapcar #'(lambda (x) (cons (car x) (car x)))
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
937 (x-font-family-list))
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
938 ;; Only one font on TTYs.
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
939 (list (cons "default" "default"))))
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
940 ((:width :weight :slant :inverse-video)
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
941 (mapcar #'(lambda (x) (cons (symbol-name x) x))
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
942 (internal-lisp-face-attribute-values attribute)))
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
943 ((:underline :overline :strike-through :box)
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
944 (if window-system
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
945 (nconc (mapcar #'(lambda (x) (cons (symbol-name x) x))
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
946 (internal-lisp-face-attribute-values attribute))
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
947 (mapcar #'(lambda (c) (cons c c))
75703
374c5b932d28 (face-valid-attribute-values): Use `defined-colors',
Juanma Barranquero <lekktu@gmail.com>
parents: 75696
diff changeset
948 (defined-colors frame)))
37943
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
949 (mapcar #'(lambda (x) (cons (symbol-name x) x))
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
950 (internal-lisp-face-attribute-values attribute))))
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
951 ((:foreground :background)
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
952 (mapcar #'(lambda (c) (cons c c))
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
953 (defined-colors frame)))
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
954 ((:height)
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
955 'integerp)
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
956 (:stipple
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
957 (and (memq window-system '(x w32 mac))
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
958 (mapcar #'list
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
959 (apply #'nconc
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
960 (mapcar (lambda (dir)
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
961 (and (file-readable-p dir)
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
962 (file-directory-p dir)
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
963 (directory-files dir)))
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
964 x-bitmap-file-path)))))
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
965 (:inherit
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
966 (cons '("none" . nil)
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
967 (mapcar #'(lambda (c) (cons (symbol-name c) c))
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
968 (face-list))))
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
969 (t
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
970 (error "Internal error")))))
31190
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
971 (if (and (listp valid) (not (memq attribute '(:inherit))))
25245
ef080d2576f9 (face-valid-attribute-values): Return an alist for
Gerd Moellmann <gerd@gnu.org>
parents: 25210
diff changeset
972 (nconc (list (cons "unspecified" 'unspecified)) valid)
ef080d2576f9 (face-valid-attribute-values): Return an alist for
Gerd Moellmann <gerd@gnu.org>
parents: 25210
diff changeset
973 valid)))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
974
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
975
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
976 (defvar face-attribute-name-alist
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
977 '((:family . "font family")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
978 (:width . "character set width")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
979 (:height . "height in 1/10 pt")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
980 (:weight . "weight")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
981 (:slant . "slant")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
982 (:underline . "underline")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
983 (:overline . "overline")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
984 (:strike-through . "strike-through")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
985 (:box . "box")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
986 (:inverse-video . "inverse-video display")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
987 (:foreground . "foreground color")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
988 (:background . "background color")
31190
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
989 (:stipple . "background stipple")
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
990 (:inherit . "inheritance"))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
991 "An alist of descriptive names for face attributes.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
992 Each element has the form (ATTRIBUTE-NAME . DESCRIPTION) where
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
993 ATTRIBUTE-NAME is a face attribute name (a keyword symbol), and
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
994 DESCRIPTION is a descriptive name for ATTRIBUTE-NAME.")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
995
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
996
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
997 (defun face-descriptive-attribute-name (attribute)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
998 "Return a descriptive name for ATTRIBUTE."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
999 (cdr (assq attribute face-attribute-name-alist)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1000
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1001
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1002 (defun face-read-string (face default name &optional completion-alist)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1003 "Interactively read a face attribute string value.
31190
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1004 FACE is the face whose attribute is read. If non-nil, DEFAULT is the
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1005 default string to return if no new value is entered. NAME is a
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1006 descriptive name of the attribute for prompting. COMPLETION-ALIST is an
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1007 alist of valid values, if non-nil.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1008
31190
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1009 Entering nothing accepts the default string DEFAULT.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1010 Value is the new attribute value."
31190
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1011 ;; Capitalize NAME (we don't use `capitalize' because that capitalizes
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1012 ;; each word in a string separately).
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1013 (setq name (concat (upcase (substring name 0 1)) (substring name 1)))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1014 (let* ((completion-ignore-case t)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1015 (value (completing-read
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1016 (if default
31190
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1017 (format "%s for face `%s' (default %s): "
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1018 name face default)
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1019 (format "%s for face `%s': " name face))
66959
35ab5e34fdf5 (face-read-string): Set the default value arg of completing-read.
Juri Linkov <juri@jurta.org>
parents: 66717
diff changeset
1020 completion-alist nil nil nil nil default)))
25245
ef080d2576f9 (face-valid-attribute-values): Return an alist for
Gerd Moellmann <gerd@gnu.org>
parents: 25210
diff changeset
1021 (if (equal value "") default value)))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1022
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1023
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1024 (defun face-read-integer (face default name)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1025 "Interactively read an integer face attribute value.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1026 FACE is the face whose attribute is read. DEFAULT is the default
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1027 value to return if no new value is entered. NAME is a descriptive
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1028 name of the attribute for prompting. Value is the new attribute value."
25245
ef080d2576f9 (face-valid-attribute-values): Return an alist for
Gerd Moellmann <gerd@gnu.org>
parents: 25210
diff changeset
1029 (let ((new-value
ef080d2576f9 (face-valid-attribute-values): Return an alist for
Gerd Moellmann <gerd@gnu.org>
parents: 25210
diff changeset
1030 (face-read-string face
31190
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1031 (format "%s" default)
25245
ef080d2576f9 (face-valid-attribute-values): Return an alist for
Gerd Moellmann <gerd@gnu.org>
parents: 25210
diff changeset
1032 name
ef080d2576f9 (face-valid-attribute-values): Return an alist for
Gerd Moellmann <gerd@gnu.org>
parents: 25210
diff changeset
1033 (list (cons "unspecified" 'unspecified)))))
31190
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1034 (cond ((equal new-value "unspecified")
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1035 'unspecified)
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1036 ((member new-value '("unspecified-fg" "unspecified-bg"))
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1037 new-value)
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1038 (t
62402
a7e02ef1e3d6 Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents: 62386
diff changeset
1039 (string-to-number new-value)))))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1040
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1041
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1042 (defun read-face-attribute (face attribute &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1043 "Interactively read a new value for FACE's ATTRIBUTE.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1044 Optional argument FRAME nil or unspecified means read an attribute value
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1045 of a global face. Value is the new attribute value."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1046 (let* ((old-value (face-attribute face attribute frame))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1047 (attribute-name (face-descriptive-attribute-name attribute))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1048 (valid (face-valid-attribute-values attribute frame))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1049 new-value)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1050 ;; Represent complex attribute values as strings by printing them
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1051 ;; out. Stipple can be a vector; (WIDTH HEIGHT DATA). Box can be
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1052 ;; a list `(:width WIDTH :color COLOR)' or `(:width WIDTH :shadow
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1053 ;; SHADOW)'.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1054 (when (and (or (eq attribute :stipple)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1055 (eq attribute :box))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1056 (or (consp old-value)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1057 (vectorp old-value)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1058 (setq old-value (prin1-to-string old-value)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1059 (cond ((listp valid)
31190
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1060 (let ((default
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1061 (or (car (rassoc old-value valid))
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1062 (format "%s" old-value))))
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1063 (setq new-value
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1064 (face-read-string face default attribute-name valid))
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1065 (if (equal new-value default)
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1066 ;; Nothing changed, so don't bother with all the stuff
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1067 ;; below. In particular, this avoids a non-tty color
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1068 ;; from being canonicalized for a tty when the user
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1069 ;; just uses the default.
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1070 (setq new-value old-value)
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1071 ;; Terminal frames can support colors that don't appear
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1072 ;; explicitly in VALID, using color approximation code
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1073 ;; in tty-colors.el.
34585
1e66e14d9695 (read-face-attribute): If there's no entry for the user's input in
Miles Bader <miles@gnu.org>
parents: 34246
diff changeset
1074 (when (and (memq attribute '(:foreground :background))
1e66e14d9695 (read-face-attribute): If there's no entry for the user's input in
Miles Bader <miles@gnu.org>
parents: 34246
diff changeset
1075 (not (memq window-system '(x w32 mac)))
1e66e14d9695 (read-face-attribute): If there's no entry for the user's input in
Miles Bader <miles@gnu.org>
parents: 34246
diff changeset
1076 (not (member new-value
1e66e14d9695 (read-face-attribute): If there's no entry for the user's input in
Miles Bader <miles@gnu.org>
parents: 34246
diff changeset
1077 '("unspecified"
1e66e14d9695 (read-face-attribute): If there's no entry for the user's input in
Miles Bader <miles@gnu.org>
parents: 34246
diff changeset
1078 "unspecified-fg" "unspecified-bg"))))
34587
Miles Bader <miles@gnu.org>
parents: 34585
diff changeset
1079 (setq new-value (car (tty-color-desc new-value frame))))
34585
1e66e14d9695 (read-face-attribute): If there's no entry for the user's input in
Miles Bader <miles@gnu.org>
parents: 34246
diff changeset
1080 (when (assoc new-value valid)
1e66e14d9695 (read-face-attribute): If there's no entry for the user's input in
Miles Bader <miles@gnu.org>
parents: 34246
diff changeset
1081 (setq new-value (cdr (assoc new-value valid)))))))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1082 ((eq valid 'integerp)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1083 (setq new-value (face-read-integer face old-value attribute-name)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1084 (t (error "Internal error")))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1085 ;; Convert stipple and box value text we read back to a list or
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1086 ;; vector if it looks like one. This makes the assumption that a
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1087 ;; pixmap file name won't start with an open-paren.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1088 (when (and (or (eq attribute :stipple)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1089 (eq attribute :box))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1090 (stringp new-value)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1091 (string-match "^[[(]" new-value))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1092 (setq new-value (read new-value)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1093 new-value))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1094
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1095
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1096 (defun read-face-font (face &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1097 "Read the name of a font for FACE on FRAME.
64539
c94d5f576885 (describe-face): "?\ " -> "?\s".
Juanma Barranquero <lekktu@gmail.com>
parents: 64497
diff changeset
1098 If optional argument FRAME is nil or omitted, use the selected frame."
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1099 (let ((completion-ignore-case t))
31197
39d437913f44 (read-face-font, read-face-and-attribute): Tweak prompts.
Miles Bader <miles@gnu.org>
parents: 31193
diff changeset
1100 (completing-read (format "Set font attributes of face `%s' from font: " face)
54574
76b831799f4d (read-face-font): Don't cons up unnecessarily.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54161
diff changeset
1101 (x-list-fonts "*" nil frame))))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1102
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1103
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1104 (defun read-all-face-attributes (face &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1105 "Interactively read all attributes for FACE.
64539
c94d5f576885 (describe-face): "?\ " -> "?\s".
Juanma Barranquero <lekktu@gmail.com>
parents: 64497
diff changeset
1106 If optional argument FRAME is nil or omitted, use the selected frame.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1107 Value is a property list of attribute names and new values."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1108 (let (result)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1109 (dolist (attribute face-attribute-name-alist result)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1110 (setq result (cons (car attribute)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1111 (cons (read-face-attribute face (car attribute) frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1112 result))))))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1113
37467
342409bb6b91 (modify-face): Add compatibility for non-interactive use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37294
diff changeset
1114 (defun modify-face (&optional face foreground background stipple
75591
a0f90fb2d33d (set-face-underline-p, modify-face): Rename arg UNDERLINE-P
Juanma Barranquero <lekktu@gmail.com>
parents: 75579
diff changeset
1115 bold-p italic-p underline inverse-p frame)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1116 "Modify attributes of faces interactively.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1117 If optional argument FRAME is nil or omitted, modify the face used
37467
342409bb6b91 (modify-face): Add compatibility for non-interactive use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37294
diff changeset
1118 for newly created frame, i.e. the global face.
342409bb6b91 (modify-face): Add compatibility for non-interactive use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37294
diff changeset
1119 For non-interactive use, `set-face-attribute' is preferred.
64539
c94d5f576885 (describe-face): "?\ " -> "?\s".
Juanma Barranquero <lekktu@gmail.com>
parents: 64497
diff changeset
1120 When called from Lisp, if FACE is nil, all arguments but FRAME are ignored
37467
342409bb6b91 (modify-face): Add compatibility for non-interactive use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37294
diff changeset
1121 and the face and its settings are obtained by querying the user."
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1122 (interactive)
37467
342409bb6b91 (modify-face): Add compatibility for non-interactive use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37294
diff changeset
1123 (if face
342409bb6b91 (modify-face): Add compatibility for non-interactive use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37294
diff changeset
1124 (set-face-attribute face frame
342409bb6b91 (modify-face): Add compatibility for non-interactive use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37294
diff changeset
1125 :foreground (or foreground 'unspecified)
342409bb6b91 (modify-face): Add compatibility for non-interactive use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37294
diff changeset
1126 :background (or background 'unspecified)
342409bb6b91 (modify-face): Add compatibility for non-interactive use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37294
diff changeset
1127 :stipple stipple
342409bb6b91 (modify-face): Add compatibility for non-interactive use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37294
diff changeset
1128 :bold bold-p
342409bb6b91 (modify-face): Add compatibility for non-interactive use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37294
diff changeset
1129 :italic italic-p
75591
a0f90fb2d33d (set-face-underline-p, modify-face): Rename arg UNDERLINE-P
Juanma Barranquero <lekktu@gmail.com>
parents: 75579
diff changeset
1130 :underline underline
37467
342409bb6b91 (modify-face): Add compatibility for non-interactive use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37294
diff changeset
1131 :inverse-video inverse-p)
342409bb6b91 (modify-face): Add compatibility for non-interactive use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37294
diff changeset
1132 (setq face (read-face-name "Modify face"))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1133 (apply #'set-face-attribute face frame
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1134 (read-all-face-attributes face frame))))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1135
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1136 (defun read-face-and-attribute (attribute &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1137 "Read face name and face attribute value.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1138 ATTRIBUTE is the attribute whose new value is read.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1139 FRAME nil or unspecified means read attribute value of global face.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1140 Value is a list (FACE NEW-VALUE) where FACE is the face read
37467
342409bb6b91 (modify-face): Add compatibility for non-interactive use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37294
diff changeset
1141 \(a symbol), and NEW-VALUE is value read."
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1142 (cond ((eq attribute :font)
31197
39d437913f44 (read-face-font, read-face-and-attribute): Tweak prompts.
Miles Bader <miles@gnu.org>
parents: 31193
diff changeset
1143 (let* ((prompt "Set font-related attributes of face")
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1144 (face (read-face-name prompt))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1145 (font (read-face-font face frame)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1146 (list face font)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1147 (t
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1148 (let* ((attribute-name (face-descriptive-attribute-name attribute))
31190
85a616c90339 (set-face-attribute):
Miles Bader <miles@gnu.org>
parents: 31179
diff changeset
1149 (prompt (format "Set %s of face" attribute-name))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1150 (face (read-face-name prompt))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1151 (new-value (read-face-attribute face attribute frame)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1152 (list face new-value)))))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1153
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1154
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1155
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1156 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1157 ;;; Listing faces.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1158 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1159
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1160 (defvar list-faces-sample-text
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1161 "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ"
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1162 "*Text string to display as the sample text for `list-faces-display'.")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1163
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1164
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1165 ;; The name list-faces would be more consistent, but let's avoid a
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1166 ;; conflict with Lucid, which uses that name differently.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1167
48914
bb52f186fa1e (help-xref-stack): Add defvar to avoid warning.
Richard M. Stallman <rms@gnu.org>
parents: 48713
diff changeset
1168 (defvar help-xref-stack)
59872
d7da3e10bfef (list-faces-display): Add optional argument.
Richard M. Stallman <rms@gnu.org>
parents: 59281
diff changeset
1169 (defun list-faces-display (&optional regexp)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1170 "List all faces, using the same sample text in each.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1171 The sample text is a string that comes from the variable
59872
d7da3e10bfef (list-faces-display): Add optional argument.
Richard M. Stallman <rms@gnu.org>
parents: 59281
diff changeset
1172 `list-faces-sample-text'.
d7da3e10bfef (list-faces-display): Add optional argument.
Richard M. Stallman <rms@gnu.org>
parents: 59281
diff changeset
1173
d7da3e10bfef (list-faces-display): Add optional argument.
Richard M. Stallman <rms@gnu.org>
parents: 59281
diff changeset
1174 If REGEXP is non-nil, list only those faces with names matching
d7da3e10bfef (list-faces-display): Add optional argument.
Richard M. Stallman <rms@gnu.org>
parents: 59281
diff changeset
1175 this regular expression. When called interactively with a prefix
d7da3e10bfef (list-faces-display): Add optional argument.
Richard M. Stallman <rms@gnu.org>
parents: 59281
diff changeset
1176 arg, prompt for a regular expression."
d7da3e10bfef (list-faces-display): Add optional argument.
Richard M. Stallman <rms@gnu.org>
parents: 59281
diff changeset
1177 (interactive (list (and current-prefix-arg
d7da3e10bfef (list-faces-display): Add optional argument.
Richard M. Stallman <rms@gnu.org>
parents: 59281
diff changeset
1178 (read-string "List faces matching regexp: "))))
62947
2a5dbdf6d22a (list-faces-display): Improve the formatting by computing the maximum length
Juanma Barranquero <lekktu@gmail.com>
parents: 62922
diff changeset
1179 (let ((all-faces (zerop (length regexp)))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1180 (frame (selected-frame))
62947
2a5dbdf6d22a (list-faces-display): Improve the formatting by computing the maximum length
Juanma Barranquero <lekktu@gmail.com>
parents: 62922
diff changeset
1181 (max-length 0)
2a5dbdf6d22a (list-faces-display): Improve the formatting by computing the maximum length
Juanma Barranquero <lekktu@gmail.com>
parents: 62922
diff changeset
1182 faces line-format
27716
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
1183 disp-frame window face-name)
62947
2a5dbdf6d22a (list-faces-display): Improve the formatting by computing the maximum length
Juanma Barranquero <lekktu@gmail.com>
parents: 62922
diff changeset
1184 ;; We filter and take the max length in one pass
2a5dbdf6d22a (list-faces-display): Improve the formatting by computing the maximum length
Juanma Barranquero <lekktu@gmail.com>
parents: 62922
diff changeset
1185 (setq faces
2a5dbdf6d22a (list-faces-display): Improve the formatting by computing the maximum length
Juanma Barranquero <lekktu@gmail.com>
parents: 62922
diff changeset
1186 (delq nil
2a5dbdf6d22a (list-faces-display): Improve the formatting by computing the maximum length
Juanma Barranquero <lekktu@gmail.com>
parents: 62922
diff changeset
1187 (mapcar (lambda (f)
2a5dbdf6d22a (list-faces-display): Improve the formatting by computing the maximum length
Juanma Barranquero <lekktu@gmail.com>
parents: 62922
diff changeset
1188 (let ((s (symbol-name f)))
2a5dbdf6d22a (list-faces-display): Improve the formatting by computing the maximum length
Juanma Barranquero <lekktu@gmail.com>
parents: 62922
diff changeset
1189 (when (or all-faces (string-match regexp s))
2a5dbdf6d22a (list-faces-display): Improve the formatting by computing the maximum length
Juanma Barranquero <lekktu@gmail.com>
parents: 62922
diff changeset
1190 (setq max-length (max (length s) max-length))
2a5dbdf6d22a (list-faces-display): Improve the formatting by computing the maximum length
Juanma Barranquero <lekktu@gmail.com>
parents: 62922
diff changeset
1191 f)))
2a5dbdf6d22a (list-faces-display): Improve the formatting by computing the maximum length
Juanma Barranquero <lekktu@gmail.com>
parents: 62922
diff changeset
1192 (sort (face-list) #'string-lessp))))
2a5dbdf6d22a (list-faces-display): Improve the formatting by computing the maximum length
Juanma Barranquero <lekktu@gmail.com>
parents: 62922
diff changeset
1193 (unless faces
2a5dbdf6d22a (list-faces-display): Improve the formatting by computing the maximum length
Juanma Barranquero <lekktu@gmail.com>
parents: 62922
diff changeset
1194 (error "No faces matching \"%s\"" regexp))
2a5dbdf6d22a (list-faces-display): Improve the formatting by computing the maximum length
Juanma Barranquero <lekktu@gmail.com>
parents: 62922
diff changeset
1195 (setq max-length (1+ max-length)
2a5dbdf6d22a (list-faces-display): Improve the formatting by computing the maximum length
Juanma Barranquero <lekktu@gmail.com>
parents: 62922
diff changeset
1196 line-format (format "%%-%ds" max-length))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1197 (with-output-to-temp-buffer "*Faces*"
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1198 (save-excursion
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1199 (set-buffer standard-output)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1200 (setq truncate-lines t)
27716
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
1201 (insert
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
1202 (substitute-command-keys
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
1203 (concat
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
1204 "Use "
27736
b4d0a1247b35 (list-faces-display): Use display-mouse-p, not window-system.
Eli Zaretskii <eliz@gnu.org>
parents: 27716
diff changeset
1205 (if (display-mouse-p) "\\[help-follow-mouse] or ")
27831
05cce359cbf0 (list-faces-display): Fix header typo.
Dave Love <fx@gnu.org>
parents: 27736
diff changeset
1206 "\\[help-follow] on a face name to customize it\n"
43550
fc7733c201af (list-faces-display): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 43392
diff changeset
1207 "or on its sample text for a description of the face.\n\n")))
27716
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
1208 (setq help-xref-stack nil)
59872
d7da3e10bfef (list-faces-display): Add optional argument.
Richard M. Stallman <rms@gnu.org>
parents: 59281
diff changeset
1209 (dolist (face faces)
27716
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
1210 (setq face-name (symbol-name face))
62947
2a5dbdf6d22a (list-faces-display): Improve the formatting by computing the maximum length
Juanma Barranquero <lekktu@gmail.com>
parents: 62922
diff changeset
1211 (insert (format line-format face-name))
27716
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
1212 ;; Hyperlink to a customization buffer for the face. Using
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
1213 ;; the help xref mechanism may not be the best way.
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
1214 (save-excursion
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
1215 (save-match-data
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
1216 (search-backward face-name)
62534
bf6a0cd0e835 (list-faces-display): Make back button respect optional regexp arg.
Nick Roberts <nickrob@snap.net.nz>
parents: 62498
diff changeset
1217 (setq help-xref-stack-item `(list-faces-display ,regexp))
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1218 (help-xref-button 0 'help-customize-face face)))
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1219 (let ((beg (point))
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1220 (line-beg (line-beginning-position)))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1221 (insert list-faces-sample-text)
27716
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
1222 ;; Hyperlink to a help buffer for the face.
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
1223 (save-excursion
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
1224 (save-match-data
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
1225 (search-backward list-faces-sample-text)
39799
99f30ac48ec0 (list-faces-display, describe-face): Fix args to `help-xref-button'.
Miles Bader <miles@gnu.org>
parents: 39549
diff changeset
1226 (help-xref-button 0 'help-face face)))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1227 (insert "\n")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1228 (put-text-property beg (1- (point)) 'face face)
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1229 ;; Make all face commands default to the proper face
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1230 ;; anywhere in the line.
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1231 (put-text-property line-beg (1- (point)) 'read-face-name face)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1232 ;; If the sample text has multiple lines, line up all of them.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1233 (goto-char beg)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1234 (forward-line 1)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1235 (while (not (eobp))
62947
2a5dbdf6d22a (list-faces-display): Improve the formatting by computing the maximum length
Juanma Barranquero <lekktu@gmail.com>
parents: 62922
diff changeset
1236 (insert-char ?\s max-length)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1237 (forward-line 1))))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1238 (goto-char (point-min)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1239 (print-help-return-message))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1240 ;; If the *Faces* buffer appears in a different frame,
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1241 ;; copy all the face definitions from FRAME,
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1242 ;; so that the display will reflect the frame that was selected.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1243 (setq window (get-buffer-window (get-buffer "*Faces*") t))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1244 (setq disp-frame (if window (window-frame window)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1245 (car (frame-list))))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1246 (or (eq frame disp-frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1247 (let ((faces (face-list)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1248 (while faces
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1249 (copy-face (car faces) (car faces) frame disp-frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1250 (setq faces (cdr faces)))))))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1251
59872
d7da3e10bfef (list-faces-display): Add optional argument.
Richard M. Stallman <rms@gnu.org>
parents: 59281
diff changeset
1252
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1253 (defun describe-face (face &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1254 "Display the properties of face FACE on FRAME.
45314
d752ae89321a (describe-face): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 45255
diff changeset
1255 Interactively, FACE defaults to the faces of the character after point
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1256 and FRAME defaults to the selected frame.
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1257
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1258 If the optional argument FRAME is given, report on face FACE in that frame.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1259 If FRAME is t, report on the defaults for face FACE (for new frames).
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1260 If FRAME is omitted or nil, use the selected frame."
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1261 (interactive (list (read-face-name "Describe face" "= `default' face" t)))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1262 (let* ((attrs '((:family . "Family")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1263 (:width . "Width")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1264 (:height . "Height")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1265 (:weight . "Weight")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1266 (:slant . "Slant")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1267 (:foreground . "Foreground")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1268 (:background . "Background")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1269 (:underline . "Underline")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1270 (:overline . "Overline")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1271 (:strike-through . "Strike-through")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1272 (:box . "Box")
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1273 (:inverse-video . "Inverse")
28214
73c16c6e401e (read-face-font): Fix TABLE arg to completing-read.
Kenichi Handa <handa@m17n.org>
parents: 27928
diff changeset
1274 (:stipple . "Stipple")
31179
354c781f2864 (describe-face): Add support for :inherit attribute.
Miles Bader <miles@gnu.org>
parents: 30971
diff changeset
1275 (:font . "Font or fontset")
354c781f2864 (describe-face): Add support for :inherit attribute.
Miles Bader <miles@gnu.org>
parents: 30971
diff changeset
1276 (:inherit . "Inherit")))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1277 (max-width (apply #'max (mapcar #'(lambda (x) (length (cdr x)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1278 attrs))))
39830
aed9c3afb7ed (describe-face): Call help-setup-xref earlier.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39799
diff changeset
1279 (help-setup-xref (list #'describe-face face) (interactive-p))
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1280 (unless face
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1281 (setq face 'default))
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1282 (if (not (listp face))
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1283 (setq face (list face)))
39799
99f30ac48ec0 (list-faces-display, describe-face): Fix args to `help-xref-button'.
Miles Bader <miles@gnu.org>
parents: 39549
diff changeset
1284 (with-output-to-temp-buffer (help-buffer)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1285 (save-excursion
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1286 (set-buffer standard-output)
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1287 (dolist (f face)
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1288 (insert "Face: " (symbol-name f))
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1289 (if (not (facep f))
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1290 (insert " undefined face.\n")
62386
3eeae124dcab (describe-face): Output a definition link button.
Richard M. Stallman <rms@gnu.org>
parents: 61481
diff changeset
1291 (let ((customize-label "customize this face")
3eeae124dcab (describe-face): Output a definition link button.
Richard M. Stallman <rms@gnu.org>
parents: 61481
diff changeset
1292 file-name)
73668
1d779fbeeaef (faces-sample-overlay, describe-face): Revert last changes.
Eli Zaretskii <eliz@gnu.org>
parents: 73580
diff changeset
1293 (insert (concat " (" (propertize "sample" 'font-lock-face f) ")"))
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1294 (princ (concat " (" customize-label ")\n"))
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1295 (insert "Documentation: "
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1296 (or (face-documentation f)
46041
53b3233b2574 (describe-face): Capitalize "not documented" message.
Juanma Barranquero <lekktu@gmail.com>
parents: 45722
diff changeset
1297 "Not documented as a face.")
62386
3eeae124dcab (describe-face): Output a definition link button.
Richard M. Stallman <rms@gnu.org>
parents: 61481
diff changeset
1298 "\n")
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1299 (with-current-buffer standard-output
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1300 (save-excursion
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1301 (re-search-backward
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1302 (concat "\\(" customize-label "\\)") nil t)
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1303 (help-xref-button 1 'help-customize-face f)))
62386
3eeae124dcab (describe-face): Output a definition link button.
Richard M. Stallman <rms@gnu.org>
parents: 61481
diff changeset
1304 ;; The next 4 sexps are copied from describe-function-1
3eeae124dcab (describe-face): Output a definition link button.
Richard M. Stallman <rms@gnu.org>
parents: 61481
diff changeset
1305 ;; and simplified.
3eeae124dcab (describe-face): Output a definition link button.
Richard M. Stallman <rms@gnu.org>
parents: 61481
diff changeset
1306 (setq file-name (symbol-file f 'defface))
66351
fc5672d9fc45 (describe-face): Use describe-simplify-lib-file-name.
Richard M. Stallman <rms@gnu.org>
parents: 65730
diff changeset
1307 (setq file-name (describe-simplify-lib-file-name file-name))
62386
3eeae124dcab (describe-face): Output a definition link button.
Richard M. Stallman <rms@gnu.org>
parents: 61481
diff changeset
1308 (when file-name
3eeae124dcab (describe-face): Output a definition link button.
Richard M. Stallman <rms@gnu.org>
parents: 61481
diff changeset
1309 (princ "Defined in `")
3eeae124dcab (describe-face): Output a definition link button.
Richard M. Stallman <rms@gnu.org>
parents: 61481
diff changeset
1310 (princ file-name)
3eeae124dcab (describe-face): Output a definition link button.
Richard M. Stallman <rms@gnu.org>
parents: 61481
diff changeset
1311 (princ "'")
3eeae124dcab (describe-face): Output a definition link button.
Richard M. Stallman <rms@gnu.org>
parents: 61481
diff changeset
1312 ;; Make a hyperlink to the library.
3eeae124dcab (describe-face): Output a definition link button.
Richard M. Stallman <rms@gnu.org>
parents: 61481
diff changeset
1313 (save-excursion
3eeae124dcab (describe-face): Output a definition link button.
Richard M. Stallman <rms@gnu.org>
parents: 61481
diff changeset
1314 (re-search-backward "`\\([^`']+\\)'" nil t)
3eeae124dcab (describe-face): Output a definition link button.
Richard M. Stallman <rms@gnu.org>
parents: 61481
diff changeset
1315 (help-xref-button 1 'help-face-def f file-name))
3eeae124dcab (describe-face): Output a definition link button.
Richard M. Stallman <rms@gnu.org>
parents: 61481
diff changeset
1316 (princ ".")
3eeae124dcab (describe-face): Output a definition link button.
Richard M. Stallman <rms@gnu.org>
parents: 61481
diff changeset
1317 (terpri)
3eeae124dcab (describe-face): Output a definition link button.
Richard M. Stallman <rms@gnu.org>
parents: 61481
diff changeset
1318 (terpri))
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1319 (dolist (a attrs)
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1320 (let ((attr (face-attribute f (car a) frame)))
64539
c94d5f576885 (describe-face): "?\ " -> "?\s".
Juanma Barranquero <lekktu@gmail.com>
parents: 64497
diff changeset
1321 (insert (make-string (- max-width (length (cdr a))) ?\s)
65068
6606e83775f0 (set-face-underline): Delete this duplicate function
Juri Linkov <juri@jurta.org>
parents: 64762
diff changeset
1322 (cdr a) ": " (format "%s" attr))
6606e83775f0 (set-face-underline): Delete this duplicate function
Juri Linkov <juri@jurta.org>
parents: 64762
diff changeset
1323 (if (and (eq (car a) :inherit)
6606e83775f0 (set-face-underline): Delete this duplicate function
Juri Linkov <juri@jurta.org>
parents: 64762
diff changeset
1324 (not (eq attr 'unspecified)))
6606e83775f0 (set-face-underline): Delete this duplicate function
Juri Linkov <juri@jurta.org>
parents: 64762
diff changeset
1325 ;; Make a hyperlink to the parent face.
6606e83775f0 (set-face-underline): Delete this duplicate function
Juri Linkov <juri@jurta.org>
parents: 64762
diff changeset
1326 (save-excursion
6606e83775f0 (set-face-underline): Delete this duplicate function
Juri Linkov <juri@jurta.org>
parents: 64762
diff changeset
1327 (re-search-backward ": \\([^:]+\\)" nil t)
6606e83775f0 (set-face-underline): Delete this duplicate function
Juri Linkov <juri@jurta.org>
parents: 64762
diff changeset
1328 (help-xref-button 1 'help-face attr)))
6606e83775f0 (set-face-underline): Delete this duplicate function
Juri Linkov <juri@jurta.org>
parents: 64762
diff changeset
1329 (insert "\n")))))
44886
fe167023fdf0 (read-face-name): New defaulting features.
Richard M. Stallman <rms@gnu.org>
parents: 44590
diff changeset
1330 (terpri)))
39830
aed9c3afb7ed (describe-face): Call help-setup-xref earlier.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39799
diff changeset
1331 (print-help-return-message))))
39799
99f30ac48ec0 (list-faces-display, describe-face): Fix args to `help-xref-button'.
Miles Bader <miles@gnu.org>
parents: 39549
diff changeset
1332
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1333
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1334 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1335 ;;; Face specifications (defface).
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1336 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1337
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1338 ;; Parameter FRAME Is kept for call compatibility to with previous
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1339 ;; face implementation.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1340
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1341 (defun face-attr-construct (face &optional frame)
64539
c94d5f576885 (describe-face): "?\ " -> "?\s".
Juanma Barranquero <lekktu@gmail.com>
parents: 64497
diff changeset
1342 "Return a `defface'-style attribute list for FACE on FRAME.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1343 Value is a property list of pairs ATTRIBUTE VALUE for all specified
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1344 face attributes of FACE where ATTRIBUTE is the attribute name and
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1345 VALUE is the specified value of that attribute."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1346 (let (result)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1347 (dolist (entry face-attribute-name-alist result)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1348 (let* ((attribute (car entry))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1349 (value (face-attribute face attribute)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1350 (unless (eq value 'unspecified)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1351 (setq result (nconc (list attribute value) result)))))))
37943
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
1352
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1353
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1354 (defun face-spec-set-match-display (display frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1355 "Non-nil if DISPLAY matches FRAME.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1356 DISPLAY is part of a spec such as can be used in `defface'.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1357 If FRAME is nil, the current FRAME is used."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1358 (let* ((conjuncts display)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1359 conjunct req options
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1360 ;; t means we have succeeded against all the conjuncts in
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1361 ;; DISPLAY that have been tested so far.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1362 (match t))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1363 (if (eq conjuncts t)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1364 (setq conjuncts nil))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1365 (while (and conjuncts match)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1366 (setq conjunct (car conjuncts)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1367 conjuncts (cdr conjuncts)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1368 req (car conjunct)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1369 options (cdr conjunct)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1370 match (cond ((eq req 'type)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1371 (or (memq window-system options)
33447
45961172564e (face-spec-set-match-display): Revert the change from
Eli Zaretskii <eliz@gnu.org>
parents: 33419
diff changeset
1372 ;; FIXME: This should be revisited to use
45961172564e (face-spec-set-match-display): Revert the change from
Eli Zaretskii <eliz@gnu.org>
parents: 33419
diff changeset
1373 ;; display-graphic-p, provided that the
45961172564e (face-spec-set-match-display): Revert the change from
Eli Zaretskii <eliz@gnu.org>
parents: 33419
diff changeset
1374 ;; color selection depends on the number
45961172564e (face-spec-set-match-display): Revert the change from
Eli Zaretskii <eliz@gnu.org>
parents: 33419
diff changeset
1375 ;; of supported colors, and all defface's
45961172564e (face-spec-set-match-display): Revert the change from
Eli Zaretskii <eliz@gnu.org>
parents: 33419
diff changeset
1376 ;; are changed to look at number of colors
45961172564e (face-spec-set-match-display): Revert the change from
Eli Zaretskii <eliz@gnu.org>
parents: 33419
diff changeset
1377 ;; instead of (type graphic) etc.
45961172564e (face-spec-set-match-display): Revert the change from
Eli Zaretskii <eliz@gnu.org>
parents: 33419
diff changeset
1378 (and (null window-system)
45961172564e (face-spec-set-match-display): Revert the change from
Eli Zaretskii <eliz@gnu.org>
parents: 33419
diff changeset
1379 (memq 'tty options))
25887
099a3776ff00 (face-spec-set-match-display): Recognize `type' of
Gerd Moellmann <gerd@gnu.org>
parents: 25814
diff changeset
1380 (and (memq 'motif options)
099a3776ff00 (face-spec-set-match-display): Recognize `type' of
Gerd Moellmann <gerd@gnu.org>
parents: 25814
diff changeset
1381 (featurep 'motif))
55545
70c4138d3b8d * custom.el (defface): Document that type can have value gtk.
Jan Djärv <jan.h.d@swipnet.se>
parents: 54574
diff changeset
1382 (and (memq 'gtk options)
70c4138d3b8d * custom.el (defface): Document that type can have value gtk.
Jan Djärv <jan.h.d@swipnet.se>
parents: 54574
diff changeset
1383 (featurep 'gtk))
25887
099a3776ff00 (face-spec-set-match-display): Recognize `type' of
Gerd Moellmann <gerd@gnu.org>
parents: 25814
diff changeset
1384 (and (memq 'lucid options)
099a3776ff00 (face-spec-set-match-display): Recognize `type' of
Gerd Moellmann <gerd@gnu.org>
parents: 25814
diff changeset
1385 (featurep 'x-toolkit)
55545
70c4138d3b8d * custom.el (defface): Document that type can have value gtk.
Jan Djärv <jan.h.d@swipnet.se>
parents: 54574
diff changeset
1386 (not (featurep 'motif))
70c4138d3b8d * custom.el (defface): Document that type can have value gtk.
Jan Djärv <jan.h.d@swipnet.se>
parents: 54574
diff changeset
1387 (not (featurep 'gtk)))
25887
099a3776ff00 (face-spec-set-match-display): Recognize `type' of
Gerd Moellmann <gerd@gnu.org>
parents: 25814
diff changeset
1388 (and (memq 'x-toolkit options)
099a3776ff00 (face-spec-set-match-display): Recognize `type' of
Gerd Moellmann <gerd@gnu.org>
parents: 25814
diff changeset
1389 (featurep 'x-toolkit))))
54151
9a5c3b661a40 (face-spec-set-match-display): Add a new attribute, `min-colors'.
Eli Zaretskii <eliz@gnu.org>
parents: 52401
diff changeset
1390 ((eq req 'min-colors)
9a5c3b661a40 (face-spec-set-match-display): Add a new attribute, `min-colors'.
Eli Zaretskii <eliz@gnu.org>
parents: 52401
diff changeset
1391 (>= (display-color-cells frame) (car options)))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1392 ((eq req 'class)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1393 (memq (frame-parameter frame 'display-type) options))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1394 ((eq req 'background)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1395 (memq (frame-parameter frame 'background-mode)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1396 options))
45722
c553d91619aa (display-supports-face-attributes-p): Work correctly if DISPLAY is a frame.
Miles Bader <miles@gnu.org>
parents: 45717
diff changeset
1397 ((eq req 'supports)
c553d91619aa (display-supports-face-attributes-p): Work correctly if DISPLAY is a frame.
Miles Bader <miles@gnu.org>
parents: 45717
diff changeset
1398 (display-supports-face-attributes-p options frame))
28840
d0531e35d9f2 Some doc fixes.
Dave Love <fx@gnu.org>
parents: 28214
diff changeset
1399 (t (error "Unknown req `%S' with options `%S'"
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1400 req options)))))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1401 match))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1402
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1403
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1404 (defun face-spec-choose (spec &optional frame)
32758
a0ca98ed466a (face-user-default-spec, face-default-spec): New functions.
Miles Bader <miles@gnu.org>
parents: 32756
diff changeset
1405 "Choose the proper attributes for FRAME, out of SPEC.
a0ca98ed466a (face-user-default-spec, face-default-spec): New functions.
Miles Bader <miles@gnu.org>
parents: 32756
diff changeset
1406 If SPEC is nil, return nil."
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1407 (unless frame
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1408 (setq frame (selected-frame)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1409 (let ((tail spec)
58935
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
1410 result defaults)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1411 (while tail
32940
80681aca0859 (face-spec-choose): Change syntax so that the list of attribute-value
Miles Bader <miles@gnu.org>
parents: 32801
diff changeset
1412 (let* ((entry (pop tail))
80681aca0859 (face-spec-choose): Change syntax so that the list of attribute-value
Miles Bader <miles@gnu.org>
parents: 32801
diff changeset
1413 (display (car entry))
58935
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
1414 (attrs (cdr entry))
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
1415 thisval)
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
1416 ;; Get the attributes as actually specified by this alternative.
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
1417 (setq thisval
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
1418 (if (null (cdr attrs)) ;; was (listp (car attrs))
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
1419 ;; Old-style entry, the attribute list is the
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
1420 ;; first element.
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
1421 (car attrs)
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
1422 attrs))
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
1423
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
1424 ;; If the condition is `default', that sets the default
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
1425 ;; for following conditions.
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
1426 (if (eq display 'default)
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
1427 (setq defaults thisval)
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
1428 ;; Otherwise, if it matches, use it.
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
1429 (when (face-spec-set-match-display display frame)
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
1430 (setq result thisval)
43711
d15360503e4e (face-spec-choose): Allow `t' to appear before the end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43550
diff changeset
1431 (setq tail nil)))))
58935
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
1432 (if defaults (append result defaults) result)))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1433
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1434
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1435 (defun face-spec-reset-face (face &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1436 "Reset all attributes of FACE on FRAME to unspecified."
31401
0b8165a82e34 (set-face-attribute, face-spec-reset-face)
Gerd Moellmann <gerd@gnu.org>
parents: 31197
diff changeset
1437 (let ((attrs face-attribute-name-alist))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1438 (while attrs
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1439 (let ((attr-and-name (car attrs)))
31401
0b8165a82e34 (set-face-attribute, face-spec-reset-face)
Gerd Moellmann <gerd@gnu.org>
parents: 31197
diff changeset
1440 (set-face-attribute face frame (car attr-and-name) 'unspecified))
0b8165a82e34 (set-face-attribute, face-spec-reset-face)
Gerd Moellmann <gerd@gnu.org>
parents: 31197
diff changeset
1441 (setq attrs (cdr attrs)))))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1442
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1443
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1444 (defun face-spec-set (face spec &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1445 "Set FACE's attributes according to the first matching entry in SPEC.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1446 FRAME is the frame whose frame-local face is set. FRAME nil means
32758
a0ca98ed466a (face-user-default-spec, face-default-spec): New functions.
Miles Bader <miles@gnu.org>
parents: 32756
diff changeset
1447 do it on all frames. See `defface' for information about SPEC.
a0ca98ed466a (face-user-default-spec, face-default-spec): New functions.
Miles Bader <miles@gnu.org>
parents: 32756
diff changeset
1448 If SPEC is nil, do nothing."
31401
0b8165a82e34 (set-face-attribute, face-spec-reset-face)
Gerd Moellmann <gerd@gnu.org>
parents: 31197
diff changeset
1449 (let ((attrs (face-spec-choose spec frame)))
66717
5271a20d9255 * font-lock.el: Don't deal with font-lock-face-attributes here,
Dan Nicolaescu <dann@ics.uci.edu>
parents: 66596
diff changeset
1450 (when spec
31500
33b9a5b2a3bc (face-spec-set): Only face-spec-reset-face when
Gerd Moellmann <gerd@gnu.org>
parents: 31466
diff changeset
1451 (face-spec-reset-face face frame))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1452 (while attrs
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1453 (let ((attribute (car attrs))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1454 (value (car (cdr attrs))))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1455 ;; Support some old-style attribute names and values.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1456 (case attribute
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1457 (:bold (setq attribute :weight value (if value 'bold 'normal)))
30010
281fa98f5c87 (face-spec-set): Ignore invalid attributes like 20.x.
Gerd Moellmann <gerd@gnu.org>
parents: 29976
diff changeset
1458 (:italic (setq attribute :slant value (if value 'italic 'normal)))
34682
4130c0ad0a5e (face-spec-set): Interpret a nil in specs for
Gerd Moellmann <gerd@gnu.org>
parents: 34587
diff changeset
1459 ((:foreground :background)
37943
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
1460 ;; Compatibility with 20.x. Some bogus face specs seem to
34682
4130c0ad0a5e (face-spec-set): Interpret a nil in specs for
Gerd Moellmann <gerd@gnu.org>
parents: 34587
diff changeset
1461 ;; exist containing things like `:foreground nil'.
4130c0ad0a5e (face-spec-set): Interpret a nil in specs for
Gerd Moellmann <gerd@gnu.org>
parents: 34587
diff changeset
1462 (if (null value) (setq value 'unspecified)))
30010
281fa98f5c87 (face-spec-set): Ignore invalid attributes like 20.x.
Gerd Moellmann <gerd@gnu.org>
parents: 29976
diff changeset
1463 (t (unless (assq attribute face-x-resources)
281fa98f5c87 (face-spec-set): Ignore invalid attributes like 20.x.
Gerd Moellmann <gerd@gnu.org>
parents: 29976
diff changeset
1464 (setq attribute nil))))
281fa98f5c87 (face-spec-set): Ignore invalid attributes like 20.x.
Gerd Moellmann <gerd@gnu.org>
parents: 29976
diff changeset
1465 (when attribute
31401
0b8165a82e34 (set-face-attribute, face-spec-reset-face)
Gerd Moellmann <gerd@gnu.org>
parents: 31197
diff changeset
1466 (set-face-attribute face frame attribute value)))
51280
c2efaecb5d8f (set-face-attribute): Set face-modified prop to t
Richard M. Stallman <rms@gnu.org>
parents: 51248
diff changeset
1467 (setq attrs (cdr (cdr attrs)))))
c2efaecb5d8f (set-face-attribute): Set face-modified prop to t
Richard M. Stallman <rms@gnu.org>
parents: 51248
diff changeset
1468 ;; When we reset the face based on its spec, then it is unmodified
c2efaecb5d8f (set-face-attribute): Set face-modified prop to t
Richard M. Stallman <rms@gnu.org>
parents: 51248
diff changeset
1469 ;; as far as Custom is concerned.
c2efaecb5d8f (set-face-attribute): Set face-modified prop to t
Richard M. Stallman <rms@gnu.org>
parents: 51248
diff changeset
1470 (if (null frame)
63660
47c90f7c23df (face-documentation, set-face-attribute)
Glenn Morris <rgm@gnu.org>
parents: 63650
diff changeset
1471 (put (or (get face 'face-alias) face) 'face-modified nil)))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1472
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1473
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1474 (defun face-attr-match-p (face attrs &optional frame)
30971
9a23751378f3 (face-attr-match-p):
Miles Bader <miles@gnu.org>
parents: 30306
diff changeset
1475 "Return t if attributes of FACE match values in plist ATTRS.
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1476 Optional parameter FRAME is the frame whose definition of FACE
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1477 is used. If nil or omitted, use the selected frame."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1478 (unless frame
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1479 (setq frame (selected-frame)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1480 (let ((list face-attribute-name-alist)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1481 (match t))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1482 (while (and match (not (null list)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1483 (let* ((attr (car (car list)))
30971
9a23751378f3 (face-attr-match-p):
Miles Bader <miles@gnu.org>
parents: 30306
diff changeset
1484 (specified-value
9a23751378f3 (face-attr-match-p):
Miles Bader <miles@gnu.org>
parents: 30306
diff changeset
1485 (if (plist-member attrs attr)
9a23751378f3 (face-attr-match-p):
Miles Bader <miles@gnu.org>
parents: 30306
diff changeset
1486 (plist-get attrs attr)
9a23751378f3 (face-attr-match-p):
Miles Bader <miles@gnu.org>
parents: 30306
diff changeset
1487 'unspecified))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1488 (value-now (face-attribute face attr frame)))
30971
9a23751378f3 (face-attr-match-p):
Miles Bader <miles@gnu.org>
parents: 30306
diff changeset
1489 (setq match (equal specified-value value-now))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1490 (setq list (cdr list))))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1491 match))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1492
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1493 (defun face-spec-match-p (face spec &optional frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1494 "Return t if FACE, on FRAME, matches what SPEC says it should look like."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1495 (face-attr-match-p face (face-spec-choose spec frame) frame))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1496
32795
975cc2648ee4 (face-default-spec, face-user-default-spec): Make defsubsts.
Miles Bader <miles@gnu.org>
parents: 32758
diff changeset
1497 (defsubst face-default-spec (face)
975cc2648ee4 (face-default-spec, face-user-default-spec): Make defsubsts.
Miles Bader <miles@gnu.org>
parents: 32758
diff changeset
1498 "Return the default face-spec for FACE, ignoring any user customization.
975cc2648ee4 (face-default-spec, face-user-default-spec): Make defsubsts.
Miles Bader <miles@gnu.org>
parents: 32758
diff changeset
1499 If there is no default for FACE, return nil."
975cc2648ee4 (face-default-spec, face-user-default-spec): Make defsubsts.
Miles Bader <miles@gnu.org>
parents: 32758
diff changeset
1500 (get face 'face-defface-spec))
975cc2648ee4 (face-default-spec, face-user-default-spec): Make defsubsts.
Miles Bader <miles@gnu.org>
parents: 32758
diff changeset
1501
975cc2648ee4 (face-default-spec, face-user-default-spec): Make defsubsts.
Miles Bader <miles@gnu.org>
parents: 32758
diff changeset
1502 (defsubst face-user-default-spec (face)
32758
a0ca98ed466a (face-user-default-spec, face-default-spec): New functions.
Miles Bader <miles@gnu.org>
parents: 32756
diff changeset
1503 "Return the user's customized face-spec for FACE, or the default if none.
37467
342409bb6b91 (modify-face): Add compatibility for non-interactive use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37294
diff changeset
1504 If there is neither a user setting nor a default for FACE, return nil."
63637
de897c139738 (face-user-default-spec): Try getting `customized-face' prior to `saved-face'.
Juri Linkov <juri@jurta.org>
parents: 63594
diff changeset
1505 (or (get face 'customized-face)
de897c139738 (face-user-default-spec): Try getting `customized-face' prior to `saved-face'.
Juri Linkov <juri@jurta.org>
parents: 63594
diff changeset
1506 (get face 'saved-face)
32795
975cc2648ee4 (face-default-spec, face-user-default-spec): Make defsubsts.
Miles Bader <miles@gnu.org>
parents: 32758
diff changeset
1507 (face-default-spec face)))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1508
78374
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1509 (defsubst face-normalize-spec (spec)
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1510 "Return a normalized face-spec of SPEC."
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1511 (let (normalized-spec)
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1512 (while spec
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1513 (let ((attribute (car spec))
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1514 (value (car (cdr spec))))
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1515 ;; Support some old-style attribute names and values.
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1516 (case attribute
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1517 (:bold (setq attribute :weight value (if value 'bold 'normal)))
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1518 (:italic (setq attribute :slant value (if value 'italic 'normal)))
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1519 ((:foreground :background)
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1520 ;; Compatibility with 20.x. Some bogus face specs seem to
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1521 ;; exist containing things like `:foreground nil'.
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1522 (if (null value) (setq value 'unspecified)))
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1523 (t (unless (assq attribute face-x-resources)
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1524 (setq attribute nil))))
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1525 (when attribute
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1526 (push attribute normalized-spec)
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1527 (push value normalized-spec)))
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1528 (setq spec (cdr (cdr spec))))
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1529 (nreverse normalized-spec)))
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1530
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1531
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1532 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
26736
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1533 ;;; Frame-type independent color support.
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1534 ;;; We keep the old x-* names as aliases for back-compatibility.
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1535 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1536
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1537 (defun defined-colors (&optional frame)
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1538 "Return a list of colors supported for a particular frame.
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1539 The argument FRAME specifies which frame to try.
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1540 The value may be different for frames on different display types.
71231
f91f3db3c52a (defined-colors): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 70178
diff changeset
1541 If FRAME doesn't support colors, the value is nil.
f91f3db3c52a (defined-colors): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 70178
diff changeset
1542 If FRAME is nil, that stands for the selected frame."
32752
923b8d6d8277 Initial check-in: changes for building Emacs under Mac OS.
Andrew Choi <akochoi@shaw.ca>
parents: 32734
diff changeset
1543 (if (memq (framep (or frame (selected-frame))) '(x w32 mac))
26736
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1544 (xw-defined-colors frame)
27090
52e469fb402a (read-face-attribute, defined-colors, color-defined-p):
Eli Zaretskii <eliz@gnu.org>
parents: 26927
diff changeset
1545 (mapcar 'car (tty-color-alist frame))))
26736
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1546 (defalias 'x-defined-colors 'defined-colors)
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1547
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1548 (defun color-defined-p (color &optional frame)
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1549 "Return non-nil if color COLOR is supported on frame FRAME.
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1550 If FRAME is omitted or nil, use the selected frame.
27117
6838a53d4992 (face-read-integer, read-face-attribute)
Eli Zaretskii <eliz@gnu.org>
parents: 27090
diff changeset
1551 If COLOR is the symbol `unspecified' or one of the strings
6838a53d4992 (face-read-integer, read-face-attribute)
Eli Zaretskii <eliz@gnu.org>
parents: 27090
diff changeset
1552 \"unspecified-fg\" or \"unspecified-bg\", the value is nil."
32734
92b46ad86f6a (color-values, color-defined-p): Use `member', not
Miles Bader <miles@gnu.org>
parents: 32649
diff changeset
1553 (if (member color '(unspecified "unspecified-bg" "unspecified-fg"))
26736
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1554 nil
32752
923b8d6d8277 Initial check-in: changes for building Emacs under Mac OS.
Andrew Choi <akochoi@shaw.ca>
parents: 32734
diff changeset
1555 (if (member (framep (or frame (selected-frame))) '(x w32 mac))
26736
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1556 (xw-color-defined-p color frame)
27090
52e469fb402a (read-face-attribute, defined-colors, color-defined-p):
Eli Zaretskii <eliz@gnu.org>
parents: 26927
diff changeset
1557 (numberp (tty-color-translate color frame)))))
26736
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1558 (defalias 'x-color-defined-p 'color-defined-p)
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1559
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1560 (defun color-values (color &optional frame)
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1561 "Return a description of the color named COLOR on frame FRAME.
75884
ab51c2b6faf8 (color-values): Revert changes to docstring from 2007-01-31 and 2000-09-07.
Juanma Barranquero <lekktu@gmail.com>
parents: 75705
diff changeset
1562 The value is a list of integer RGB values--(RED GREEN BLUE).
ab51c2b6faf8 (color-values): Revert changes to docstring from 2007-01-31 and 2000-09-07.
Juanma Barranquero <lekktu@gmail.com>
parents: 75705
diff changeset
1563 These values appear to range from 0 to 65280 or 65535, depending
ab51c2b6faf8 (color-values): Revert changes to docstring from 2007-01-31 and 2000-09-07.
Juanma Barranquero <lekktu@gmail.com>
parents: 75705
diff changeset
1564 on the system; white is \(65280 65280 65280\) or \(65535 65535 65535\).
26736
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1565 If FRAME is omitted or nil, use the selected frame.
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1566 If FRAME cannot display COLOR, the value is nil.
27117
6838a53d4992 (face-read-integer, read-face-attribute)
Eli Zaretskii <eliz@gnu.org>
parents: 27090
diff changeset
1567 If COLOR is the symbol `unspecified' or one of the strings
6838a53d4992 (face-read-integer, read-face-attribute)
Eli Zaretskii <eliz@gnu.org>
parents: 27090
diff changeset
1568 \"unspecified-fg\" or \"unspecified-bg\", the value is nil."
32734
92b46ad86f6a (color-values, color-defined-p): Use `member', not
Miles Bader <miles@gnu.org>
parents: 32649
diff changeset
1569 (if (member color '(unspecified "unspecified-fg" "unspecified-bg"))
26736
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1570 nil
32752
923b8d6d8277 Initial check-in: changes for building Emacs under Mac OS.
Andrew Choi <akochoi@shaw.ca>
parents: 32734
diff changeset
1571 (if (memq (framep (or frame (selected-frame))) '(x w32 mac))
26736
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1572 (xw-color-values color frame)
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1573 (tty-color-values color frame))))
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1574 (defalias 'x-color-values 'color-values)
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1575
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1576 (defun display-color-p (&optional display)
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1577 "Return t if DISPLAY supports color.
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1578 The optional argument DISPLAY specifies which display to ask about.
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1579 DISPLAY should be either a frame or a display name (a string).
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1580 If omitted or nil, that stands for the selected frame's display."
32752
923b8d6d8277 Initial check-in: changes for building Emacs under Mac OS.
Andrew Choi <akochoi@shaw.ca>
parents: 32734
diff changeset
1581 (if (memq (framep-on-display display) '(x w32 mac))
27571
4a4f7f602836 (display-color-p): Use framep-on-display.
Eli Zaretskii <eliz@gnu.org>
parents: 27117
diff changeset
1582 (xw-display-color-p display)
4a4f7f602836 (display-color-p): Use framep-on-display.
Eli Zaretskii <eliz@gnu.org>
parents: 27117
diff changeset
1583 (tty-display-color-p display)))
26736
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1584 (defalias 'x-display-color-p 'display-color-p)
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1585
27571
4a4f7f602836 (display-color-p): Use framep-on-display.
Eli Zaretskii <eliz@gnu.org>
parents: 27117
diff changeset
1586 (defun display-grayscale-p (&optional display)
4a4f7f602836 (display-color-p): Use framep-on-display.
Eli Zaretskii <eliz@gnu.org>
parents: 27117
diff changeset
1587 "Return non-nil if frames on DISPLAY can display shades of gray."
4a4f7f602836 (display-color-p): Use framep-on-display.
Eli Zaretskii <eliz@gnu.org>
parents: 27117
diff changeset
1588 (let ((frame-type (framep-on-display display)))
4a4f7f602836 (display-color-p): Use framep-on-display.
Eli Zaretskii <eliz@gnu.org>
parents: 27117
diff changeset
1589 (cond
4a4f7f602836 (display-color-p): Use framep-on-display.
Eli Zaretskii <eliz@gnu.org>
parents: 27117
diff changeset
1590 ((memq frame-type '(x w32 mac))
4a4f7f602836 (display-color-p): Use framep-on-display.
Eli Zaretskii <eliz@gnu.org>
parents: 27117
diff changeset
1591 (x-display-grayscale-p display))
4a4f7f602836 (display-color-p): Use framep-on-display.
Eli Zaretskii <eliz@gnu.org>
parents: 27117
diff changeset
1592 (t
4a4f7f602836 (display-color-p): Use framep-on-display.
Eli Zaretskii <eliz@gnu.org>
parents: 27117
diff changeset
1593 (> (tty-color-gray-shades display) 2)))))
4a4f7f602836 (display-color-p): Use framep-on-display.
Eli Zaretskii <eliz@gnu.org>
parents: 27117
diff changeset
1594
26736
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1595
a0674327c167 Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26657
diff changeset
1596 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1597 ;;; Background mode.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1598 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1599
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1600 (defcustom frame-background-mode nil
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1601 "*The brightness of the background.
63637
de897c139738 (face-user-default-spec): Try getting `customized-face' prior to `saved-face'.
Juri Linkov <juri@jurta.org>
parents: 63594
diff changeset
1602 Set this to the symbol `dark' if your background color is dark,
67503
71e68cea180c (frame-background-mode): Replace `choice-item' keywords
Juri Linkov <juri@jurta.org>
parents: 67049
diff changeset
1603 `light' if your background is light, or nil (automatic by default)
71e68cea180c (frame-background-mode): Replace `choice-item' keywords
Juri Linkov <juri@jurta.org>
parents: 67049
diff changeset
1604 if you want Emacs to examine the brightness for you. Don't set this
71e68cea180c (frame-background-mode): Replace `choice-item' keywords
Juri Linkov <juri@jurta.org>
parents: 67049
diff changeset
1605 variable with `setq'; this won't have the expected effect."
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1606 :group 'faces
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1607 :set #'(lambda (var value)
29769
18a16ab69699 (frame-background-mode): Use set-default, not set, in setter.
Dave Love <fx@gnu.org>
parents: 29354
diff changeset
1608 (set-default var value)
31528
a461cad7a942 (face-x-resources): Make custom type more specific.
Dave Love <fx@gnu.org>
parents: 31500
diff changeset
1609 (mapc 'frame-set-background-mode (frame-list)))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1610 :initialize 'custom-initialize-changed
67503
71e68cea180c (frame-background-mode): Replace `choice-item' keywords
Juri Linkov <juri@jurta.org>
parents: 67049
diff changeset
1611 :type '(choice (const dark)
71e68cea180c (frame-background-mode): Replace `choice-item' keywords
Juri Linkov <juri@jurta.org>
parents: 67049
diff changeset
1612 (const light)
71e68cea180c (frame-background-mode): Replace `choice-item' keywords
Juri Linkov <juri@jurta.org>
parents: 67049
diff changeset
1613 (const :tag "automatic" nil)))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1614
63858
379e37eca752 (default-frame-background-mode): New internal variable.
Juri Linkov <juri@jurta.org>
parents: 63775
diff changeset
1615 (defvar default-frame-background-mode nil
379e37eca752 (default-frame-background-mode): New internal variable.
Juri Linkov <juri@jurta.org>
parents: 63775
diff changeset
1616 "Internal variable for the default brightness of the background.
379e37eca752 (default-frame-background-mode): New internal variable.
Juri Linkov <juri@jurta.org>
parents: 63775
diff changeset
1617 Emacs sets it automatically depending on the terminal type.
379e37eca752 (default-frame-background-mode): New internal variable.
Juri Linkov <juri@jurta.org>
parents: 63775
diff changeset
1618 The value `nil' means `dark'. If Emacs runs in non-windowed
379e37eca752 (default-frame-background-mode): New internal variable.
Juri Linkov <juri@jurta.org>
parents: 63775
diff changeset
1619 mode from `xterm' or a similar terminal emulator, the value is
379e37eca752 (default-frame-background-mode): New internal variable.
Juri Linkov <juri@jurta.org>
parents: 63775
diff changeset
1620 `light'. On rxvt terminals, the value depends on the environment
379e37eca752 (default-frame-background-mode): New internal variable.
Juri Linkov <juri@jurta.org>
parents: 63775
diff changeset
1621 variable COLORFGBG.")
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1622
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1623 (defun frame-set-background-mode (frame)
32649
47bf921bccd5 (frame-set-background-mode): `unspecified' &c are symbols, not strings.
Miles Bader <miles@gnu.org>
parents: 32641
diff changeset
1624 "Set up display-dependent faces on FRAME.
47bf921bccd5 (frame-set-background-mode): `unspecified' &c are symbols, not strings.
Miles Bader <miles@gnu.org>
parents: 32641
diff changeset
1625 Display-dependent faces are those which have different definitions
47bf921bccd5 (frame-set-background-mode): `unspecified' &c are symbols, not strings.
Miles Bader <miles@gnu.org>
parents: 32641
diff changeset
1626 according to the `background-mode' and `display-type' frame parameters."
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1627 (let* ((bg-resource
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1628 (and window-system
50025
ffbc79f0f914 (frame-set-background-mode): Fix reference to attribute "backgroundMode".
Juanma Barranquero <lekktu@gmail.com>
parents: 48914
diff changeset
1629 (x-get-resource "backgroundMode" "BackgroundMode")))
32641
48709f040160 (frame-set-background-mode): If a tty frame defines a
Eli Zaretskii <eliz@gnu.org>
parents: 32404
diff changeset
1630 (bg-color (frame-parameter frame 'background-color))
32376
267a06bd1387 (frame-set-background-mode):
Miles Bader <miles@gnu.org>
parents: 32373
diff changeset
1631 (bg-mode
267a06bd1387 (frame-set-background-mode):
Miles Bader <miles@gnu.org>
parents: 32373
diff changeset
1632 (cond (frame-background-mode)
32641
48709f040160 (frame-set-background-mode): If a tty frame defines a
Eli Zaretskii <eliz@gnu.org>
parents: 32404
diff changeset
1633 (bg-resource
48709f040160 (frame-set-background-mode): If a tty frame defines a
Eli Zaretskii <eliz@gnu.org>
parents: 32404
diff changeset
1634 (intern (downcase bg-resource)))
48709f040160 (frame-set-background-mode): If a tty frame defines a
Eli Zaretskii <eliz@gnu.org>
parents: 32404
diff changeset
1635 ((and (null window-system) (null bg-color))
32376
267a06bd1387 (frame-set-background-mode):
Miles Bader <miles@gnu.org>
parents: 32373
diff changeset
1636 ;; No way to determine this automatically (?).
63858
379e37eca752 (default-frame-background-mode): New internal variable.
Juri Linkov <juri@jurta.org>
parents: 63775
diff changeset
1637 (or default-frame-background-mode 'dark))
32641
48709f040160 (frame-set-background-mode): If a tty frame defines a
Eli Zaretskii <eliz@gnu.org>
parents: 32404
diff changeset
1638 ;; Unspecified frame background color can only happen
48709f040160 (frame-set-background-mode): If a tty frame defines a
Eli Zaretskii <eliz@gnu.org>
parents: 32404
diff changeset
1639 ;; on tty's.
32734
92b46ad86f6a (color-values, color-defined-p): Use `member', not
Miles Bader <miles@gnu.org>
parents: 32649
diff changeset
1640 ((member bg-color '(unspecified "unspecified-bg"))
63858
379e37eca752 (default-frame-background-mode): New internal variable.
Juri Linkov <juri@jurta.org>
parents: 63775
diff changeset
1641 (or default-frame-background-mode 'dark))
32734
92b46ad86f6a (color-values, color-defined-p): Use `member', not
Miles Bader <miles@gnu.org>
parents: 32649
diff changeset
1642 ((equal bg-color "unspecified-fg") ; inverted colors
63858
379e37eca752 (default-frame-background-mode): New internal variable.
Juri Linkov <juri@jurta.org>
parents: 63775
diff changeset
1643 (if (eq default-frame-background-mode 'light) 'dark 'light))
75705
6c6d674034cd (frame-set-background-mode): Use `color-values' and `display-color-p',
Juanma Barranquero <lekktu@gmail.com>
parents: 75703
diff changeset
1644 ((>= (apply '+ (color-values bg-color frame))
32376
267a06bd1387 (frame-set-background-mode):
Miles Bader <miles@gnu.org>
parents: 32373
diff changeset
1645 ;; Just looking at the screen, colors whose
267a06bd1387 (frame-set-background-mode):
Miles Bader <miles@gnu.org>
parents: 32373
diff changeset
1646 ;; values add up to .6 of the white total
267a06bd1387 (frame-set-background-mode):
Miles Bader <miles@gnu.org>
parents: 32373
diff changeset
1647 ;; still look dark to me.
75705
6c6d674034cd (frame-set-background-mode): Use `color-values' and `display-color-p',
Juanma Barranquero <lekktu@gmail.com>
parents: 75703
diff changeset
1648 (* (apply '+ (color-values "white" frame)) .6))
32641
48709f040160 (frame-set-background-mode): If a tty frame defines a
Eli Zaretskii <eliz@gnu.org>
parents: 32404
diff changeset
1649 'light)
48709f040160 (frame-set-background-mode): If a tty frame defines a
Eli Zaretskii <eliz@gnu.org>
parents: 32404
diff changeset
1650 (t 'dark)))
32376
267a06bd1387 (frame-set-background-mode):
Miles Bader <miles@gnu.org>
parents: 32373
diff changeset
1651 (display-type
267a06bd1387 (frame-set-background-mode):
Miles Bader <miles@gnu.org>
parents: 32373
diff changeset
1652 (cond ((null window-system)
267a06bd1387 (frame-set-background-mode):
Miles Bader <miles@gnu.org>
parents: 32373
diff changeset
1653 (if (tty-display-color-p frame) 'color 'mono))
75705
6c6d674034cd (frame-set-background-mode): Use `color-values' and `display-color-p',
Juanma Barranquero <lekktu@gmail.com>
parents: 75703
diff changeset
1654 ((display-color-p frame)
32376
267a06bd1387 (frame-set-background-mode):
Miles Bader <miles@gnu.org>
parents: 32373
diff changeset
1655 'color)
267a06bd1387 (frame-set-background-mode):
Miles Bader <miles@gnu.org>
parents: 32373
diff changeset
1656 ((x-display-grayscale-p frame)
267a06bd1387 (frame-set-background-mode):
Miles Bader <miles@gnu.org>
parents: 32373
diff changeset
1657 'grayscale)
267a06bd1387 (frame-set-background-mode):
Miles Bader <miles@gnu.org>
parents: 32373
diff changeset
1658 (t 'mono)))
267a06bd1387 (frame-set-background-mode):
Miles Bader <miles@gnu.org>
parents: 32373
diff changeset
1659 (old-bg-mode
267a06bd1387 (frame-set-background-mode):
Miles Bader <miles@gnu.org>
parents: 32373
diff changeset
1660 (frame-parameter frame 'background-mode))
267a06bd1387 (frame-set-background-mode):
Miles Bader <miles@gnu.org>
parents: 32373
diff changeset
1661 (old-display-type
267a06bd1387 (frame-set-background-mode):
Miles Bader <miles@gnu.org>
parents: 32373
diff changeset
1662 (frame-parameter frame 'display-type)))
267a06bd1387 (frame-set-background-mode):
Miles Bader <miles@gnu.org>
parents: 32373
diff changeset
1663
267a06bd1387 (frame-set-background-mode):
Miles Bader <miles@gnu.org>
parents: 32373
diff changeset
1664 (unless (and (eq bg-mode old-bg-mode) (eq display-type old-display-type))
34246
e7acfcef56ae (frame-set-background-mode): Avoid stomping on locally modified faces.
Miles Bader <miles@gnu.org>
parents: 34162
diff changeset
1665 (let ((locally-modified-faces nil))
e7acfcef56ae (frame-set-background-mode): Avoid stomping on locally modified faces.
Miles Bader <miles@gnu.org>
parents: 34162
diff changeset
1666 ;; Before modifying the frame parameters, we collect a list of
e7acfcef56ae (frame-set-background-mode): Avoid stomping on locally modified faces.
Miles Bader <miles@gnu.org>
parents: 34162
diff changeset
1667 ;; faces that don't match what their face-spec says they should
e7acfcef56ae (frame-set-background-mode): Avoid stomping on locally modified faces.
Miles Bader <miles@gnu.org>
parents: 34162
diff changeset
1668 ;; look like; we then avoid changing these faces below. A
e7acfcef56ae (frame-set-background-mode): Avoid stomping on locally modified faces.
Miles Bader <miles@gnu.org>
parents: 34162
diff changeset
1669 ;; negative list is used on the assumption that most faces will
e7acfcef56ae (frame-set-background-mode): Avoid stomping on locally modified faces.
Miles Bader <miles@gnu.org>
parents: 34162
diff changeset
1670 ;; be unmodified, so we can avoid consing in the common case.
e7acfcef56ae (frame-set-background-mode): Avoid stomping on locally modified faces.
Miles Bader <miles@gnu.org>
parents: 34162
diff changeset
1671 (dolist (face (face-list))
e7acfcef56ae (frame-set-background-mode): Avoid stomping on locally modified faces.
Miles Bader <miles@gnu.org>
parents: 34162
diff changeset
1672 (when (not (face-spec-match-p face
78374
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1673 (face-normalize-spec
18f6eb588c67 (face-normalize-spec): New function.
Richard M. Stallman <rms@gnu.org>
parents: 78236
diff changeset
1674 (face-user-default-spec face))
34246
e7acfcef56ae (frame-set-background-mode): Avoid stomping on locally modified faces.
Miles Bader <miles@gnu.org>
parents: 34162
diff changeset
1675 (selected-frame)))
e7acfcef56ae (frame-set-background-mode): Avoid stomping on locally modified faces.
Miles Bader <miles@gnu.org>
parents: 34162
diff changeset
1676 (push face locally-modified-faces)))
e7acfcef56ae (frame-set-background-mode): Avoid stomping on locally modified faces.
Miles Bader <miles@gnu.org>
parents: 34162
diff changeset
1677 ;; Now change to the new frame parameters
e7acfcef56ae (frame-set-background-mode): Avoid stomping on locally modified faces.
Miles Bader <miles@gnu.org>
parents: 34162
diff changeset
1678 (modify-frame-parameters frame
e7acfcef56ae (frame-set-background-mode): Avoid stomping on locally modified faces.
Miles Bader <miles@gnu.org>
parents: 34162
diff changeset
1679 (list (cons 'background-mode bg-mode)
e7acfcef56ae (frame-set-background-mode): Avoid stomping on locally modified faces.
Miles Bader <miles@gnu.org>
parents: 34162
diff changeset
1680 (cons 'display-type display-type)))
e7acfcef56ae (frame-set-background-mode): Avoid stomping on locally modified faces.
Miles Bader <miles@gnu.org>
parents: 34162
diff changeset
1681 ;; For all named faces, choose face specs matching the new frame
e7acfcef56ae (frame-set-background-mode): Avoid stomping on locally modified faces.
Miles Bader <miles@gnu.org>
parents: 34162
diff changeset
1682 ;; parameters, unless they have been locally modified.
e7acfcef56ae (frame-set-background-mode): Avoid stomping on locally modified faces.
Miles Bader <miles@gnu.org>
parents: 34162
diff changeset
1683 (dolist (face (face-list))
e7acfcef56ae (frame-set-background-mode): Avoid stomping on locally modified faces.
Miles Bader <miles@gnu.org>
parents: 34162
diff changeset
1684 (unless (memq face locally-modified-faces)
e7acfcef56ae (frame-set-background-mode): Avoid stomping on locally modified faces.
Miles Bader <miles@gnu.org>
parents: 34162
diff changeset
1685 (face-spec-set face (face-user-default-spec face) frame)))))))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1686
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1687
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1688 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1689 ;;; Frame creation.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1690 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1691
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1692 (defun x-handle-named-frame-geometry (parameters)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1693 "Add geometry parameters for a named frame to parameter list PARAMETERS.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1694 Value is the new parameter list."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1695 (let* ((name (or (cdr (assq 'name parameters))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1696 (cdr (assq 'name default-frame-alist))))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1697 (x-resource-name name)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1698 (res-geometry (if name (x-get-resource "geometry" "Geometry"))))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1699 (when res-geometry
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1700 (let ((parsed (x-parse-geometry res-geometry)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1701 ;; If the resource specifies a position, call the position
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1702 ;; and size "user-specified".
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1703 (when (or (assq 'top parsed)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1704 (assq 'left parsed))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1705 (setq parsed (append '((user-position . t) (user-size . t)) parsed)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1706 ;; Put the geometry parameters at the end. Copy
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1707 ;; default-frame-alist so that they go after it.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1708 (setq parameters (append parameters default-frame-alist parsed))))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1709 parameters))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1710
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1711
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1712 (defun x-handle-reverse-video (frame parameters)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1713 "Handle the reverse-video frame parameter and X resource.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1714 `x-create-frame' does not handle this one."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1715 (when (cdr (or (assq 'reverse parameters)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1716 (assq 'reverse default-frame-alist)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1717 (let ((resource (x-get-resource "reverseVideo"
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1718 "ReverseVideo")))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1719 (if resource
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1720 (cons nil (member (downcase resource)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1721 '("on" "true")))))))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1722 (let* ((params (frame-parameters frame))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1723 (bg (cdr (assq 'foreground-color params)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1724 (fg (cdr (assq 'background-color params))))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1725 (modify-frame-parameters frame
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1726 (list (cons 'foreground-color fg)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1727 (cons 'background-color bg)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1728 (if (equal bg (cdr (assq 'border-color params)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1729 (modify-frame-parameters frame
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1730 (list (cons 'border-color fg))))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1731 (if (equal bg (cdr (assq 'mouse-color params)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1732 (modify-frame-parameters frame
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1733 (list (cons 'mouse-color fg))))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1734 (if (equal bg (cdr (assq 'cursor-color params)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1735 (modify-frame-parameters frame
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1736 (list (cons 'cursor-color fg)))))))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1737
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1738
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1739 (defun x-create-frame-with-faces (&optional parameters)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1740 "Create a frame from optional frame parameters PARAMETERS.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1741 Parameters not specified by PARAMETERS are taken from
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1742 `default-frame-alist'. If PARAMETERS specify a frame name,
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1743 handle X geometry resources for that name. If either PARAMETERS
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1744 or `default-frame-alist' contains a `reverse' parameter, or
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1745 the X resource ``reverseVideo'' is present, handle that.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1746 Value is the new frame created."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1747 (setq parameters (x-handle-named-frame-geometry parameters))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1748 (let ((visibility-spec (assq 'visibility parameters))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1749 (frame-list (frame-list))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1750 (frame (x-create-frame (cons '(visibility . nil) parameters)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1751 success)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1752 (unwind-protect
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1753 (progn
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1754 (x-handle-reverse-video frame parameters)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1755 (frame-set-background-mode frame)
51248
e21b4eb91135 (x-create-frame-with-faces): Call `face-set-after-frame-default'.
John Paul Wallington <jpw@pobox.com>
parents: 51095
diff changeset
1756 (face-set-after-frame-default frame)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1757 (if (or (null frame-list) (null visibility-spec))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1758 (make-frame-visible frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1759 (modify-frame-parameters frame (list visibility-spec)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1760 (setq success t))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1761 (unless success
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1762 (delete-frame frame)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1763 frame))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1764
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1765 (defun face-set-after-frame-default (frame)
25588
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
1766 "Set frame-local faces of FRAME from face specs and resources.
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
1767 Initialize colors of certain faces from frame parameters."
66360
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
1768 (unless inhibit-face-set-after-frame-default
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
1769 (if (face-attribute 'default :font t)
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
1770 (set-face-attribute 'default frame :font
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
1771 (face-attribute 'default :font t))
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
1772 (set-face-attribute 'default frame :family
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
1773 (face-attribute 'default :family t))
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
1774 (set-face-attribute 'default frame :height
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
1775 (face-attribute 'default :height t))
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
1776 (set-face-attribute 'default frame :slant
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
1777 (face-attribute 'default :slant t))
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
1778 (set-face-attribute 'default frame :weight
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
1779 (face-attribute 'default :weight t))
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
1780 (set-face-attribute 'default frame :width
fcb2ec449238 (inhibit-face-set-after-frame-default): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 66351
diff changeset
1781 (face-attribute 'default :width t))))
75696
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1782 ;; Find attributes that should be initialized from frame parameters.
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1783 (let ((face-params '((foreground-color default :foreground)
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1784 (background-color default :background)
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1785 (border-color border :background)
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1786 (cursor-color cursor :background)
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1787 (scroll-bar-foreground scroll-bar :foreground)
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1788 (scroll-bar-background scroll-bar :background)
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1789 (mouse-color mouse :background)))
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1790 apply-params)
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1791 (dolist (param face-params)
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1792 (let* ((value (frame-parameter frame (nth 0 param)))
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1793 (face (nth 1 param))
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1794 (attr (nth 2 param))
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1795 (default-value (face-attribute face attr t)))
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1796 ;; Compile a list of face attributes to set, but don't set
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1797 ;; them yet. The call to make-face-x-resource-internal,
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1798 ;; below, can change frame parameters, and the final set of
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1799 ;; frame parameters should be the ones acquired at this step.
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1800 (if (eq default-value 'unspecified)
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1801 ;; The face spec does not specify a new-frame value for
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1802 ;; this attribute. Check if the existing frame parameter
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1803 ;; specifies it.
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1804 (if value
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1805 (push (list face frame attr value) apply-params))
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1806 ;; The face spec specifies a value for this attribute, to be
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1807 ;; applied to the face on all new frames.
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1808 (push (list face frame attr default-value) apply-params))))
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1809 ;; Initialize faces from face specs and X resources. The
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1810 ;; condition-case prevents invalid specs from causing frame
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1811 ;; creation to fail.
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1812 (dolist (face (delq 'default (face-list)))
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1813 (condition-case ()
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1814 (progn
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1815 (face-spec-set face (face-user-default-spec face) frame)
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1816 (if (memq window-system '(x w32 mac))
76447
6da62180836c (face-set-after-frame-default): Recalculate face customizations after
Chong Yidong <cyd@stupidchicken.com>
parents: 76292
diff changeset
1817 (make-face-x-resource-internal face frame))
76731
e3710dba6329 (face-set-after-frame-default): Revert 2007-03-10 change. Merge in X
Chong Yidong <cyd@stupidchicken.com>
parents: 76585
diff changeset
1818 (internal-merge-in-global-face face frame))
75696
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1819 (error nil)))
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1820 ;; Apply the attributes specified by frame parameters. This
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1821 ;; rewrites parameters changed by make-face-x-resource-internal
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1822 (dolist (param apply-params)
97897143b20e (face-set-after-frame-default): Compile attributes to be set by frame
Chong Yidong <cyd@stupidchicken.com>
parents: 75591
diff changeset
1823 (apply 'set-face-attribute param))))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1824
33008
c30c394884b8 (tty-handle-reverse-video): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 32940
diff changeset
1825 (defun tty-handle-reverse-video (frame parameters)
c30c394884b8 (tty-handle-reverse-video): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 32940
diff changeset
1826 "Handle the reverse-video frame parameter for terminal frames."
c30c394884b8 (tty-handle-reverse-video): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 32940
diff changeset
1827 (when (cdr (or (assq 'reverse parameters)
c30c394884b8 (tty-handle-reverse-video): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 32940
diff changeset
1828 (assq 'reverse default-frame-alist)))
c30c394884b8 (tty-handle-reverse-video): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 32940
diff changeset
1829 (let* ((params (frame-parameters frame))
c30c394884b8 (tty-handle-reverse-video): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 32940
diff changeset
1830 (bg (cdr (assq 'foreground-color params)))
c30c394884b8 (tty-handle-reverse-video): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 32940
diff changeset
1831 (fg (cdr (assq 'background-color params))))
c30c394884b8 (tty-handle-reverse-video): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 32940
diff changeset
1832 (modify-frame-parameters frame
c30c394884b8 (tty-handle-reverse-video): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 32940
diff changeset
1833 (list (cons 'foreground-color fg)
c30c394884b8 (tty-handle-reverse-video): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 32940
diff changeset
1834 (cons 'background-color bg)))
c30c394884b8 (tty-handle-reverse-video): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 32940
diff changeset
1835 (if (equal bg (cdr (assq 'mouse-color params)))
c30c394884b8 (tty-handle-reverse-video): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 32940
diff changeset
1836 (modify-frame-parameters frame
c30c394884b8 (tty-handle-reverse-video): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 32940
diff changeset
1837 (list (cons 'mouse-color fg))))
c30c394884b8 (tty-handle-reverse-video): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 32940
diff changeset
1838 (if (equal bg (cdr (assq 'cursor-color params)))
c30c394884b8 (tty-handle-reverse-video): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 32940
diff changeset
1839 (modify-frame-parameters frame
c30c394884b8 (tty-handle-reverse-video): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 32940
diff changeset
1840 (list (cons 'cursor-color fg)))))))
c30c394884b8 (tty-handle-reverse-video): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 32940
diff changeset
1841
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1842
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1843 (defun tty-create-frame-with-faces (&optional parameters)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1844 "Create a frame from optional frame parameters PARAMETERS.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1845 Parameters not specified by PARAMETERS are taken from
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1846 `default-frame-alist'. If either PARAMETERS or `default-frame-alist'
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1847 contains a `reverse' parameter, handle that. Value is the new frame
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1848 created."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1849 (let ((frame (make-terminal-frame parameters))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1850 success)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1851 (unwind-protect
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1852 (progn
33008
c30c394884b8 (tty-handle-reverse-video): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 32940
diff changeset
1853 (tty-handle-reverse-video frame (frame-parameters frame))
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1854 (frame-set-background-mode frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1855 (face-set-after-frame-default frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1856 (setq success t))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1857 (unless success
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1858 (delete-frame frame)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1859 frame))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1860
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1861
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1862 ;; Called from C function init_display to initialize faces of the
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1863 ;; dumped terminal frame on startup.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1864
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1865 (defun tty-set-up-initial-frame-faces ()
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1866 (let ((frame (selected-frame)))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1867 (frame-set-background-mode frame)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1868 (face-set-after-frame-default frame)))
37943
e4f0e3e1c22e minor optimization
Sam Steingold <sds@gnu.org>
parents: 37476
diff changeset
1869
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1870
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1871
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1872
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1873 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1874 ;;; Compatiblity with 20.2
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1875 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1876
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1877 ;; Update a frame's faces when we change its default font.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1878
55883
cde9d1fff89c (frame-update-faces): Add empty docstring so the one for `ignore' doesn't
Juanma Barranquero <lekktu@gmail.com>
parents: 55545
diff changeset
1879 (defalias 'frame-update-faces 'ignore "")
46053
ef0684c3e07b (frame-update-faces): Fix obsolescence declaration.
Juanma Barranquero <lekktu@gmail.com>
parents: 46041
diff changeset
1880 (make-obsolete 'frame-update-faces "no longer necessary." "21.1")
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1881
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1882 ;; Update the colors of FACE, after FRAME's own colors have been
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1883 ;; changed.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1884
64539
c94d5f576885 (describe-face): "?\ " -> "?\s".
Juanma Barranquero <lekktu@gmail.com>
parents: 64497
diff changeset
1885 (define-obsolete-function-alias 'frame-update-face-colors
c94d5f576885 (describe-face): "?\ " -> "?\s".
Juanma Barranquero <lekktu@gmail.com>
parents: 64497
diff changeset
1886 'frame-set-background-mode "21.1")
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1887
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1888
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1889 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1890 ;;; Standard faces.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1891 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1892
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1893 (defgroup basic-faces nil
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1894 "The standard faces of Emacs."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1895 :group 'faces)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1896
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1897 (defface default
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1898 '((t nil))
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1899 "Basic default face."
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1900 :group 'basic-faces)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
1901
65730
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1902 (defface bold
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1903 '((t :weight bold))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1904 "Basic bold face."
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1905 :group 'basic-faces)
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1906
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1907 (defface italic
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1908 '((((supports :slant italic))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1909 :slant italic)
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1910 (((supports :underline t))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1911 :underline t)
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1912 (t
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1913 ;; default to italic, even it doesn't appear to be supported,
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1914 ;; because in some cases the display engine will do it's own
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1915 ;; workaround (to `dim' on ttys)
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1916 :slant italic))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1917 "Basic italic face."
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1918 :group 'basic-faces)
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1919
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1920 (defface bold-italic
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1921 '((t :weight bold :slant italic))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1922 "Basic bold-italic face."
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1923 :group 'basic-faces)
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1924
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1925 (defface underline
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1926 '((((supports :underline t))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1927 :underline t)
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1928 (((supports :weight bold))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1929 :weight bold)
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1930 (t :underline t))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1931 "Basic underlined face."
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1932 :group 'basic-faces)
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1933
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1934 (defface fixed-pitch
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1935 '((t :family "courier"))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1936 "The basic fixed-pitch face."
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1937 :group 'basic-faces)
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1938
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1939 (defface variable-pitch
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1940 '((t :family "helv"))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1941 "The basic variable-pitch face."
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1942 :group 'basic-faces)
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1943
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1944 (defface shadow
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1945 '((((class color grayscale) (min-colors 88) (background light))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1946 :foreground "grey50")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1947 (((class color grayscale) (min-colors 88) (background dark))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1948 :foreground "grey70")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1949 (((class color) (min-colors 8) (background light))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1950 :foreground "green")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1951 (((class color) (min-colors 8) (background dark))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1952 :foreground "yellow"))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1953 "Basic face for shadowed text."
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1954 :group 'basic-faces
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1955 :version "22.1")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1956
68341
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1957 (defface link
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1958 '((((class color) (min-colors 88) (background light))
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1959 :foreground "blue1" :underline t)
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1960 (((class color) (background light))
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1961 :foreground "blue" :underline t)
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1962 (((class color) (min-colors 88) (background dark))
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1963 :foreground "cyan1" :underline t)
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1964 (((class color) (background dark))
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1965 :foreground "cyan" :underline t)
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1966 (t :inherit underline))
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1967 "Basic face for unvisited links."
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1968 :group 'basic-faces
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1969 :version "22.1")
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1970
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1971 (defface link-visited
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1972 '((default :inherit link)
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1973 (((class color) (background light)) :foreground "magenta4")
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1974 (((class color) (background dark)) :foreground "violet"))
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1975 "Basic face for visited links."
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1976 :group 'basic-faces
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1977 :version "22.1")
acccd9689759 (link, link-visited): New faces based on default values
Juri Linkov <juri@jurta.org>
parents: 68214
diff changeset
1978
65730
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1979 (defface highlight
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1980 '((((class color) (min-colors 88) (background light))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1981 :background "darkseagreen2")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1982 (((class color) (min-colors 88) (background dark))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1983 :background "darkolivegreen")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1984 (((class color) (min-colors 16) (background light))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1985 :background "darkseagreen2")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1986 (((class color) (min-colors 16) (background dark))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1987 :background "darkolivegreen")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1988 (((class color) (min-colors 8))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1989 :background "green" :foreground "black")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1990 (t :inverse-video t))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1991 "Basic face for highlighting."
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1992 :group 'basic-faces)
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1993
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1994 (defface region
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1995 '((((class color) (min-colors 88) (background dark))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1996 :background "blue3")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1997 (((class color) (min-colors 88) (background light))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1998 :background "lightgoldenrod2")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
1999 (((class color) (min-colors 16) (background dark))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2000 :background "blue3")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2001 (((class color) (min-colors 16) (background light))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2002 :background "lightgoldenrod2")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2003 (((class color) (min-colors 8))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2004 :background "blue" :foreground "white")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2005 (((type tty) (class mono))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2006 :inverse-video t)
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2007 (t :background "gray"))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2008 "Basic face for highlighting the region."
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2009 :version "21.1"
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2010 :group 'basic-faces)
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2011
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2012 (defface secondary-selection
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2013 '((((class color) (min-colors 88) (background light))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2014 :background "yellow1")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2015 (((class color) (min-colors 88) (background dark))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2016 :background "SkyBlue4")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2017 (((class color) (min-colors 16) (background light))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2018 :background "yellow")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2019 (((class color) (min-colors 16) (background dark))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2020 :background "SkyBlue4")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2021 (((class color) (min-colors 8))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2022 :background "cyan" :foreground "black")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2023 (t :inverse-video t))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2024 "Basic face for displaying the secondary selection."
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2025 :group 'basic-faces)
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2026
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2027 (defface trailing-whitespace
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2028 '((((class color) (background light))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2029 :background "red1")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2030 (((class color) (background dark))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2031 :background "red1")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2032 (t :inverse-video t))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2033 "Basic face for highlighting trailing whitespace."
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2034 :version "21.1"
67503
71e68cea180c (frame-background-mode): Replace `choice-item' keywords
Juri Linkov <juri@jurta.org>
parents: 67049
diff changeset
2035 :group 'whitespace-faces ; like `show-trailing-whitespace'
65730
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2036 :group 'basic-faces)
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2037
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2038 (defface escape-glyph
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2039 '((((background dark)) :foreground "cyan")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2040 ;; See the comment in minibuffer-prompt for
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2041 ;; the reason not to use blue on MS-DOS.
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2042 (((type pc)) :foreground "magenta")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2043 ;; red4 is too dark, but some say blue is too loud.
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2044 ;; brown seems to work ok. -- rms.
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2045 (t :foreground "brown"))
72280
67323a6ea60e (escape-glyph): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 71591
diff changeset
2046 "Face for characters displayed as sequences using `^' or `\\'."
65730
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2047 :group 'basic-faces
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2048 :version "22.1")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2049
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2050 (defface nobreak-space
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2051 '((((class color) (min-colors 88)) :inherit escape-glyph :underline t)
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2052 (((class color) (min-colors 8)) :background "magenta")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2053 (t :inverse-video t))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2054 "Face for displaying nobreak space."
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2055 :group 'basic-faces
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2056 :version "22.1")
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2057
68214
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2058 (defgroup mode-line-faces nil
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2059 "Faces used in the mode line."
72879
3931d05c811a (mode-line-faces): Group mode-line instead of modeline.
Richard M. Stallman <rms@gnu.org>
parents: 72280
diff changeset
2060 :group 'mode-line
68214
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2061 :group 'faces
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2062 :version "22.1")
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2063
25650
8b06b47a1fea (mode-line): Replaces `modeline'.
Gerd Moellmann <gerd@gnu.org>
parents: 25616
diff changeset
2064 (defface mode-line
59077
294a7f7e3daf (mode-line, mode-line-inactive): Use min-colors.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59054
diff changeset
2065 '((((class color) (min-colors 88))
43711
d15360503e4e (face-spec-choose): Allow `t' to appear before the end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43550
diff changeset
2066 :box (:line-width -1 :style released-button)
d15360503e4e (face-spec-choose): Allow `t' to appear before the end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43550
diff changeset
2067 :background "grey75" :foreground "black")
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2068 (t
43711
d15360503e4e (face-spec-choose): Allow `t' to appear before the end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43550
diff changeset
2069 :inverse-video t))
43204
1b0f33edf842 (mode-line-inactive): New face for mode-line for
Kim F. Storm <storm@cua.dk>
parents: 42969
diff changeset
2070 "Basic mode line face for selected window."
25687
afad62240679 (mode-line, header-line, tool-bar, ): Add :version.
Dave Love <fx@gnu.org>
parents: 25650
diff changeset
2071 :version "21.1"
68214
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2072 :group 'mode-line-faces
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2073 :group 'basic-faces)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2074
43204
1b0f33edf842 (mode-line-inactive): New face for mode-line for
Kim F. Storm <storm@cua.dk>
parents: 42969
diff changeset
2075 (defface mode-line-inactive
58935
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
2076 '((default
43711
d15360503e4e (face-spec-choose): Allow `t' to appear before the end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43550
diff changeset
2077 :inherit mode-line)
59077
294a7f7e3daf (mode-line, mode-line-inactive): Use min-colors.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59054
diff changeset
2078 (((class color) (min-colors 88) (background light))
43204
1b0f33edf842 (mode-line-inactive): New face for mode-line for
Kim F. Storm <storm@cua.dk>
parents: 42969
diff changeset
2079 :weight light
1b0f33edf842 (mode-line-inactive): New face for mode-line for
Kim F. Storm <storm@cua.dk>
parents: 42969
diff changeset
2080 :box (:line-width -1 :color "grey75" :style nil)
1b0f33edf842 (mode-line-inactive): New face for mode-line for
Kim F. Storm <storm@cua.dk>
parents: 42969
diff changeset
2081 :foreground "grey20" :background "grey90")
59077
294a7f7e3daf (mode-line, mode-line-inactive): Use min-colors.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59054
diff changeset
2082 (((class color) (min-colors 88) (background dark) )
43247
4c5a2e2ddf43 (mode-line-inactive): Add dark-background variant.
Miles Bader <miles@gnu.org>
parents: 43204
diff changeset
2083 :weight light
4c5a2e2ddf43 (mode-line-inactive): Add dark-background variant.
Miles Bader <miles@gnu.org>
parents: 43204
diff changeset
2084 :box (:line-width -1 :color "grey40" :style nil)
43711
d15360503e4e (face-spec-choose): Allow `t' to appear before the end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43550
diff changeset
2085 :foreground "grey80" :background "grey30"))
43204
1b0f33edf842 (mode-line-inactive): New face for mode-line for
Kim F. Storm <storm@cua.dk>
parents: 42969
diff changeset
2086 "Basic mode line face for non-selected windows."
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59872
diff changeset
2087 :version "22.1"
68214
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2088 :group 'mode-line-faces
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2089 :group 'basic-faces)
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2090
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2091 (defface mode-line-highlight
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2092 '((((class color) (min-colors 88))
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2093 :box (:line-width 2 :color "grey40" :style released-button))
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2094 (t
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2095 :inherit highlight))
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2096 "Basic mode line face for highlighting."
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2097 :version "22.1"
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2098 :group 'mode-line-faces
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2099 :group 'basic-faces)
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2100
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2101 (defface mode-line-buffer-id
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2102 '((t (:weight bold)))
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2103 "Face used for buffer identification parts of the mode line."
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2104 :version "22.1"
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2105 :group 'mode-line-faces
43204
1b0f33edf842 (mode-line-inactive): New face for mode-line for
Kim F. Storm <storm@cua.dk>
parents: 42969
diff changeset
2106 :group 'basic-faces)
1b0f33edf842 (mode-line-inactive): New face for mode-line for
Kim F. Storm <storm@cua.dk>
parents: 42969
diff changeset
2107
25650
8b06b47a1fea (mode-line): Replaces `modeline'.
Gerd Moellmann <gerd@gnu.org>
parents: 25616
diff changeset
2108 ;; Make `modeline' an alias for `mode-line', for compatibility.
8b06b47a1fea (mode-line): Replaces `modeline'.
Gerd Moellmann <gerd@gnu.org>
parents: 25616
diff changeset
2109 (put 'modeline 'face-alias 'mode-line)
43204
1b0f33edf842 (mode-line-inactive): New face for mode-line for
Kim F. Storm <storm@cua.dk>
parents: 42969
diff changeset
2110 (put 'modeline-inactive 'face-alias 'mode-line-inactive)
63311
212616057d0b (modeline-highlight): Rename from (the erroneous) `modeline-higilight'.
Eli Zaretskii <eliz@gnu.org>
parents: 63140
diff changeset
2111 (put 'modeline-highlight 'face-alias 'mode-line-highlight)
68214
7943b5aaa49d (mode-line-faces): New defgroup.
Juri Linkov <juri@jurta.org>
parents: 67503
diff changeset
2112 (put 'modeline-buffer-id 'face-alias 'mode-line-buffer-id)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2113
25545
b0a117037bde (header-line): Renamed from `top-line'.
Gerd Moellmann <gerd@gnu.org>
parents: 25542
diff changeset
2114 (defface header-line
58935
95bb6b9a27a3 (header-line, mode-line-inactive, tool-bar):
Richard M. Stallman <rms@gnu.org>
parents: 58851
diff changeset
2115 '((default
54574
76b831799f4d (read-face-font): Don't cons up unnecessarily.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54161
diff changeset
2116 :inherit mode-line)
76b831799f4d (read-face-font): Don't cons up unnecessarily.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54161
diff changeset
2117 (((type tty))
32404
d355f52b4497 (header-line): Change tty-variant to use underlining.
Miles Bader <miles@gnu.org>
parents: 32378
diff changeset
2118 ;; This used to be `:inverse-video t', but that doesn't look very
d355f52b4497 (header-line): Change tty-variant to use underlining.
Miles Bader <miles@gnu.org>
parents: 32378
diff changeset
2119 ;; good when combined with inverse-video mode-lines and multiple
d355f52b4497 (header-line): Change tty-variant to use underlining.
Miles Bader <miles@gnu.org>
parents: 32378
diff changeset
2120 ;; windows. Underlining looks better, and is more consistent with
d355f52b4497 (header-line): Change tty-variant to use underlining.
Miles Bader <miles@gnu.org>
parents: 32378
diff changeset
2121 ;; the window-system face variants, which deemphasize the
d355f52b4497 (header-line): Change tty-variant to use underlining.
Miles Bader <miles@gnu.org>
parents: 32378
diff changeset
2122 ;; header-line in relation to the mode-line face. If a terminal
d355f52b4497 (header-line): Change tty-variant to use underlining.
Miles Bader <miles@gnu.org>
parents: 32378
diff changeset
2123 ;; can't underline, then the header-line will end up without any
d355f52b4497 (header-line): Change tty-variant to use underlining.
Miles Bader <miles@gnu.org>
parents: 32378
diff changeset
2124 ;; highlighting; this may be too confusing in general, although it
d355f52b4497 (header-line): Change tty-variant to use underlining.
Miles Bader <miles@gnu.org>
parents: 32378
diff changeset
2125 ;; happens to look good with the only current use of header-lines,
d355f52b4497 (header-line): Change tty-variant to use underlining.
Miles Bader <miles@gnu.org>
parents: 32378
diff changeset
2126 ;; the info browser. XXX
54574
76b831799f4d (read-face-font): Don't cons up unnecessarily.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54161
diff changeset
2127 :inverse-video nil ;Override the value inherited from mode-line.
46146
f883ac732e39 (header-line): Don't use a `common' clause for inheriting from the mode-line
Miles Bader <miles@gnu.org>
parents: 46145
diff changeset
2128 :underline t)
32756
ccfb1ed059ca (header-line): Make more reasonable on mono/grayscale displays.
Miles Bader <miles@gnu.org>
parents: 32752
diff changeset
2129 (((class color grayscale) (background light))
33465
900ca3da6e01 (header-line): Use `:box nil' for color/gs displays too.
Miles Bader <miles@gnu.org>
parents: 33447
diff changeset
2130 :background "grey90" :foreground "grey20"
54574
76b831799f4d (read-face-font): Don't cons up unnecessarily.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54161
diff changeset
2131 :box nil)
32756
ccfb1ed059ca (header-line): Make more reasonable on mono/grayscale displays.
Miles Bader <miles@gnu.org>
parents: 32752
diff changeset
2132 (((class color grayscale) (background dark))
33465
900ca3da6e01 (header-line): Use `:box nil' for color/gs displays too.
Miles Bader <miles@gnu.org>
parents: 33447
diff changeset
2133 :background "grey20" :foreground "grey90"
54574
76b831799f4d (read-face-font): Don't cons up unnecessarily.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54161
diff changeset
2134 :box nil)
32756
ccfb1ed059ca (header-line): Make more reasonable on mono/grayscale displays.
Miles Bader <miles@gnu.org>
parents: 32752
diff changeset
2135 (((class mono) (background light))
33465
900ca3da6e01 (header-line): Use `:box nil' for color/gs displays too.
Miles Bader <miles@gnu.org>
parents: 33447
diff changeset
2136 :background "white" :foreground "black"
900ca3da6e01 (header-line): Use `:box nil' for color/gs displays too.
Miles Bader <miles@gnu.org>
parents: 33447
diff changeset
2137 :inverse-video nil
900ca3da6e01 (header-line): Use `:box nil' for color/gs displays too.
Miles Bader <miles@gnu.org>
parents: 33447
diff changeset
2138 :box nil
54574
76b831799f4d (read-face-font): Don't cons up unnecessarily.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54161
diff changeset
2139 :underline t)
32756
ccfb1ed059ca (header-line): Make more reasonable on mono/grayscale displays.
Miles Bader <miles@gnu.org>
parents: 32752
diff changeset
2140 (((class mono) (background dark))
33465
900ca3da6e01 (header-line): Use `:box nil' for color/gs displays too.
Miles Bader <miles@gnu.org>
parents: 33447
diff changeset
2141 :background "black" :foreground "white"
900ca3da6e01 (header-line): Use `:box nil' for color/gs displays too.
Miles Bader <miles@gnu.org>
parents: 33447
diff changeset
2142 :inverse-video nil
900ca3da6e01 (header-line): Use `:box nil' for color/gs displays too.
Miles Bader <miles@gnu.org>
parents: 33447
diff changeset
2143 :box nil
54574
76b831799f4d (read-face-font): Don't cons up unnecessarily.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54161
diff changeset
2144 :underline t))
25545
b0a117037bde (header-line): Renamed from `top-line'.
Gerd Moellmann <gerd@gnu.org>
parents: 25542
diff changeset
2145 "Basic header-line face."
25687
afad62240679 (mode-line, header-line, tool-bar, ): Add :version.
Dave Love <fx@gnu.org>
parents: 25650
diff changeset
2146 :version "21.1"
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2147 :group 'basic-faces)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2148
75166
d9e4f75aee3d (momentary): Change :group to basic-faces where all
Juri Linkov <juri@jurta.org>
parents: 75109
diff changeset
2149 (defface vertical-border
d9e4f75aee3d (momentary): Change :group to basic-faces where all
Juri Linkov <juri@jurta.org>
parents: 75109
diff changeset
2150 '((((type tty)) :inherit mode-line-inactive))
d9e4f75aee3d (momentary): Change :group to basic-faces where all
Juri Linkov <juri@jurta.org>
parents: 75109
diff changeset
2151 "Face used for vertical window dividers on ttys."
d9e4f75aee3d (momentary): Change :group to basic-faces where all
Juri Linkov <juri@jurta.org>
parents: 75109
diff changeset
2152 :version "22.1"
d9e4f75aee3d (momentary): Change :group to basic-faces where all
Juri Linkov <juri@jurta.org>
parents: 75109
diff changeset
2153 :group 'basic-faces)
d9e4f75aee3d (momentary): Change :group to basic-faces where all
Juri Linkov <juri@jurta.org>
parents: 75109
diff changeset
2154
65084
87a66a9a9328 (minibuffer-prompt): Doc fix.
Juri Linkov <juri@jurta.org>
parents: 65068
diff changeset
2155 (defface minibuffer-prompt
87a66a9a9328 (minibuffer-prompt): Doc fix.
Juri Linkov <juri@jurta.org>
parents: 65068
diff changeset
2156 '((((background dark)) :foreground "cyan")
87a66a9a9328 (minibuffer-prompt): Doc fix.
Juri Linkov <juri@jurta.org>
parents: 65068
diff changeset
2157 ;; Don't use blue because many users of the MS-DOS port customize
87a66a9a9328 (minibuffer-prompt): Doc fix.
Juri Linkov <juri@jurta.org>
parents: 65068
diff changeset
2158 ;; their foreground color to be blue.
87a66a9a9328 (minibuffer-prompt): Doc fix.
Juri Linkov <juri@jurta.org>
parents: 65068
diff changeset
2159 (((type pc)) :foreground "magenta")
76292
81d50597174e (minibuffer-prompt): Use medium blue by default.
Richard M. Stallman <rms@gnu.org>
parents: 75884
diff changeset
2160 (t :foreground "medium blue"))
65084
87a66a9a9328 (minibuffer-prompt): Doc fix.
Juri Linkov <juri@jurta.org>
parents: 65068
diff changeset
2161 "Face for minibuffer prompts.
87a66a9a9328 (minibuffer-prompt): Doc fix.
Juri Linkov <juri@jurta.org>
parents: 65068
diff changeset
2162 By default, Emacs automatically adds this face to the value of
87a66a9a9328 (minibuffer-prompt): Doc fix.
Juri Linkov <juri@jurta.org>
parents: 65068
diff changeset
2163 `minibuffer-prompt-properties', which is a list of text properties
87a66a9a9328 (minibuffer-prompt): Doc fix.
Juri Linkov <juri@jurta.org>
parents: 65068
diff changeset
2164 used to display the prompt text."
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59872
diff changeset
2165 :version "22.1"
42298
d020b569f212 (minibuffer-prompt): New face.
Richard M. Stallman <rms@gnu.org>
parents: 40456
diff changeset
2166 :group 'basic-faces)
d020b569f212 (minibuffer-prompt): New face.
Richard M. Stallman <rms@gnu.org>
parents: 40456
diff changeset
2167
d020b569f212 (minibuffer-prompt): New face.
Richard M. Stallman <rms@gnu.org>
parents: 40456
diff changeset
2168 (setq minibuffer-prompt-properties
d020b569f212 (minibuffer-prompt): New face.
Richard M. Stallman <rms@gnu.org>
parents: 40456
diff changeset
2169 (append minibuffer-prompt-properties (list 'face 'minibuffer-prompt)))
d020b569f212 (minibuffer-prompt): New face.
Richard M. Stallman <rms@gnu.org>
parents: 40456
diff changeset
2170
25588
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
2171 (defface fringe
29943
b8314fd10792 (fringe): Change face for different backgrounds.
Gerd Moellmann <gerd@gnu.org>
parents: 29880
diff changeset
2172 '((((class color) (background light))
43711
d15360503e4e (face-spec-choose): Allow `t' to appear before the end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43550
diff changeset
2173 :background "grey95")
d15360503e4e (face-spec-choose): Allow `t' to appear before the end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43550
diff changeset
2174 (((class color) (background dark))
d15360503e4e (face-spec-choose): Allow `t' to appear before the end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43550
diff changeset
2175 :background "grey10")
d15360503e4e (face-spec-choose): Allow `t' to appear before the end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43550
diff changeset
2176 (t
d15360503e4e (face-spec-choose): Allow `t' to appear before the end.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43550
diff changeset
2177 :background "gray"))
25588
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
2178 "Basic face for the fringes to the left and right of windows under X."
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
2179 :version "21.1"
27716
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
2180 :group 'frames
25588
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
2181 :group 'basic-faces)
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
2182
70178
667cd756c089 (scroll-bar, border, cursor, mouse): Avoid nil spec in defface.
Luc Teirlinck <teirllm@auburn.edu>
parents: 68651
diff changeset
2183 (defface scroll-bar '((t nil))
25588
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
2184 "Basic face for the scroll bar colors under X."
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
2185 :version "21.1"
27716
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
2186 :group 'frames
25588
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
2187 :group 'basic-faces)
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
2188
70178
667cd756c089 (scroll-bar, border, cursor, mouse): Avoid nil spec in defface.
Luc Teirlinck <teirllm@auburn.edu>
parents: 68651
diff changeset
2189 (defface border '((t nil))
25588
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
2190 "Basic face for the frame border under X."
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
2191 :version "21.1"
27716
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
2192 :group 'frames
25588
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
2193 :group 'basic-faces)
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
2194
70178
667cd756c089 (scroll-bar, border, cursor, mouse): Avoid nil spec in defface.
Luc Teirlinck <teirllm@auburn.edu>
parents: 68651
diff changeset
2195 (defface cursor '((t nil))
57105
8f14c8ea51a1 (cursor): Add face-no-inherit property. Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 55902
diff changeset
2196 "Basic face for the cursor color under X.
8f14c8ea51a1 (cursor): Add face-no-inherit property. Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 55902
diff changeset
2197 Note: Other faces cannot inherit from the cursor face."
25588
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
2198 :version "21.1"
27716
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
2199 :group 'cursor
25588
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
2200 :group 'basic-faces)
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
2201
57105
8f14c8ea51a1 (cursor): Add face-no-inherit property. Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 55902
diff changeset
2202 (put 'cursor 'face-no-inherit t)
25588
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
2203
70178
667cd756c089 (scroll-bar, border, cursor, mouse): Avoid nil spec in defface.
Luc Teirlinck <teirllm@auburn.edu>
parents: 68651
diff changeset
2204 (defface mouse '((t nil))
25588
1d8ba3dd04e9 (face-set-after-frame-default): Initialize some
Gerd Moellmann <gerd@gnu.org>
parents: 25561
diff changeset
2205 "Basic face for the mouse color under X."
25137
1bee9402f747 (bitmap-area): Add :version.
Dave Love <fx@gnu.org>
parents: 25090
diff changeset
2206 :version "21.1"
27716
a3d981ee3185 Don't require custom. Add more specific :groups to various deffaces.
Dave Love <fx@gnu.org>
parents: 27571
diff changeset
2207 :group 'mouse
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2208 :group 'basic-faces)
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2209
65730
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2210 (defface tool-bar
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2211 '((default
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2212 :box (:line-width 1 :style released-button)
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2213 :foreground "black")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2214 (((type x w32 mac) (class color))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2215 :background "grey75")
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2216 (((type x) (class mono))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2217 :background "grey"))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2218 "Basic tool-bar face."
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2219 :version "21.1"
25687
afad62240679 (mode-line, header-line, tool-bar, ): Add :version.
Dave Love <fx@gnu.org>
parents: 25650
diff changeset
2220 :group 'basic-faces)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2221
65730
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2222 (defface menu
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2223 '((((type tty))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2224 :inverse-video t)
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2225 (((type x-toolkit))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2226 )
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2227 (t
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2228 :inverse-video t))
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2229 "Basic face for the font and colors of the menu bar and popup menus."
25687
afad62240679 (mode-line, header-line, tool-bar, ): Add :version.
Dave Love <fx@gnu.org>
parents: 25650
diff changeset
2230 :version "21.1"
65730
a9f7501916e6 Rearrange face definitions to be in the same order as
Juri Linkov <juri@jurta.org>
parents: 65289
diff changeset
2231 :group 'menu
25687
afad62240679 (mode-line, header-line, tool-bar, ): Add :version.
Dave Love <fx@gnu.org>
parents: 25650
diff changeset
2232 :group 'basic-faces)
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2233
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2234
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2235 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2236 ;;; Manipulating font names.
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2237 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2238
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2239 ;; This is here for compatibilty with Emacs 20.2. For example,
28907
6d7ba0ba3bc3 Declare more functions obsolete.
Dave Love <fx@gnu.org>
parents: 28849
diff changeset
2240 ;; international/fontset.el uses x-resolve-font-name. The following
6d7ba0ba3bc3 Declare more functions obsolete.
Dave Love <fx@gnu.org>
parents: 28849
diff changeset
2241 ;; functions are not used in the face implementation itself.
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2242
16687
049c87a96dca Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents: 16590
diff changeset
2243 (defvar x-font-regexp nil)
049c87a96dca Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents: 16590
diff changeset
2244 (defvar x-font-regexp-head nil)
049c87a96dca Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents: 16590
diff changeset
2245 (defvar x-font-regexp-weight nil)
049c87a96dca Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents: 16590
diff changeset
2246 (defvar x-font-regexp-slant nil)
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2247
12668
7660e82d0346 (x-font-regexp-weight-subnum, x-font-regexp-slant-subnum)
Karl Heuer <kwzh@gnu.org>
parents: 12651
diff changeset
2248 (defconst x-font-regexp-weight-subnum 1)
7660e82d0346 (x-font-regexp-weight-subnum, x-font-regexp-slant-subnum)
Karl Heuer <kwzh@gnu.org>
parents: 12651
diff changeset
2249 (defconst x-font-regexp-slant-subnum 2)
7660e82d0346 (x-font-regexp-weight-subnum, x-font-regexp-slant-subnum)
Karl Heuer <kwzh@gnu.org>
parents: 12651
diff changeset
2250 (defconst x-font-regexp-swidth-subnum 3)
7660e82d0346 (x-font-regexp-weight-subnum, x-font-regexp-slant-subnum)
Karl Heuer <kwzh@gnu.org>
parents: 12651
diff changeset
2251 (defconst x-font-regexp-adstyle-subnum 4)
7660e82d0346 (x-font-regexp-weight-subnum, x-font-regexp-slant-subnum)
Karl Heuer <kwzh@gnu.org>
parents: 12651
diff changeset
2252
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2253 ;;; Regexps matching font names in "Host Portable Character Representation."
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2254 ;;;
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2255 (let ((- "[-?]")
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2256 (foundry "[^-]+")
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2257 (family "[^-]+")
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2258 (weight "\\(bold\\|demibold\\|medium\\)") ; 1
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2259 ; (weight\? "\\(\\*\\|bold\\|demibold\\|medium\\|\\)") ; 1
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2260 (weight\? "\\([^-]*\\)") ; 1
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2261 (slant "\\([ior]\\)") ; 2
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2262 ; (slant\? "\\([ior?*]?\\)") ; 2
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2263 (slant\? "\\([^-]?\\)") ; 2
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2264 ; (swidth "\\(\\*\\|normal\\|semicondensed\\|\\)") ; 3
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2265 (swidth "\\([^-]*\\)") ; 3
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2266 ; (adstyle "\\(\\*\\|sans\\|\\)") ; 4
12690
e2d3fa52d100 (x-font-regexp): Add \\(\\) for substring extraction.
Karl Heuer <kwzh@gnu.org>
parents: 12668
diff changeset
2267 (adstyle "\\([^-]*\\)") ; 4
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2268 (pixelsize "[0-9]+")
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2269 (pointsize "[0-9][0-9]+")
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2270 (resx "[0-9][0-9]+")
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2271 (resy "[0-9][0-9]+")
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2272 (spacing "[cmp?*]")
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2273 (avgwidth "[0-9]+")
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2274 (registry "[^-]+")
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2275 (encoding "[^-]+")
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2276 )
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2277 (setq x-font-regexp
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2278 (concat "\\`\\*?[-?*]"
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2279 foundry - family - weight\? - slant\? - swidth - adstyle -
12475
eb436b0c4ab3 (x-font-regexp): Include the avgwidth.
Richard M. Stallman <rms@gnu.org>
parents: 12460
diff changeset
2280 pixelsize - pointsize - resx - resy - spacing - avgwidth -
eb436b0c4ab3 (x-font-regexp): Include the avgwidth.
Richard M. Stallman <rms@gnu.org>
parents: 12460
diff changeset
2281 registry - encoding "\\*?\\'"
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2282 ))
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2283 (setq x-font-regexp-head
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2284 (concat "\\`[-?*]" foundry - family - weight\? - slant\?
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2285 "\\([-*?]\\|\\'\\)"))
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2286 (setq x-font-regexp-slant (concat - slant -))
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2287 (setq x-font-regexp-weight (concat - weight -))
28840
d0531e35d9f2 Some doc fixes.
Dave Love <fx@gnu.org>
parents: 28214
diff changeset
2288 nil)
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2289
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2290
3071
68de05fb5751 * faces.el (set-face-font): Call x-resolve-font-name on the font
Jim Blandy <jimb@redhat.com>
parents: 3049
diff changeset
2291 (defun x-resolve-font-name (pattern &optional face frame)
68de05fb5751 * faces.el (set-face-font): Call x-resolve-font-name on the font
Jim Blandy <jimb@redhat.com>
parents: 3049
diff changeset
2292 "Return a font name matching PATTERN.
28849
76e727bc0dfd Fix make-obsolete for internal-get-face.
Dave Love <fx@gnu.org>
parents: 28840
diff changeset
2293 All wildcards in PATTERN are instantiated.
3130
82c29bacb6b3 * faces.el (x-resolve-font-name): If PATTERN is nil, return the
Jim Blandy <jimb@redhat.com>
parents: 3071
diff changeset
2294 If PATTERN is nil, return the name of the frame's base font, which never
82c29bacb6b3 * faces.el (x-resolve-font-name): If PATTERN is nil, return the
Jim Blandy <jimb@redhat.com>
parents: 3071
diff changeset
2295 contains wildcards.
10170
5fc240a3e4a0 (face-initialize): Test for framep not t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 10107
diff changeset
2296 Given optional arguments FACE and FRAME, return a font which is
5fc240a3e4a0 (face-initialize): Test for framep not t or nil.
Richard M. Stallman <rms@gnu.org>
parents: 10107
diff changeset
2297 also the same size as FACE on FRAME, or fail."
3233
28b2df35c33e (x-resolve-font-name): Allow symbol as FACE arg.
Richard M. Stallman <rms@gnu.org>
parents: 3182
diff changeset
2298 (or (symbolp face)
28b2df35c33e (x-resolve-font-name): Allow symbol as FACE arg.
Richard M. Stallman <rms@gnu.org>
parents: 3182
diff changeset
2299 (setq face (face-name face)))
28b2df35c33e (x-resolve-font-name): Allow symbol as FACE arg.
Richard M. Stallman <rms@gnu.org>
parents: 3182
diff changeset
2300 (and (eq frame t)
28b2df35c33e (x-resolve-font-name): Allow symbol as FACE arg.
Richard M. Stallman <rms@gnu.org>
parents: 3182
diff changeset
2301 (setq frame nil))
3130
82c29bacb6b3 * faces.el (x-resolve-font-name): If PATTERN is nil, return the
Jim Blandy <jimb@redhat.com>
parents: 3071
diff changeset
2302 (if pattern
5092
36508a7c0a3f (x-resolve-font-name): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 5081
diff changeset
2303 ;; Note that x-list-fonts has code to handle a face with nil as its font.
16002
c8cbde1d3f11 (internal-set-face-1): When calling x-list-fonts, ask for just one match.
Richard M. Stallman <rms@gnu.org>
parents: 15884
diff changeset
2304 (let ((fonts (x-list-fonts pattern face frame 1)))
3130
82c29bacb6b3 * faces.el (x-resolve-font-name): If PATTERN is nil, return the
Jim Blandy <jimb@redhat.com>
parents: 3071
diff changeset
2305 (or fonts
82c29bacb6b3 * faces.el (x-resolve-font-name): If PATTERN is nil, return the
Jim Blandy <jimb@redhat.com>
parents: 3071
diff changeset
2306 (if face
10584
f79a6ab2d0bd (facep): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10379
diff changeset
2307 (if (string-match "\\*" pattern)
f79a6ab2d0bd (facep): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10379
diff changeset
2308 (if (null (face-font face))
f79a6ab2d0bd (facep): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10379
diff changeset
2309 (error "No matching fonts are the same height as the frame default font")
f79a6ab2d0bd (facep): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10379
diff changeset
2310 (error "No matching fonts are the same height as face `%s'" face))
f79a6ab2d0bd (facep): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10379
diff changeset
2311 (if (null (face-font face))
f79a6ab2d0bd (facep): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10379
diff changeset
2312 (error "Height of font `%s' doesn't match the frame default font"
f79a6ab2d0bd (facep): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10379
diff changeset
2313 pattern)
f79a6ab2d0bd (facep): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10379
diff changeset
2314 (error "Height of font `%s' doesn't match face `%s'"
f79a6ab2d0bd (facep): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10379
diff changeset
2315 pattern face)))
3353
8cbd38886eef (x-resolve-font-name): Clean up error messages.
Richard M. Stallman <rms@gnu.org>
parents: 3298
diff changeset
2316 (error "No fonts match `%s'" pattern)))
3130
82c29bacb6b3 * faces.el (x-resolve-font-name): If PATTERN is nil, return the
Jim Blandy <jimb@redhat.com>
parents: 3071
diff changeset
2317 (car fonts))
82c29bacb6b3 * faces.el (x-resolve-font-name): If PATTERN is nil, return the
Jim Blandy <jimb@redhat.com>
parents: 3071
diff changeset
2318 (cdr (assq 'font (frame-parameters (selected-frame))))))
3071
68de05fb5751 * faces.el (set-face-font): Call x-resolve-font-name on the font
Jim Blandy <jimb@redhat.com>
parents: 3049
diff changeset
2319
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2320
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2321 (defun x-frob-font-weight (font which)
13704
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2322 (let ((case-fold-search t))
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2323 (cond ((string-match x-font-regexp font)
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2324 (concat (substring font 0
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2325 (match-beginning x-font-regexp-weight-subnum))
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2326 which
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2327 (substring font (match-end x-font-regexp-weight-subnum)
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2328 (match-beginning x-font-regexp-adstyle-subnum))
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2329 ;; Replace the ADD_STYLE_NAME field with *
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2330 ;; because the info in it may not be the same
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2331 ;; for related fonts.
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2332 "*"
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2333 (substring font (match-end x-font-regexp-adstyle-subnum))))
14880
b405f39b5493 (x-frob-font-slant): Properly handle a match against
Richard M. Stallman <rms@gnu.org>
parents: 14409
diff changeset
2334 ((string-match x-font-regexp-head font)
b405f39b5493 (x-frob-font-slant): Properly handle a match against
Richard M. Stallman <rms@gnu.org>
parents: 14409
diff changeset
2335 (concat (substring font 0 (match-beginning 1)) which
b405f39b5493 (x-frob-font-slant): Properly handle a match against
Richard M. Stallman <rms@gnu.org>
parents: 14409
diff changeset
2336 (substring font (match-end 1))))
b405f39b5493 (x-frob-font-slant): Properly handle a match against
Richard M. Stallman <rms@gnu.org>
parents: 14409
diff changeset
2337 ((string-match x-font-regexp-weight font)
13704
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2338 (concat (substring font 0 (match-beginning 1)) which
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2339 (substring font (match-end 1)))))))
29354
4ed4a700358b Update calls to make-obsolete with a WHEN argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28907
diff changeset
2340 (make-obsolete 'x-frob-font-weight 'make-face-... "21.1")
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2341
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2342 (defun x-frob-font-slant (font which)
13704
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2343 (let ((case-fold-search t))
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2344 (cond ((string-match x-font-regexp font)
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2345 (concat (substring font 0
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2346 (match-beginning x-font-regexp-slant-subnum))
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2347 which
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2348 (substring font (match-end x-font-regexp-slant-subnum)
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2349 (match-beginning x-font-regexp-adstyle-subnum))
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2350 ;; Replace the ADD_STYLE_NAME field with *
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2351 ;; because the info in it may not be the same
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2352 ;; for related fonts.
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2353 "*"
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2354 (substring font (match-end x-font-regexp-adstyle-subnum))))
14880
b405f39b5493 (x-frob-font-slant): Properly handle a match against
Richard M. Stallman <rms@gnu.org>
parents: 14409
diff changeset
2355 ((string-match x-font-regexp-head font)
b405f39b5493 (x-frob-font-slant): Properly handle a match against
Richard M. Stallman <rms@gnu.org>
parents: 14409
diff changeset
2356 (concat (substring font 0 (match-beginning 2)) which
b405f39b5493 (x-frob-font-slant): Properly handle a match against
Richard M. Stallman <rms@gnu.org>
parents: 14409
diff changeset
2357 (substring font (match-end 2))))
b405f39b5493 (x-frob-font-slant): Properly handle a match against
Richard M. Stallman <rms@gnu.org>
parents: 14409
diff changeset
2358 ((string-match x-font-regexp-slant font)
13704
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2359 (concat (substring font 0 (match-beginning 1)) which
3dcaddea344a Wrap case-fold-search for x-frob-font-weight and x-frob-font-slant.
Simon Marshall <simon@gnu.org>
parents: 13609
diff changeset
2360 (substring font (match-end 1)))))))
29354
4ed4a700358b Update calls to make-obsolete with a WHEN argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28907
diff changeset
2361 (make-obsolete 'x-frob-font-slant 'make-face-... "21.1")
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2362
40351
a44d4a7dd8de (internal-get-face): Use facep instead of the obsolete
Eli Zaretskii <eliz@gnu.org>
parents: 39830
diff changeset
2363 ;; These aliases are here so that we don't get warnings about obsolete
a44d4a7dd8de (internal-get-face): Use facep instead of the obsolete
Eli Zaretskii <eliz@gnu.org>
parents: 39830
diff changeset
2364 ;; functions from the byte compiler.
a44d4a7dd8de (internal-get-face): Use facep instead of the obsolete
Eli Zaretskii <eliz@gnu.org>
parents: 39830
diff changeset
2365 (defalias 'internal-frob-font-weight 'x-frob-font-weight)
a44d4a7dd8de (internal-get-face): Use facep instead of the obsolete
Eli Zaretskii <eliz@gnu.org>
parents: 39830
diff changeset
2366 (defalias 'internal-frob-font-slant 'x-frob-font-slant)
a44d4a7dd8de (internal-get-face): Use facep instead of the obsolete
Eli Zaretskii <eliz@gnu.org>
parents: 39830
diff changeset
2367
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2368 (defun x-make-font-bold (font)
4439
e7ab04f23df5 Make boldness and italicness affect subsequently created frames.
Richard M. Stallman <rms@gnu.org>
parents: 4122
diff changeset
2369 "Given an X font specification, make a bold version of it.
e7ab04f23df5 Make boldness and italicness affect subsequently created frames.
Richard M. Stallman <rms@gnu.org>
parents: 4122
diff changeset
2370 If that can't be done, return nil."
40351
a44d4a7dd8de (internal-get-face): Use facep instead of the obsolete
Eli Zaretskii <eliz@gnu.org>
parents: 39830
diff changeset
2371 (internal-frob-font-weight font "bold"))
29354
4ed4a700358b Update calls to make-obsolete with a WHEN argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28907
diff changeset
2372 (make-obsolete 'x-make-font-bold 'make-face-bold "21.1")
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2373
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2374 (defun x-make-font-demibold (font)
4439
e7ab04f23df5 Make boldness and italicness affect subsequently created frames.
Richard M. Stallman <rms@gnu.org>
parents: 4122
diff changeset
2375 "Given an X font specification, make a demibold version of it.
e7ab04f23df5 Make boldness and italicness affect subsequently created frames.
Richard M. Stallman <rms@gnu.org>
parents: 4122
diff changeset
2376 If that can't be done, return nil."
40351
a44d4a7dd8de (internal-get-face): Use facep instead of the obsolete
Eli Zaretskii <eliz@gnu.org>
parents: 39830
diff changeset
2377 (internal-frob-font-weight font "demibold"))
29354
4ed4a700358b Update calls to make-obsolete with a WHEN argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28907
diff changeset
2378 (make-obsolete 'x-make-font-demibold 'make-face-bold "21.1")
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2379
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2380 (defun x-make-font-unbold (font)
4439
e7ab04f23df5 Make boldness and italicness affect subsequently created frames.
Richard M. Stallman <rms@gnu.org>
parents: 4122
diff changeset
2381 "Given an X font specification, make a non-bold version of it.
e7ab04f23df5 Make boldness and italicness affect subsequently created frames.
Richard M. Stallman <rms@gnu.org>
parents: 4122
diff changeset
2382 If that can't be done, return nil."
40351
a44d4a7dd8de (internal-get-face): Use facep instead of the obsolete
Eli Zaretskii <eliz@gnu.org>
parents: 39830
diff changeset
2383 (internal-frob-font-weight font "medium"))
29354
4ed4a700358b Update calls to make-obsolete with a WHEN argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28907
diff changeset
2384 (make-obsolete 'x-make-font-unbold 'make-face-unbold "21.1")
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2385
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2386 (defun x-make-font-italic (font)
4439
e7ab04f23df5 Make boldness and italicness affect subsequently created frames.
Richard M. Stallman <rms@gnu.org>
parents: 4122
diff changeset
2387 "Given an X font specification, make an italic version of it.
e7ab04f23df5 Make boldness and italicness affect subsequently created frames.
Richard M. Stallman <rms@gnu.org>
parents: 4122
diff changeset
2388 If that can't be done, return nil."
40351
a44d4a7dd8de (internal-get-face): Use facep instead of the obsolete
Eli Zaretskii <eliz@gnu.org>
parents: 39830
diff changeset
2389 (internal-frob-font-slant font "i"))
29354
4ed4a700358b Update calls to make-obsolete with a WHEN argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28907
diff changeset
2390 (make-obsolete 'x-make-font-italic 'make-face-italic "21.1")
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2391
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2392 (defun x-make-font-oblique (font) ; you say tomayto...
4439
e7ab04f23df5 Make boldness and italicness affect subsequently created frames.
Richard M. Stallman <rms@gnu.org>
parents: 4122
diff changeset
2393 "Given an X font specification, make an oblique version of it.
e7ab04f23df5 Make boldness and italicness affect subsequently created frames.
Richard M. Stallman <rms@gnu.org>
parents: 4122
diff changeset
2394 If that can't be done, return nil."
40351
a44d4a7dd8de (internal-get-face): Use facep instead of the obsolete
Eli Zaretskii <eliz@gnu.org>
parents: 39830
diff changeset
2395 (internal-frob-font-slant font "o"))
29354
4ed4a700358b Update calls to make-obsolete with a WHEN argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28907
diff changeset
2396 (make-obsolete 'x-make-font-oblique 'make-face-italic "21.1")
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2397
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2398 (defun x-make-font-unitalic (font)
4439
e7ab04f23df5 Make boldness and italicness affect subsequently created frames.
Richard M. Stallman <rms@gnu.org>
parents: 4122
diff changeset
2399 "Given an X font specification, make a non-italic version of it.
e7ab04f23df5 Make boldness and italicness affect subsequently created frames.
Richard M. Stallman <rms@gnu.org>
parents: 4122
diff changeset
2400 If that can't be done, return nil."
40351
a44d4a7dd8de (internal-get-face): Use facep instead of the obsolete
Eli Zaretskii <eliz@gnu.org>
parents: 39830
diff changeset
2401 (internal-frob-font-slant font "r"))
29354
4ed4a700358b Update calls to make-obsolete with a WHEN argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28907
diff changeset
2402 (make-obsolete 'x-make-font-unitalic 'make-face-unitalic "21.1")
25012
583c6bc7fe82 Complete rewrite.
Gerd Moellmann <gerd@gnu.org>
parents: 24579
diff changeset
2403
17752
2687f3d7c191 (x-make-font-bold-italic): New function.
Kenichi Handa <handa@m17n.org>
parents: 17560
diff changeset
2404 (defun x-make-font-bold-italic (font)
2687f3d7c191 (x-make-font-bold-italic): New function.
Kenichi Handa <handa@m17n.org>
parents: 17560
diff changeset
2405 "Given an X font specification, make a bold and italic version of it.
2687f3d7c191 (x-make-font-bold-italic): New function.
Kenichi Handa <handa@m17n.org>
parents: 17560
diff changeset
2406 If that can't be done, return nil."
40351
a44d4a7dd8de (internal-get-face): Use facep instead of the obsolete
Eli Zaretskii <eliz@gnu.org>
parents: 39830
diff changeset
2407 (and (setq font (internal-frob-font-weight font "bold"))
a44d4a7dd8de (internal-get-face): Use facep instead of the obsolete
Eli Zaretskii <eliz@gnu.org>
parents: 39830
diff changeset
2408 (internal-frob-font-slant font "i")))
29354
4ed4a700358b Update calls to make-obsolete with a WHEN argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28907
diff changeset
2409 (make-obsolete 'x-make-font-bold-italic 'make-face-bold-italic "21.1")
2456
39a58fdf2dee Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2410
2715
9caee9338229 * faces.el: Call internal-set-face-1, not internat-set-face-1.
Jim Blandy <jimb@redhat.com>
parents: 2714
diff changeset
2411 (provide 'faces)
9caee9338229 * faces.el: Call internal-set-face-1, not internat-set-face-1.
Jim Blandy <jimb@redhat.com>
parents: 2714
diff changeset
2412
63382
9cbfa983c1cf (read-face-name): Use complete-in-turn complete non-aliases
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 63311
diff changeset
2413 ;; arch-tag: 19a4759f-2963-445f-b004-425b9aadd7d6
28840
d0531e35d9f2 Some doc fixes.
Dave Love <fx@gnu.org>
parents: 28214
diff changeset
2414 ;;; faces.el ends here