annotate lisp/cus-face.el @ 5576:071b810ceb18

Declare labels as line where appropriate; use #'labels, not #'flet, tests. lisp/ChangeLog addition: 2011-10-03 Aidan Kehoe <kehoea@parhasard.net> * simple.el (handle-pre-motion-command-current-command-is-motion): Implement #'keysyms-equal with #'labels + (declare (inline ...)), instead of abusing macrolet to the same end. * specifier.el (let-specifier): * mule/mule-cmds.el (describe-language-environment): * mule/mule-cmds.el (set-language-environment-coding-systems): * mule/mule-x-init.el (x-use-halfwidth-roman-font): * faces.el (Face-frob-property): * keymap.el (key-sequence-list-description): * lisp-mode.el (construct-lisp-mode-menu): * loadhist.el (unload-feature): * mouse.el (default-mouse-track-check-for-activation): Declare various labels inline in dumped files when that reduces the size of the dumped image. Declaring labels inline is normally only worthwhile for inner loops and so on, but it's reasonable exercise of the related code to have these changes in core. tests/ChangeLog addition: 2011-10-03 Aidan Kehoe <kehoea@parhasard.net> * automated/case-tests.el (uni-mappings): * automated/database-tests.el (delete-database-files): * automated/hash-table-tests.el (iterations): * automated/lisp-tests.el (test1): * automated/lisp-tests.el (a): * automated/lisp-tests.el (cl-floor): * automated/lisp-tests.el (foo): * automated/lisp-tests.el (list-nreverse): * automated/lisp-tests.el (needs-lexical-context): * automated/mule-tests.el (featurep): * automated/os-tests.el (original-string): * automated/os-tests.el (with): * automated/symbol-tests.el (check-weak-list-unique): Replace #'flet with #'labels where appropriate in these tests, following my own advice on style in the docstrings of those functions.
author Aidan Kehoe <kehoea@parhasard.net>
date Mon, 03 Oct 2011 20:16:14 +0100
parents 91b3aa59f49b
children b0d712bbc2a6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 ;;; cus-face.el -- Support for Custom faces.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 ;; Copyright (C) 1996, 1997 Free Software Foundation, Inc.
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4535
diff changeset
4 ;; Copyright (C) 2010 Didier Verna
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 ;; Maintainer: Hrvoje Niksic <hniksic@xemacs.org>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 ;; Keywords: help, faces
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 ;; Version: 1.9960-x
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
5404
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 5080
diff changeset
12 ;; This file is part of XEmacs.
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 5080
diff changeset
13
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 5080
diff changeset
14 ;; XEmacs is free software: you can redistribute it and/or modify it
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 5080
diff changeset
15 ;; under the terms of the GNU General Public License as published by the
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 5080
diff changeset
16 ;; Free Software Foundation, either version 3 of the License, or (at your
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 5080
diff changeset
17 ;; option) any later version.
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 5080
diff changeset
18
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 5080
diff changeset
19 ;; XEmacs is distributed in the hope that it will be useful, but WITHOUT
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 5080
diff changeset
20 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 5080
diff changeset
21 ;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 5080
diff changeset
22 ;; for more details.
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 5080
diff changeset
23
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 5080
diff changeset
24 ;; You should have received a copy of the GNU General Public License
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 5080
diff changeset
25 ;; along with XEmacs. If not, see <http://www.gnu.org/licenses/>.
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 5080
diff changeset
26
3027
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
27 ;;; Synched with: Not synched.
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
28
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 ;;; Commentary:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 ;; See `custom.el'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 ;;; Code:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 707
diff changeset
35 ;; it is now safe to put the `provide' anywhere. if an error occurs while
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 707
diff changeset
36 ;; loading, all provides (and fsets) will be undone. put it first to
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 707
diff changeset
37 ;; prevent require/provide loop with custom and cus-face.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 707
diff changeset
38 (provide 'cus-face)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 (require 'custom)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 ;; To elude the warnings for font functions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 (eval-when-compile
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 (require 'font))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 ;;; Declaring a face.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 ;;;###autoload
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 (defun custom-declare-face (face spec doc &rest args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 "Like `defface', but FACE is evaluated as a normal argument."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 ;; (when (fboundp 'pureload)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 ;; (error "Attempt to declare a face during dump"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 ;; #### should we possibly reset force-face here?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 (unless (get face 'face-defface-spec)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 (put face 'face-defface-spec spec)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 (unless (find-face face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 ;; If the user has already created the face, respect that.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 (let ((value (or (get face 'saved-face) spec))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 (frames (relevant-custom-frames))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 ;; Create global face.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 (make-empty-face face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 (face-display-set face value nil '(custom))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 ;; Create frame local faces
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 (while frames
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 (setq frame (car frames)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 frames (cdr frames))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 (face-display-set face value frame '(custom)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 (init-face-from-resources face)))
4535
69a1eda3da06 Distinguish vars and functions in #'symbol-file, #'describe-{function,variable}
Aidan Kehoe <kehoea@parhasard.net>
parents: 3918
diff changeset
69 ;; Don't record SPEC until we see it causes no errors.
69a1eda3da06 Distinguish vars and functions in #'symbol-file, #'describe-{function,variable}
Aidan Kehoe <kehoea@parhasard.net>
parents: 3918
diff changeset
70 (put face 'face-defface-spec spec)
69a1eda3da06 Distinguish vars and functions in #'symbol-file, #'describe-{function,variable}
Aidan Kehoe <kehoea@parhasard.net>
parents: 3918
diff changeset
71 (push (cons 'defface face) current-load-list)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 (when (and doc (null (face-doc-string face)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 (set-face-doc-string face doc))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 (custom-handle-all-keywords face args 'custom-face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 (run-hooks 'custom-define-hook))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 ;;; Font Attributes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
80 ;; Consider adding the stuff in the XML font model here.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 (defconst custom-face-attributes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 '((:foreground (color :tag "Foreground"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 :value ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 :help-echo "Set foreground color.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 set-face-foreground face-foreground-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 (:background (color :tag "Background"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 :value ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 :help-echo "Set background color.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 set-face-background face-background-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 (:size (editable-field :format "Size: %v"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 :help-echo "\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 Text size (e.g. 9pt or 2mm).")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 custom-set-face-font-size custom-face-font-size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 (:family (editable-field :format "Font Family: %v"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 :help-echo "\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 Name of font family to use (e.g. times).")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 custom-set-face-font-family custom-face-font-family)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 (:background-pixmap (editable-field :format "Background pixmap: %v"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 :help-echo "\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 Name of background pixmap file.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 set-face-background-pixmap custom-face-background-pixmap)
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4535
diff changeset
102 (:background-placement (choice :tag "Background placement" :value relative
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4535
diff changeset
103 (const :tag "Relative" :value relative)
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4535
diff changeset
104 (const :tag "Absolute" :value absolute))
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4535
diff changeset
105 set-face-background-placement
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4535
diff changeset
106 face-background-placement)
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4535
diff changeset
107 (:dim (toggle :format "%[Dim%]: %v\n"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 :help-echo "Control whether the text should be dimmed.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 set-face-dim-p face-dim-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 (:bold (toggle :format "%[Bold%]: %v\n"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 :help-echo "Control whether a bold font should be used.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 custom-set-face-bold custom-face-bold)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 (:italic (toggle :format "%[Italic%]: %v\n"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 :help-echo "\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 Control whether an italic font should be used.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 custom-set-face-italic custom-face-italic)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 (:underline (toggle :format "%[Underline%]: %v\n"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 :help-echo "\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 Control whether the text should be underlined.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 set-face-underline-p face-underline-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 (:strikethru (toggle :format "%[Strikethru%]: %v\n"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 :help-echo "\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 Control whether the text should be strikethru.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 set-face-strikethru-p face-strikethru-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 (:inverse-video (toggle :format "%[Inverse Video%]: %v\n"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 :help-echo "\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 Control whether the text should be inverted. Works only on TTY-s")
3027
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
128 set-face-reverse-p face-reverse-p)
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
129 (:inherit
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
130 (repeat :tag "Inherit"
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
131 :help-echo "List of faces to inherit attributes from."
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
132 (face :Tag "Face" default))
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
133 ;; FSF 21.3
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
134 ; ;; filter to make value suitable for customize
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
135 ; (lambda (real-value)
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
136 ; (cond ((or (null real-value) (eq real-value 'unspecified))
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
137 ; nil)
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
138 ; ((symbolp real-value)
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
139 ; (list real-value))
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
140 ; (t
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
141 ; real-value)))
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
142 ; ;; filter to make customized-value suitable for storing
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
143 ; (lambda (cus-value)
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
144 ; (if (and (consp cus-value) (null (cdr cus-value)))
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
145 ; (car cus-value)
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
146 ; cus-value))
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
147 custom-set-face-inherit custom-face-inherit))
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
148 "Alist of face attributes.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
150 The elements are lists of the form (KEY TYPE SET GET) where:
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
151 KEY is a symbol identifying the attribute.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
152 TYPE is a widget type for editing the attribute.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
153 SET is a function for setting the attribute value.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
154 GET is a function for getting the attribute value.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
156 The SET function should take three arguments: the face to modify, the
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 value of the attribute, and optionally the frame where the face should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 be changed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 The GET function should take two arguments, the face to examine, and
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
161 optionally the frame where the face should be examined.")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 (defun face-custom-attributes-set (face frame tags &rest atts)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 "For FACE on FRAME set the attributes [KEYWORD VALUE]....
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 Each keyword should be listed in `custom-face-attributes'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 If FRAME is nil, set the default face."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 (while atts
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 (let* ((name (nth 0 atts))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 (value (nth 1 atts))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 (fun (nth 2 (assq name custom-face-attributes))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 (setq atts (cdr (cdr atts)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 (condition-case nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 (funcall fun face value frame tags)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 (error nil)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 (defun face-custom-attributes-get (face frame)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 "For FACE on FRAME get the attributes [KEYWORD VALUE]....
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 Each keyword should be listed in `custom-face-attributes'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 If FRAME is nil, use the default face."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 (condition-case nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 ;; Attempt to get `font.el' from w3.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 (require 'font)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 (error nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 (let ((atts custom-face-attributes)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 att result get)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 (while atts
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 (setq att (car atts)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 atts (cdr atts)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 get (nth 3 att))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 (condition-case nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 ;; This may fail if w3 doesn't exist.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 (when get
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 (let ((answer (funcall get face frame)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 (unless (equal answer (funcall get 'default frame))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 (when (widget-apply (nth 1 att) :match answer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 (setq result (cons (nth 0 att) (cons answer result)))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 (error nil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 result))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 (defsubst custom-face-get-spec (symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 (or (get symbol 'customized-face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 (get symbol 'saved-face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 (get symbol 'face-defface-spec)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 ;; Attempt to construct it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 (list (list t (face-custom-attributes-get
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 symbol (selected-frame))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 (defun custom-set-face-bold (face value &optional frame tags)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 "Set the bold property of FACE to VALUE."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 (if value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 (make-face-bold face frame tags)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 (make-face-unbold face frame tags)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 ;; Really, we should get rid of these font.el dependencies... They
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 ;; are still presenting a problem with dumping the faces (font.el is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 ;; too bloated for us to dump). I am thinking about hacking up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 ;; font-like functionality myself for the sake of this file. It will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 ;; probably be to-the-point and more efficient.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 (defun custom-face-bold (face &rest args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 "Return non-nil if the font of FACE is bold."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 (let* ((font (apply 'face-font-name face args))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 ;; Gag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 (fontobj (font-create-object font)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 (font-bold-p fontobj)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 (defun custom-set-face-italic (face value &optional frame tags)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 "Set the italic property of FACE to VALUE."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 (if value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 (make-face-italic face frame tags)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 (make-face-unitalic face frame tags)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 (defun custom-face-italic (face &rest args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 "Return non-nil if the font of FACE is italic."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 (let* ((font (apply 'face-font-name face args))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 ;; Gag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 (fontobj (font-create-object font)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 (font-italic-p fontobj)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 (defun custom-face-background-pixmap (face &rest args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 "Return the name of the background pixmap file used for FACE."
3027
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
244 (let ((image (apply 'specifier-instance
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
245 (face-background-pixmap face) args)))
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
246 (and image
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 (image-instance-file-name image))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248
3027
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
249 (defun custom-set-face-inherit (face value &optional frame tags)
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
250 "Set FACE to inherit its properties from another face."
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
251 (if (listp value) (setq value (car value))) ;; #### Temporary hack!
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
252 (if (find-face value)
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
253 (set-face-parent face value frame tags)))
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
254
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
255 (defun custom-face-inherit (face &rest args)
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
256 "Return the value (instance) of the `inherit' property for FACE."
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
257 ;; #### Major, temporary hack!
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
258 (let ((spec (apply 'specifier-instantiator
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
259 (face-font face) args)))
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
260 (and spec (vector spec) (aref spec 0))))
7efd3a9bbcfb [xemacs-hg @ 2005-10-25 11:28:23 by ben]
ben
parents: 771
diff changeset
261
707
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
262 ;; This consistently fails to dtrt
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
263 ;;(defun custom-set-face-font-size (face size &optional locale tags)
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
264 ;; "Set the font of FACE to SIZE."
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
265 ;; ;; #### should this call have tags in it?
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
266 ;; (let* ((font (apply 'face-font-name face (list locale)))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
267 ;; ;; Gag
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
268 ;; (fontobj (font-create-object font)))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
269 ;; (set-font-size fontobj size)
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
270 ;; (apply 'font-set-face-font face fontobj locale tags)))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
271
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
272 ;; From Jan Vroonhof -- see faces.el
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 (defun custom-set-face-font-size (face size &optional locale tags)
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
274 "Set the font of FACE to SIZE."
707
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
275 (make-face-size face size locale tags))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 (defun custom-face-font-size (face &rest args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 "Return the size of the font of FACE as a string."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 (let* ((font (apply 'face-font-name face args))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 ;; Gag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 (fontobj (font-create-object font)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 (format "%s" (font-size fontobj))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283
707
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
284 ;; Jan suggests this may not dtrt
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
285 ;;(defun custom-set-face-font-family (face family &optional locale tags)
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
286 ;; "Set the font of FACE to FAMILY."
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
287 ;; ;; #### should this call have tags in it?
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
288 ;; (let* ((font (apply 'face-font-name face (list locale)))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
289 ;; ;; Gag
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
290 ;; (fontobj (font-create-object font)))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
291 ;; (set-font-family fontobj family)
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
292 ;; (apply 'font-set-face-font face fontobj locale tags)))
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
293
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
294 ;; From Jan Vroonhof -- see faces.el
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 (defun custom-set-face-font-family (face family &optional locale tags)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 "Set the font of FACE to FAMILY."
707
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 444
diff changeset
297 (make-face-family face family locale tags))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 (defun custom-face-font-family (face &rest args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 "Return the name of the font family of FACE."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 (let* ((font (apply 'face-font-name face args))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 ;; Gag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 (fontobj (font-create-object font)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 (font-family fontobj)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 ;;;###autoload
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 (defun custom-set-face-update-spec (face display plist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 "Customize the FACE for display types matching DISPLAY, merging
3918
049dc907c17a [xemacs-hg @ 2007-04-22 19:58:27 by aidan]
aidan
parents: 3842
diff changeset
309 in the new items from PLIST."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 (let ((spec (face-spec-update-all-matching (custom-face-get-spec face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 display plist)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 (put face 'customized-face spec)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 (face-spec-set face spec nil '(custom))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 ;;; Initializing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 ;;;###autoload
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 (defun custom-set-faces (&rest args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 "Initialize faces according to user preferences.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 This asociates the setting with the USER theme.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 The arguments should be a list where each entry has the form:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 (FACE SPEC [NOW [COMMENT]])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 SPEC will be stored as the saved value for FACE. If NOW is present
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 and non-nil, FACE will also be created according to SPEC.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 COMMENT is a string comment about FACE.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 See `defface' for the format of SPEC."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 (apply #'custom-theme-set-faces 'user args))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 ;;;###autoload
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 (defun custom-theme-set-faces (theme &rest args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 "Initialize faces according to settings specified by args.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 Records the settings as belonging to THEME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 See `custom-set-faces' for a description of the arguments ARGS."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 (custom-check-theme theme)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 (let ((immediate (get theme 'theme-immediate)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 (while args
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 (let ((entry (car args)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 (if (listp entry)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 (let ((face (nth 0 entry))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 (spec (nth 1 entry))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 (now (nth 2 entry))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 (comment (nth 3 entry)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 (put face 'saved-face spec)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 (custom-push-theme 'theme-face face theme 'set spec)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 (put face 'saved-face-comment comment)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 (when (or now immediate)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 (put face 'force-face (if now 'rogue 'immediate)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 (when (or now immediate (find-face face))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 (put face 'face-comment comment)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 (unless (find-face face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 (make-empty-face face))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 (face-spec-set face spec nil '(custom)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 (setq args (cdr args)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 ;; Old format, a plist of FACE SPEC pairs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 (let ((face (nth 0 args))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 (spec (nth 1 args)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 (put face 'saved-face spec)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 (custom-push-theme 'theme-face face theme 'set spec))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 (setq args (cdr (cdr args))))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 ;;;###autoload
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 (defun custom-theme-face-value (face theme)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 "Return spec of FACE in THEME if the THEME modifies the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 FACE. Nil otherwise."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 (car-safe (custom-theme-value theme (get face 'theme-face))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 (defun custom-theme-reset-internal-face (face to-theme)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 (let ((spec (custom-theme-face-value face to-theme))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 was-in-theme)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 (setq was-in-theme spec)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 (setq spec (or spec (get face 'standard-value)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 (when spec
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 (put face 'save-face was-in-theme)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 (when (or (get face 'force-face) (find-face face))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 (unless (find-face face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 (make-empty-face face))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 (face-spec-set face spec)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 spec))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 ;;;###autoload
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 (defun custom-theme-reset-faces (theme &rest args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 "Reset the value of the face to values previously defined.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
387 Associate this setting with THEME.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 ARGS is a list of lists of the form
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 (face to-theme)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 This means reset face to its value in to-theme."
3842
1c2a46ea1f78 [xemacs-hg @ 2007-02-22 16:53:20 by stephent]
stephent
parents: 3027
diff changeset
394 (custom-check-theme theme)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 (mapc #'(lambda (arg)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 (apply #'custom-theme-reset-internal-face arg)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 (custom-push-theme (car arg) 'theme-face theme 'reset (cadr arg)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 args))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 ;;;###autoload
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 (defun custom-reset-faces (&rest args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 "Reset the value of the face to values previously defined.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 428
diff changeset
403 Associate this setting with the 'user' theme.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
405 ARGS is defined as for `custom-theme-reset-faces'."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 (apply #'custom-theme-reset-faces 'user args))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 ;;; The End.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 ;; cus-face.el ends here