annotate man/lispref/specifiers.texi @ 939:025200a2163c

[xemacs-hg @ 2002-07-31 07:23:39 by michaels] 2002-07-17 Marcus Crestani <crestani@informatik.uni-tuebingen.de> Markus Kaltenbach <makalten@informatik.uni-tuebingen.de> Mike Sperber <mike@xemacs.org> configure flag to turn these changes on: --use-kkcc First we added a dumpable flag to lrecord_implementation. It shows, if the object is dumpable and should be processed by the dumper. * lrecord.h (struct lrecord_implementation): added dumpable flag (MAKE_LRECORD_IMPLEMENTATION): fitted the different makro definitions to the new lrecord_implementation and their calls. Then we changed mark_object, that it no longer needs a mark method for those types that have pdump descritions. * alloc.c: (mark_object): If the object has a description, the new mark algorithm is called, and the object is marked according to its description. Otherwise it uses the mark method like before. These procedures mark objects according to their descriptions. They are modeled on the corresponding pdumper procedures. (mark_with_description): (get_indirect_count): (structure_size): (mark_struct_contents): These procedures still call mark_object, this is needed while there are Lisp_Objects without descriptions left. We added pdump descriptions for many Lisp_Objects: * extents.c: extent_auxiliary_description * database.c: database_description * gui.c: gui_item_description * scrollbar.c: scrollbar_instance_description * toolbar.c: toolbar_button_description * event-stream.c: command_builder_description * mule-charset.c: charset_description * device-msw.c: devmode_description * dialog-msw.c: mswindows_dialog_id_description * eldap.c: ldap_description * postgresql.c: pgconn_description pgresult_description * tooltalk.c: tooltalk_message_description tooltalk_pattern_description * ui-gtk.c: emacs_ffi_description emacs_gtk_object_description * events.c: * events.h: * event-stream.c: * event-Xt.c: * event-gtk.c: * event-tty.c: To write a pdump description for Lisp_Event, we converted every struct in the union event to a Lisp_Object. So we created nine new Lisp_Objects: Lisp_Key_Data, Lisp_Button_Data, Lisp_Motion_Data, Lisp_Process_Data, Lisp_Timeout_Data, Lisp_Eval_Data, Lisp_Misc_User_Data, Lisp_Magic_Data, Lisp_Magic_Eval_Data. We also wrote makro selectors and mutators for the fields of the new designed Lisp_Event and added everywhere these new abstractions. We implemented XD_UNION support in (mark_with_description), so we can describe exspecially console/device specific data with XD_UNION. To describe with XD_UNION, we added a field to these objects, which holds the variant type of the object. This field is initialized in the appendant constructor. The variant is an integer, it has also to be described in an description, if XD_UNION is used. XD_UNION is used in following descriptions: * console.c: console_description (get_console_variant): returns the variant (create_console): added variant initialization * console.h (console_variant): the different console types * console-impl.h (struct console): added enum console_variant contype * device.c: device_description (Fmake_device): added variant initialization * device-impl.h (struct device): added enum console_variant devtype * objects.c: image_instance_description font_instance_description (Fmake_color_instance): added variant initialization (Fmake_font_instance): added variant initialization * objects-impl.h (struct Lisp_Color_Instance): added color_instance_type * objects-impl.h (struct Lisp_Font_Instance): added font_instance_type * process.c: process_description (make_process_internal): added variant initialization * process.h (process_variant): the different process types
author michaels
date Wed, 31 Jul 2002 07:23:39 +0000
parents 576fb035e263
children 9eddcb9548e2
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 @c -*-texinfo-*-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 @c This is part of the XEmacs Lisp Reference Manual.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 @c Copyright (C) 1995, 1996 Ben Wing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 @c See the file lispref.texi for copying conditions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 @setfilename ../../info/specifiers.info
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 @node Specifiers, Faces and Window-System Objects, Extents, top
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 @chapter Specifiers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 @cindex specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 A specifier is an object used to keep track of a property whose value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 may vary depending on the particular situation (e.g. particular buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 displayed in a particular window) that it is used in. The value of many
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 built-in properties, such as the font, foreground, background, and such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 properties of a face and variables such as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 @code{modeline-shadow-thickness} and @code{top-toolbar-height}, is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 actually a specifier object. The specifier object, in turn, is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 ``instanced'' in a particular situation to yield the real value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 of the property in that situation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 @defun specifierp object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 This function returns non-@code{nil} if @var{object} is a specifier.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 @menu
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
25 * Introduction to Specifiers:: Specifiers provide a clean way for
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
26 display and other properties to vary
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
27 (under user control) in a wide variety
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
28 of contexts.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
29 * Specifiers In-Depth:: Gory details about specifier innards.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
30 * Specifier Instancing:: Instancing means obtaining the ``value'' of
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
31 a specifier in a particular context.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
32 * Specifier Types:: Specifiers come in different flavors.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
33 * Adding Specifications:: Specifications control a specifier's ``value''
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
34 by giving conditions under which a
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
35 particular value is valid.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
36 * Retrieving Specifications:: Querying a specifier's specifications.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
37 * Specifier Tag Functions:: Working with specifier tags.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 * Specifier Instancing Functions::
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
39 Functions to instance a specifier.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
40 * Specifier Example:: Making all this stuff clearer.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
41 * Creating Specifiers:: Creating specifiers for your own use.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 * Specifier Validation Functions::
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
43 Validating the components of a specifier.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 * Other Specification Functions::
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
45 Other ways of working with specifications.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 @node Introduction to Specifiers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 @section Introduction to Specifiers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 Sometimes you may want the value of a property to vary depending on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 the context the property is used in. A simple example of this in XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 is buffer-local variables. For example, the variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 @code{modeline-format}, which controls the format of the modeline, can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 have different values depending on the particular buffer being edited.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 The variable has a default value which most modes will use, but a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 specialized package such as Calendar might change the variable so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 as to tailor the modeline to its own purposes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 Other properties (such as those that can be changed by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 @code{modify-frame-parameters} function, for example the color of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 text cursor) can have frame-local values, although it might also make
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 sense for them to have buffer-local values. In other cases, you might
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 want the property to vary depending on the particular window within the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 frame that applies (e.g. the top or bottom window in a split frame), the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 device type that that frame appears on (X or tty), etc. Perhaps you can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 envision some more complicated scenario where you want a particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 value in a specified buffer, another value in all other buffers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 displayed on a particular frame, another value in all other buffers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 displayed in all other frames on any mono (two-color, e.g. black and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 white only) displays, and a default value in all other circumstances.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 A @dfn{specifier} is a generalization of this, allowing a great deal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 of flexibility in controlling exactly what value a property has in which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 circumstances. It is most commonly used for display properties, such as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 an image or the foreground color of a face. As a simple example, you can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 specify that the foreground of the default face be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 blue for a particular buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 green for all other buffers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 As a more complicated example, you could specify that the foreground of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 the default face be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 forest green for all buffers displayed in a particular Emacs window, or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 green if the X server doesn't recognize the color @samp{forest green}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 blue for all buffers displayed in a particular frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 red for all other buffers displayed on a color device
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 white for all other buffers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 @node Specifiers In-Depth
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 @section In-Depth Overview of a Specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 @cindex specification (in a specifier)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 @cindex domain (in a specifier)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 @cindex locale (in a specifier)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 @cindex instantiator (in a specifier)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 @cindex instancing (in a specifier)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 @cindex instance (in a specifier)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 @cindex inst-list (in a specifier)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 @cindex inst-pair (in a specifier)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 @cindex tag (in a specifier)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 @cindex tag set (in a specifier)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 @cindex specifier, specification
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 @cindex specifier, domain
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 @cindex specifier, locale
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 @cindex specifier, instantiator
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 @cindex specifier, instancing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 @cindex specifier, instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 @cindex specifier, inst-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 @cindex specifier, inst-pair
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 @cindex specifier, tag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 @cindex specifier, tag set
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 A specifier object encapsulates a set of @dfn{specifications}, each of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 which says what its value should be if a particular condition applies.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 For example, one specification might be ``The value should be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 darkseagreen2 on X devices'' another might be ``The value should be blue
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 in the *Help* buffer''. In specifier terminology, these conditions are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 called @dfn{locales} and the values are called @dfn{instantiators}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 Given a specifier, a logical question is ``What is its value in a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 particular situation?'' This involves looking through the specifications
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 to see which ones apply to this particular situation, and perhaps
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 preferring one over another if more than one applies. In specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 terminology, a ``particular situation'' is called a @dfn{domain}, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 determining its value in a particular domain is called @dfn{instancing}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 Most of the time, a domain is identified by a particular window. For
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 example, if the redisplay engine is drawing text in the default face in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 a particular window, it retrieves the specifier for the foreground color
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 of the default face and @dfn{instances} it in the domain given by that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 window; in other words, it asks the specifier, ``What is your value in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 this window?''.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 More specifically, a specifier contains a set of @dfn{specifications},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 each of which associates a @dfn{locale} (a window object, a buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 object, a frame object, a device object, or the symbol @code{global})
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 with an @dfn{inst-list}, which is a list of one or more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 @dfn{inst-pairs}. (For each possible locale, there can be at most one
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 specification containing that locale.) Each inst-pair is a cons of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 @dfn{tag set} (an unordered list of zero or more symbols, or @dfn{tags})
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 and an @dfn{instantiator} (the allowed form of this varies depending on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 the type of specifier). In a given specification, there may be more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 than one inst-pair with the same tag set; this is unlike for locales.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 The tag set is used to restrict the sorts of devices over which the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 instantiator is valid and to uniquely identify instantiators added by a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 particular application, so that different applications can work on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 same specifier and not interfere with each other. Each tag can have a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 @dfn{predicate} associated with it, which is a function of one argument
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 (a device) that specifies whether the tag matches that particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 device. (If a tag does not have a predicate, it matches all devices.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 All tags in a tag set must match a device for the associated inst-pair
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 to be instantiable over that device. (A null tag set is perfectly
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 valid.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 The valid device types (normally @code{x}, @code{tty}, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 @code{stream}) and device classes (normally @code{color},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 @code{grayscale}, and @code{mono}) can always be used as tags, and match
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 devices of the associated type or class (@pxref{Consoles and Devices}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 User-defined tags may be defined, with an optional predicate specified.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 An application can create its own tag, use it to mark all its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 instantiators, and be fairly confident that it will not interfere with
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
172 other applications that modify the same specifier---Functions that add
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 a specification to a specifier usually only overwrite existing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 inst-pairs with the same tag set as was given, and a particular tag or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 tag set can be specified when removing instantiators.
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 When a specifier is instanced in a domain, both the locale and the tag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 set can be viewed as specifying necessary conditions that must apply in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 that domain for an instantiator to be considered as a possible result of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 the instancing. More specific locales always override more general
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 locales (thus, there is no particular ordering of the specifications in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 a specifier); however, the tag sets are simply considered in the order
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 that the inst-pairs occur in the specification's inst-list.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 Note also that the actual object that results from the instancing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 (called an @dfn{instance object}) may not be the same as the instantiator
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 from which it was derived. For some specifier types (such as integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 specifiers and boolean specifiers), the instantiator will be returned
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 directly as the instance object. For other types, however, this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 is not the case. For example, for font specifiers, the instantiator
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 is a font-description string and the instance object is a font-instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 object, which describes how the font is displayed on a particular device.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 A font-instance object encapsulates such things as the actual font name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 used to display the font on that device (a font-description string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 under X is usually a wildcard specification that may resolve to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 different font names, with possibly different foundries, widths, etc.,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 on different devices), the extra properties of that font on that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 device, etc. Furthermore, this conversion (called @dfn{instantiation})
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
199 might fail---a font or color might not exist on a particular device,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 for example.
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 @node Specifier Instancing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 @section How a Specifier Is Instanced
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 @cindex fallback (in a specifier)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 @cindex specifier, fallback
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 Instancing of a specifier in a particular window domain proceeds as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 follows:
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 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 First, XEmacs searches for a specification whose locale is the same as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 the window. If that fails, the search is repeated, looking for a locale
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 that is the same as the window's buffer. If that fails, the search is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 repeated using the window's frame, then using the device that frame is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 on. Finally, the specification whose locale is the symbol @code{global}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 (if there is such a specification) is considered.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 The inst-pairs contained in the specification that was found are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 considered in their order in the inst-list, looking for one whose tag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 set matches the device that is derived from the window domain. (The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 tag set is an unordered list of zero or more tag symbols. For all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 tags that have predicates associated with them, the predicate must
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 match the device.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 If a matching tag set is found, the corresponding instantiator is passed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 to the specifier's instantiation method, which is specific to the type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 of the specifier. If it succeeds, the resulting instance object is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 returned as the result of the instancing and the instancing is done.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 Otherwise, the operation continues, looking for another matching
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 inst-pair in the current specification.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 When there are no more inst-pairs to be considered in the current
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 specification, the search starts over, looking for another specification
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 as in the first step above.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 If all specifications are exhausted and no instance object can be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 derived, the instancing fails. (Actually, this is not completely true.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 Some specifier objects for built-in properties have a @dfn{fallback}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 value, which is either an inst-list or another specifier object, that is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 consulted if the instancing is about to fail. If it is an inst-list,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 the searching proceeds using the inst-pairs in that list. If it is a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 specifier, the entire instancing starts over using that specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 instead of the given one. Fallback values are set by the C code and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 cannot be modified, except perhaps indirectly, using any Lisp functions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 The purpose of them is to supply some values to make sure that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 instancing of built-in properties can't fail and to implement some basic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 specifier inheritance, such as the fact that faces inherit their
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 properties from the @code{default} face.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 It is also possible to instance a specifier over a frame domain or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 device domain instead of over a window domain. The C code, for example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 instances the @code{top-toolbar-height} variable over a frame domain in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 order to determine the height of a frame's top toolbar. Instancing over
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 a frame or device is similar to instancing over a window except that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 specifications for locales that cannot be derived from the domain are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 ignored. Specifically, instancing over a frame looks first for frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 locales, then device locales, then the @code{global} locale. Instancing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 over a device domain looks only for device locales and the @code{global}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 locale.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 @node Specifier Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 @section Specifier Types
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 There are various different types of specifiers. The type of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 specifier controls what sorts of instantiators are valid, how an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 instantiator is instantiated, etc. Here is a list of built-in specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 types:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 @table @code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 @item boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 The valid instantiators are the symbols @code{t} and @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 Instance objects are the same as instantiators so no special
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 instantiation function is needed.
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 @item integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 The valid instantiators are integers. Instance objects are the same as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 instantiators so no special instantiation function is needed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 @code{modeline-shadow-thickness} is an example of an integer specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 (negative thicknesses indicate that the shadow is drawn recessed instead
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 of raised).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 @item natnum
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 The valid instantiators are natnums (non-negative integers). Instance
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 objects are the same as instantiators so no special instantiation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 function is needed. Natnum specifiers are used for dimension variables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 such as @code{top-toolbar-height}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 @item generic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 All Lisp objects are valid instantiators. Instance objects are the same
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 as instantiators so no special instantiation function is needed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 @item font
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 The valid instantiators are strings describing fonts or vectors
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 indicating inheritance from the font of some face. Instance objects are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 font-instance objects, which are specific to a particular device. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 instantiation method for font specifiers can fail, unlike for integer,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 natnum, boolean, and generic specifiers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 @item color
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 The valid instantiators are strings describing colors or vectors
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 indicating inheritance from the foreground or background of some face.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 Instance objects are color-instance objects, which are specific to a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 particular device. The instantiation method for color specifiers can fail,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 as for font specifiers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 @item image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 Images are perhaps the most complicated type of built-in specifier. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 valid instantiators are strings (a filename, inline data for a pixmap,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 or text to be displayed in a text glyph) or vectors describing inline
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 data of various sorts or indicating inheritance from the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 background-pixmap property of some face. Instance objects are either
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 strings (for text images), image-instance objects (for pixmap images),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 or subwindow objects (for subwindow images). The instantiation method
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 for image specifiers can fail, as for font and color specifiers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 @item face-boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 The valid instantiators are the symbols @code{t} and @code{nil} and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 vectors indicating inheritance from a boolean property of some face.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 Specifiers of this sort are used for all of the built-in boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 properties of faces. Instance objects are either the symbol @code{t}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 or the symbol @code{nil}.
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 @item toolbar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 The valid instantiators are toolbar descriptors, which are lists
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 of toolbar-button descriptors (each of which is a vector of two
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 or four elements). @xref{Toolbar}, for more information.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 Color and font instance objects can also be used in turn as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 instantiators for a new color or font instance object. Since these
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 instance objects are device-specific, the instantiator can be used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 directly as the new instance object, but only if they are of the same
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 device. If the devices differ, the base color or font of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 instantiating object is effectively used instead as the instantiator.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 @xref{Faces and Window-System Objects}, for more information on fonts,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 colors, and face-boolean specifiers. @xref{Glyphs}, for more information
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 about image specifiers. @xref{Toolbar}, for more information on toolbar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 specifiers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 @defun specifier-type specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 This function returns the type of @var{specifier}. The returned value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 will be a symbol: one of @code{integer}, @code{boolean}, etc., as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 listed in the above table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 Functions are also provided to query whether an object is a particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 kind of specifier:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 @defun boolean-specifier-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 This function returns non-@code{nil} if @var{object} is a boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 specifier.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 @defun integer-specifier-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 This function returns non-@code{nil} if @var{object} is an integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 specifier.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 @defun natnum-specifier-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 This function returns non-@code{nil} if @var{object} is a natnum
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 specifier.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 @defun generic-specifier-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 This function returns non-@code{nil} if @var{object} is a generic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 specifier.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 @defun face-boolean-specifier-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 This function returns non-@code{nil} if @var{object} is a face-boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 specifier.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 @defun toolbar-specifier-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 This function returns non-@code{nil} if @var{object} is a toolbar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 specifier.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 @defun font-specifier-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 This function returns non-@code{nil} if @var{object} is a font
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 specifier.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 @defun color-specifier-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 This function returns non-@code{nil} if @var{object} is a color
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 specifier.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 @defun image-specifier-p object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 This function returns non-@code{nil} if @var{object} is an image
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 specifier.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 @node Adding Specifications
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 @section Adding specifications to a Specifier
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 @defun add-spec-to-specifier specifier instantiator &optional locale tag-set how-to-add
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 This function adds a specification to @var{specifier}. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 specification maps from @var{locale} (which should be a window, buffer,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 frame, device, or the symbol @code{global}, and defaults to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 @code{global}) to @var{instantiator}, whose allowed values depend on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 type of the specifier. Optional argument @var{tag-set} limits the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 instantiator to apply only to the specified tag set, which should be a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 list of tags all of which must match the device being instantiated over
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 (tags are a device type, a device class, or tags defined with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 @code{define-specifier-tag}). Specifying a single symbol for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 @var{tag-set} is equivalent to specifying a one-element list containing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 that symbol. Optional argument @var{how-to-add} specifies what to do if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 there are already specifications in the specifier. It should be one of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 @table @code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 @item prepend
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 Put at the beginning of the current list of instantiators for @var{locale}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 @item append
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 Add to the end of the current list of instantiators for @var{locale}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 @item remove-tag-set-prepend
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 This is the default. Remove any existing instantiators whose tag set is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 the same as @var{tag-set}; then put the new instantiator at the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 beginning of the current list.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 @item remove-tag-set-append
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 Remove any existing instantiators whose tag set is the same as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 @var{tag-set}; then put the new instantiator at the end of the current
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 list.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 @item remove-locale
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 Remove all previous instantiators for this locale before adding the new
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 spec.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 @item remove-locale-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 Remove all specifications for all locales of the same type as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 @var{locale} (this includes @var{locale} itself) before adding the new
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 spec.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 @item remove-all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 Remove all specifications from the specifier before adding the new spec.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 @code{remove-tag-set-prepend} is the default.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 You can retrieve the specifications for a particular locale or locale type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 with the function @code{specifier-spec-list} or @code{specifier-specs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 @defun add-spec-list-to-specifier specifier spec-list &optional how-to-add
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 This function adds a @dfn{spec-list} (a list of specifications) to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 @var{specifier}. The format of a spec-list is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 @code{((@var{locale} (@var{tag-set} . @var{instantiator}) ...) ...)}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 where
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 @var{locale} := a window, a buffer, a frame, a device, or @code{global}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 @var{tag-set} := an unordered list of zero or more @var{tags}, each of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 which is a symbol
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 @var{tag} := a device class (@pxref{Consoles and Devices}), a device type,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 or a tag defined with @code{define-specifier-tag}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 @var{instantiator} := format determined by the type of specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 The pair @code{(@var{tag-set} . @var{instantiator})} is called an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 @dfn{inst-pair}. A list of inst-pairs is called an @dfn{inst-list}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 The pair @code{(@var{locale} . @var{inst-list})} is called a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 @dfn{specification}. A spec-list, then, can be viewed as a list of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 specifications.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 @var{how-to-add} specifies how to combine the new specifications with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 the existing ones, and has the same semantics as for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 @code{add-spec-to-specifier}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 In many circumstances, the higher-level function @code{set-specifier} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 more convenient and should be used instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
481 @defspec let-specifier specifier-list &rest body
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 This special form temporarily adds specifications to specifiers,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 evaluates forms in @var{body} and restores the specifiers to their
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 previous states. The specifiers and their temporary specifications are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 listed in @var{specifier-list}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 The format of @var{specifier-list} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 ((@var{specifier} @var{value} &optional @var{locale} @var{tag-set} @var{how-to-add}) ...)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 @var{specifier} is the specifier to be temporarily modified.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 @var{value} is the instantiator to be temporarily added to specifier in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 @var{locale}. @var{locale}, @var{tag-set} and @var{how-to-add} have the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 same meaning as in @code{add-spec-to-specifier}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 This special form is implemented as a macro; the code resulting from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 macro expansion will add specifications to specifiers using
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 @code{add-spec-to-specifier}. After forms in @var{body} are evaluated,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 the temporary specifications are removed and old specifier spec-lists
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 are restored.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 @var{locale}, @var{tag-set} and @var{how-to-add} may be omitted, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 default to @code{nil}. The value of the last form in @var{body} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 NOTE: If you want the specifier's instance to change in all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 circumstances, use @code{(selected-window)} as the @var{locale}. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 @var{locale} is @code{nil} or omitted, it defaults to @code{global}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 The following example removes the 3D modeline effect in the currently
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 selected window for the duration of a second:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 (let-specifier ((modeline-shadow-thickness 0 (selected-window)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 (sit-for 1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 @end example
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
519 @end defspec
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
521 @defun set-specifier specifier value &optional locale tag-set how-to-add
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 This function adds some specifications to @var{specifier}. @var{value}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 can be a single instantiator or tagged instantiator (added as a global
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 specification), a list of tagged and/or untagged instantiators (added as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 a global specification), a cons of a locale and instantiator or locale
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 and instantiator list, a list of such conses, or nearly any other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 reasonable form. More specifically, @var{value} can be anything
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 accepted by @code{canonicalize-spec-list}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
530 @var{locale}, @var{tag-set}, and @var{how-to-add} are the same as in
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
531 @code{add-spec-to-specifier}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 Note that @code{set-specifier} is exactly complementary to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 @code{specifier-specs} except in the case where @var{specifier} has no
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 specs at all in it but @code{nil} is a valid instantiator (in that case,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 @code{specifier-specs} will return @code{nil} (meaning no specs) and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 @code{set-specifier} will interpret the @code{nil} as meaning ``I'm
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 adding a global instantiator and its value is @code{nil}''), or in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 strange cases where there is an ambiguity between a spec-list and an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 inst-list, etc. (The built-in specifier types are designed in such a way
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 as to avoid any such ambiguities.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 If you want to work with spec-lists, you should probably not use these
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 functions, but should use the lower-level functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 @code{specifier-spec-list} and @code{add-spec-list-to-specifier}. These
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 functions always work with fully-qualified spec-lists; thus, there is no
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 ambiguity.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
548 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
550 @defun canonicalize-inst-pair inst-pair specifier-type &optional noerror
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551 This function canonicalizes the given @var{inst-pair}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 @var{specifier-type} specifies the type of specifier that this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 @var{spec-list} will be used for.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
555
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556 Canonicalizing means converting to the full form for an inst-pair, i.e.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 @code{(@var{tag-set} . @var{instantiator})}. A single, untagged
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 instantiator is given a tag set of @code{nil} (the empty set), and a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 single tag is converted into a tag set consisting only of that tag.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 If @var{noerror} is non-@code{nil}, signal an error if the inst-pair is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 invalid; otherwise return @code{t}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 @defun canonicalize-inst-list inst-list specifier-type &optional noerror
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566 This function canonicalizes the given @var{inst-list} (a list of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 inst-pairs).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 @var{specifier-type} specifies the type of specifier that this @var{inst-list}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570 will be used for.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572 Canonicalizing means converting to the full form for an inst-list, i.e.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573 @code{((@var{tag-set} . @var{instantiator}) ...)}. This function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 accepts a single inst-pair or any abbreviation thereof or a list of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575 (possibly abbreviated) inst-pairs. (See @code{canonicalize-inst-pair}.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 If @var{noerror} is non-@code{nil}, signal an error if the inst-list is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 invalid; otherwise return @code{t}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 @defun canonicalize-spec spec specifier-type &optional noerror
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 This function canonicalizes the given @var{spec} (a specification).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 @var{specifier-type} specifies the type of specifier that this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 @var{spec-list} will be used for.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 Canonicalizing means converting to the full form for a spec, i.e.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 @code{(@var{locale} (@var{tag-set} . @var{instantiator}) ...)}. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 function accepts a possibly abbreviated inst-list or a cons of a locale
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 and a possibly abbreviated inst-list. (See
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 @code{canonicalize-inst-list}.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 If @var{noerror} is @code{nil}, signal an error if the specification is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594 invalid; otherwise return @code{t}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 @defun canonicalize-spec-list spec-list specifier-type &optional noerror
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598 This function canonicalizes the given @var{spec-list} (a list of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 specifications).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 @var{specifier-type} specifies the type of specifier that this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 @var{spec-list} will be used for.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 Canonicalizing means converting to the full form for a spec-list, i.e.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605 @code{((@var{locale} (@var{tag-set} . @var{instantiator}) ...) ...)}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 This function accepts a possibly abbreviated specification or a list of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 such things. (See @code{canonicalize-spec}.) This is the function used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 to convert spec-lists accepted by @code{set-specifier} and such into a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609 form suitable for @code{add-spec-list-to-specifier}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 This function tries extremely hard to resolve any ambiguities,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612 and the built-in specifier types (font, image, toolbar, etc.) are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613 designed so that there won't be any ambiguities.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615 If @var{noerror} is @code{nil}, signal an error if the spec-list is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616 invalid; otherwise return @code{t}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
619 @node Retrieving Specifications
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620 @section Retrieving the Specifications from a Specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 @defun specifier-spec-list specifier &optional locale tag-set exact-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623 This function returns the spec-list of specifications for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624 @var{specifier} in @var{locale}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626 If @var{locale} is a particular locale (a window, buffer, frame, device,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
627 or the symbol @code{global}), a spec-list consisting of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628 specification for that locale will be returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
630 If @var{locale} is a locale type (i.e. one of the symbols @code{window},
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 @code{buffer}, @code{frame}, or @code{device}), a spec-list of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 specifications for all locales of that type will be returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 If @var{locale} is @code{nil} or the symbol @code{all}, a spec-list of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 all specifications in @var{specifier} will be returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 @var{locale} can also be a list of locales, locale types, and/or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 @code{all}; the result is as if @code{specifier-spec-list} were called
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 on each element of the list and the results concatenated together.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 Only instantiators where @var{tag-set} (a list of zero or more tags) is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 a subset of (or possibly equal to) the instantiator's tag set are
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
643 returned. (The default value of @code{nil} is a subset of all tag sets,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644 so in this case no instantiators will be screened out.) If @var{exact-p}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 is non-@code{nil}, however, @var{tag-set} must be equal to an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 instantiator's tag set for the instantiator to be returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 @defun specifier-specs specifier &optional locale tag-set exact-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 This function returns the specification(s) for @var{specifier} in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 @var{locale}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 If @var{locale} is a single locale or is a list of one element
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 containing a single locale, then a ``short form'' of the instantiators
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 for that locale will be returned. Otherwise, this function is identical
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 to @code{specifier-spec-list}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 The ``short form'' is designed for readability and not for ease of use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 in Lisp programs, and is as follows:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 @enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 If there is only one instantiator, then an inst-pair (i.e. cons of tag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 and instantiator) will be returned; otherwise a list of inst-pairs will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 be returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 For each inst-pair returned, if the instantiator's tag is @code{any},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 the tag will be removed and the instantiator itself will be returned
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 instead of the inst-pair.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 If there is only one instantiator, its value is @code{nil}, and its tag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 is @code{any}, a one-element list containing @code{nil} will be returned
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673 rather than just @code{nil}, to distinguish this case from there being
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 no instantiators at all.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 @end enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679 @defun specifier-fallback specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 This function returns the fallback value for @var{specifier}. Fallback
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 values are provided by the C code for certain built-in specifiers to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 make sure that instancing won't fail even if all specs are removed from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 the specifier, or to implement simple inheritance behavior (e.g. this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 method is used to ensure that faces other than @code{default} inherit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 their attributes from @code{default}). By design, you cannot change the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686 fallback value, and specifiers created with @code{make-specifier} will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687 never have a fallback (although a similar, Lisp-accessible capability
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688 may be provided in the future to allow for inheritance).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690 The fallback value will be an inst-list that is instanced like
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
691 any other inst-list, a specifier of the same type as @var{specifier}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
692 (results in inheritance), or @code{nil} for no fallback.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694 When you instance a specifier, you can explicitly request that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695 fallback not be consulted. (The C code does this, for example, when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696 merging faces.) See @code{specifier-instance}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
698
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699 @node Specifier Tag Functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 @section Working With Specifier Tags
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 A specifier tag set is an entity that is attached to an instantiator
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703 and can be used to restrict the scope of that instantiator to a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704 particular device class or device type and/or to mark instantiators
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705 added by a particular package so that they can be later removed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
707 A specifier tag set consists of a list of zero or more specifier tags,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708 each of which is a symbol that is recognized by XEmacs as a tag. (The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709 valid device types and device classes are always tags, as are any tags
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
710 defined by @code{define-specifier-tag}.) It is called a ``tag set'' (as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
711 opposed to a list) because the order of the tags or the number of times
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
712 a particular tag occurs does not matter.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
713
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
714 Each tag has a predicate associated with it, which specifies whether
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
715 that tag applies to a particular device. The tags which are device
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
716 types and classes match devices of that type or class. User-defined
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717 tags can have any predicate, or none (meaning that all devices match).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
718 When attempting to instance a specifier, a particular instantiator is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
719 only considered if the device of the domain being instanced over matches
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
720 all tags in the tag set attached to that instantiator.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
721
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
722 Most of the time, a tag set is not specified, and the instantiator gets
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
723 a null tag set, which matches all devices.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
724
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
725 @defun valid-specifier-tag-p tag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
726 This function returns non-@code{nil} if @var{tag} is a valid specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
727 tag.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
728 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
729
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
730 @defun valid-specifier-tag-set-p tag-set
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
731 This function returns non-@code{nil} if @var{tag-set} is a valid
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
732 specifier tag set.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
733 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
734
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
735 @defun canonicalize-tag-set tag-set
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
736 This function canonicalizes the given tag set. Two canonicalized tag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
737 sets can be compared with @code{equal} to see if they represent the same
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
738 tag set. (Specifically, canonicalizing involves sorting by symbol name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
739 and removing duplicates.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
740 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
741
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
742 @defun device-matches-specifier-tag-set-p device tag-set
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
743 This function returns non-@code{nil} if @var{device} matches specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
744 tag set @var{tag-set}. This means that @var{device} matches each tag in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
745 the tag set.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
746 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
747
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
748 @defun define-specifier-tag tag &optional predicate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
749 This function defines a new specifier tag. If @var{predicate} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
750 specified, it should be a function of one argument (a device) that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
751 specifies whether the tag matches that particular device. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
752 @var{predicate} is omitted, the tag matches all devices.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
753
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
754 You can redefine an existing user-defined specifier tag. However, you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
755 cannot redefine the built-in specifier tags (the device types and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
756 classes) or the symbols @code{nil}, @code{t}, @code{all}, or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
757 @code{global}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
758 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
759
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
760 @defun device-matching-specifier-tag-list &optional device
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
761 This function returns a list of all specifier tags matching
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
762 @var{device}. @var{device} defaults to the selected device if omitted.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
763 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
764
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
765 @defun specifier-tag-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
766 This function returns a list of all currently-defined specifier tags.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
767 This includes the built-in ones (the device types and classes).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
768 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
770 @defun specifier-tag-predicate tag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 This function returns the predicate for the given specifier tag.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774 @node Specifier Instancing Functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
775 @section Functions for Instancing a Specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
776
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
777 @defun specifier-instance specifier &optional domain default no-fallback
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
778 This function instantiates @var{specifier} (return its value) in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
779 @var{domain}. If no instance can be generated for this domain, return
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
780 @var{default}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
781
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
782 @var{domain} should be a window, frame, or device. Other values that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783 are legal as a locale (e.g. a buffer) are not valid as a domain because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
784 they do not provide enough information to identify a particular device
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
785 (see @code{valid-specifier-domain-p}). @var{domain} defaults to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
786 selected window if omitted.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
787
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
788 @dfn{Instantiating} a specifier in a particular domain means determining
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
789 the specifier's ``value'' in that domain. This is accomplished by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
790 searching through the specifications in the specifier that correspond to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
791 all locales that can be derived from the given domain, from specific to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
792 general. In most cases, the domain is an Emacs window. In that case
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
793 specifications are searched for as follows:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
794
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
795 @enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
796 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
797 A specification whose locale is the window itself;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
798 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
799 A specification whose locale is the window's buffer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
800 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
801 A specification whose locale is the window's frame;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
802 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
803 A specification whose locale is the window's frame's device;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
804 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
805 A specification whose locale is the symbol @code{global}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
806 @end enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
807
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
808 If all of those fail, then the C-code-provided fallback value for this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
809 specifier is consulted (see @code{specifier-fallback}). If it is an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
810 inst-list, then this function attempts to instantiate that list just as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
811 when a specification is located in the first five steps above. If the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812 fallback is a specifier, @code{specifier-instance} is called recursively
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813 on this specifier and the return value used. Note, however, that if the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
814 optional argument @var{no-fallback} is non-@code{nil}, the fallback
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
815 value will not be consulted.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
816
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817 Note that there may be more than one specification matching a particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
818 locale; all such specifications are considered before looking for any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
819 specifications for more general locales. Any particular specification
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820 that is found may be rejected because it is tagged to a particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821 device class (e.g. @code{color}) or device type (e.g. @code{x}) or both
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
822 and the device for the given domain does not match this, or because the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
823 specification is not valid for the device of the given domain (e.g. the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
824 font or color name does not exist for this particular X server).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
825
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826 The returned value is dependent on the type of specifier. For example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
827 for a font specifier (as returned by the @code{face-font} function), the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
828 returned value will be a font-instance object. For images, the returned
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
829 value will be a string, pixmap, or subwindow.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
830 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
831
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
832 @defun specifier-instance-from-inst-list specifier domain inst-list &optional default
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
833 This function attempts to convert a particular inst-list into an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
834 instance. This attempts to instantiate @var{inst-list} in the given
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
835 @var{domain}, as if @var{inst-list} existed in a specification in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
836 @var{specifier}. If the instantiation fails, @var{default} is returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
837 In most circumstances, you should not use this function; use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
838 @code{specifier-instance} instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
839 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
840
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
841 @node Specifier Example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842 @section Example of Specifier Usage
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
843
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
844 Now let us present an example to clarify the theoretical discussions we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
845 have been through. In this example, we will use the general specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
846 functions for clarity. Keep in mind that many types of specifiers, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
847 some other types of objects that are associated with specifiers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
848 (e.g. faces), provide convenience functions making it easier to work
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
849 with objects of that type.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
850
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
851 Let us consider the background color of the default face. A specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
852 is used to specify how that color will appear in different domains.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
853 First, let's retrieve the specifier:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
854
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
855 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
856 (setq sp (face-property 'default 'background))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
857 @result{} #<color-specifier 0x3da>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
858 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
859
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
860 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
861 (specifier-specs sp)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
862 @result{} ((#<buffer "device.c"> (nil . "forest green"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
863 (#<window on "Makefile" 0x8a2b> (nil . "hot pink"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
864 (#<x-frame "emacs" 0x4ac> (nil . "puke orange")
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
865 (nil . "moccasin"))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
866 (#<x-frame "VM" 0x4ac> (nil . "magenta"))
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
867 (global ((tty) . "cyan") (nil . "white"))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
868 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
869 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
870
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
871 Then, say we want to determine what the background color of the default
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
872 face is for the window currently displaying the buffer @samp{*scratch*}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
873 We call
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
874
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
875 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
876 (get-buffer-window "*scratch*")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
877 @result{} #<window on "*scratch*" 0x4ad>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
878 (window-frame (get-buffer-window "*scratch*"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
879 @result{} #<x-frame "emacs" 0x4ac>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
880 (specifier-instance sp (get-buffer-window "*scratch*"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
881 @result{} #<color-instance moccasin 47=(FFFF,E4E4,B5B5) 0x6309>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
882 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
883
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
884 Note that we passed a window to @code{specifier-instance}, not a buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
885 We cannot pass a buffer because a buffer by itself does not provide enough
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
886 information. The buffer might not be displayed anywhere at all, or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
887 could be displayed in many different frames on different devices.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
888
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
889 The result is arrived at like this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
890
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
891 @enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
892 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
893 First, we look for a specification matching the buffer displayed in the
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
894 window, i.e. @samp{*scratch*}. There are none, so we proceed.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
895 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
896 Then, we look for a specification matching the window itself. Again, there
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
897 are none.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
898 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
899 Then, we look for a specification matching the window's frame. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
900 specification @code{(#<x-frame "emacs" 0x4ac> . "puke orange")} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
901 found. We call the instantiation method for colors, passing it the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
902 locale we were searching over (i.e. the window, in this case) and the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
903 instantiator (@samp{"puke orange"}). However, the particular device
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
904 which this window is on (let's say it's an X connection) doesn't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
905 recognize the color @samp{"puke orange"}, so the specification is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
906 rejected.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
907 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
908 So we continue looking for a specification matching the window's frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
909 We find @samp{(#<x-frame "emacs" 0x4ac> . "moccasin")}. Again, we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
910 call the instantiation method for colors. This time, the X server
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
911 our window is on recognizes the color @samp{moccasin}, and so the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
912 instantiation method succeeds and returns a color instance.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
913 @end enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
914
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
915 @node Creating Specifiers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
916 @section Creating New Specifier Objects
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
917
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
918 @defun make-specifier type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
919 This function creates a new specifier.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
920
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
921 A specifier is an object that can be used to keep track of a property
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
922 whose value can be per-buffer, per-window, per-frame, or per-device,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
923 and can further be restricted to a particular device-type or device-class.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
924 Specifiers are used, for example, for the various built-in properties of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
925 face; this allows a face to have different values in different frames,
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
926 buffers, etc. For more information, see @code{specifier-instance},
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
927 @code{specifier-specs}, and @code{add-spec-to-specifier}; or, for a detailed
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
928 description of specifiers, including how they are instantiated over a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
929 particular domain (i.e. how their value in that domain is determined),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
930 see the chapter on specifiers in the XEmacs Lisp Reference Manual.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
931
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
932 @var{type} specifies the particular type of specifier, and should be one
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
933 of the symbols @code{generic}, @code{integer}, @code{natnum},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
934 @code{boolean}, @code{color}, @code{font}, @code{image},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
935 @code{face-boolean}, or @code{toolbar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
936
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
937 For more information on particular types of specifiers, see the
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
938 functions @code{make-generic-specifier}, @code{make-integer-specifier},
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
939 @code{make-natnum-specifier}, @code{make-boolean-specifier},
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
940 @code{make-color-specifier}, @code{make-font-specifier},
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
941 @code{make-image-specifier}, @code{make-face-boolean-specifier}, and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
942 @code{make-toolbar-specifier}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
943 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
944
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
945 @defun make-specifier-and-init type spec-list &optional dont-canonicalize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
946 This function creates and initialize a new specifier.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
947
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
948 This is a front-end onto @code{make-specifier} that allows you to create
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
949 a specifier and add specs to it at the same time. @var{type} specifies
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
950 the specifier type. @var{spec-list} supplies the specification(s) to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
951 added to the specifier. Normally, almost any reasonable abbreviation of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
952 the full spec-list form is accepted, and is converted to the full form;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
953 however, if optional argument @var{dont-canonicalize} is non-@code{nil},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
954 this conversion is not performed, and the @var{spec-list} must already
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
955 be in full form. See @code{canonicalize-spec-list}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
956 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
957
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
958 @defun make-integer-specifier spec-list
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
959
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
960 Return a new @code{integer} specifier object with the given
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
961 specification list. @var{spec-list} can be a list of specifications
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
962 (each of which is a cons of a locale and a list of instantiators), a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
963 single instantiator, or a list of instantiators.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
964
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
965 Valid instantiators for integer specifiers are integers.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
966 @end defun
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
967
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
968 @defun make-boolean-specifier spec-list
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
969
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
970 Return a new @code{boolean} specifier object with the given
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
971 specification list. @var{spec-list} can be a list of specifications
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
972 (each of which is a cons of a locale and a list of instantiators), a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
973 single instantiator, or a list of instantiators.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
974
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
975 Valid instantiators for boolean specifiers are @code{t} and @code{nil}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
976 @end defun
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
977
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
978 @defun make-natnum-specifier spec-list
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
979
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
980 Return a new @code{natnum} specifier object with the given specification
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
981 list. @var{spec-list} can be a list of specifications (each of which is
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
982 a cons of a locale and a list of instantiators), a single instantiator,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
983 or a list of instantiators.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
984
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
985 Valid instantiators for natnum specifiers are non-negative integers.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
986 @end defun
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
987
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
988 @defun make-generic-specifier spec-list
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
989
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
990 Return a new @code{generic} specifier object with the given
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
991 specification list. @var{spec-list} can be a list of specifications
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
992 (each of which is a cons of a locale and a list of instantiators), a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
993 single instantiator, or a list of instantiators.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
994
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
995 Valid instantiators for generic specifiers are all Lisp values. They
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
996 are returned back unchanged when a specifier is instantiated.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
997 @end defun
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
998
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
999 @defun make-display-table-specifier spec-list
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1000
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1001 Return a new @code{display-table} specifier object with the given spec
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1002 list. @var{spec-list} can be a list of specifications (each of which is
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1003 a cons of a locale and a list of instantiators), a single instantiator,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1004 or a list of instantiators.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1005
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1006 Valid instantiators for display-table specifiers are described in detail
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1007 in the doc string for @code{current-display-table} (@pxref{Active
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1008 Display Table}).
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1009 @end defun
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1010
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1011 @node Specifier Validation Functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1012 @section Functions for Checking the Validity of Specifier Components
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1013
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1014 @defun valid-specifier-domain-p domain
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1015 This function returns non-@code{nil} if @var{domain} is a valid
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1016 specifier domain. A domain is used to instance a specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1017 (i.e. determine the specifier's value in that domain). Valid domains
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1018 are a window, frame, or device. (@code{nil} is not valid.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1019 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1020
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1021 @defun valid-specifier-locale-p locale
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1022 This function returns non-@code{nil} if @var{locale} is a valid
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1023 specifier locale. Valid locales are a device, a frame, a window, a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1024 buffer, and @code{global}. (@code{nil} is not valid.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1025 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1026
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1027 @defun valid-specifier-locale-type-p locale-type
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1028 Given a specifier @var{locale-type}, this function returns non-@code{nil} if it
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1029 is valid. Valid locale types are the symbols @code{global},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1030 @code{device}, @code{frame}, @code{window}, and @code{buffer}. (Note,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1031 however, that in functions that accept either a locale or a locale type,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1032 @code{global} is considered an individual locale.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1033 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1034
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1035 @defun valid-specifier-type-p specifier-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1036 Given a @var{specifier-type}, this function returns non-@code{nil} if it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1037 is valid. Valid types are @code{generic}, @code{integer},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1038 @code{boolean}, @code{color}, @code{font}, @code{image},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1039 @code{face-boolean}, and @code{toolbar}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1040 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1041
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1042 @defun valid-specifier-tag-p tag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1043 This function returns non-@code{nil} if @var{tag} is a valid specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1044 tag.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1045 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1046
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1047 @defun valid-instantiator-p instantiator specifier-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1048 This function returns non-@code{nil} if @var{instantiator} is valid for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1049 @var{specifier-type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1050 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1051
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1052 @defun valid-inst-list-p inst-list type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1053 This function returns non-@code{nil} if @var{inst-list} is valid for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1054 specifier type @var{type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1055 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1056
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1057 @defun valid-spec-list-p spec-list type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1058 This function returns non-@code{nil} if @var{spec-list} is valid for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1059 specifier type @var{type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1060 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1061
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1062 @defun check-valid-instantiator instantiator specifier-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1063 This function signals an error if @var{instantiator} is invalid for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1064 @var{specifier-type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1065 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1066
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1067 @defun check-valid-inst-list inst-list type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1068 This function signals an error if @var{inst-list} is invalid for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1069 specifier type @var{type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1070 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1071
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1072 @defun check-valid-spec-list spec-list type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1073 This function signals an error if @var{spec-list} is invalid for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1074 specifier type @var{type}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1075 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1076
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1077 @node Other Specification Functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1078 @section Other Functions for Working with Specifications in a Specifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1079
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1080 @defun copy-specifier specifier &optional dest locale tag-set exact-p how-to-add
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1081 This function copies @var{specifier} to @var{dest}, or creates a new one
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1082 if @var{dest} is @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1083
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1084 If @var{dest} is @code{nil} or omitted, a new specifier will be created
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1085 and the specifications copied into it. Otherwise, the specifications
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1086 will be copied into the existing specifier in @var{dest}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1087
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1088 If @var{locale} is @code{nil} or the symbol @code{all}, all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1089 specifications will be copied. If @var{locale} is a particular locale,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1090 the specification for that particular locale will be copied. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1091 @var{locale} is a locale type, the specifications for all locales of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1092 that type will be copied. @var{locale} can also be a list of locales,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093 locale types, and/or @code{all}; this is equivalent to calling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1094 @code{copy-specifier} for each of the elements of the list. See
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1095 @code{specifier-spec-list} for more information about @var{locale}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1096
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1097 Only instantiators where @var{tag-set} (a list of zero or more tags) is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1098 a subset of (or possibly equal to) the instantiator's tag set are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1099 copied. (The default value of @code{nil} is a subset of all tag sets,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1100 so in this case no instantiators will be screened out.) If @var{exact-p}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1101 is non-@code{nil}, however, @var{tag-set} must be equal to an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1102 instantiator's tag set for the instantiator to be copied.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1103
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1104 Optional argument @var{how-to-add} specifies what to do with existing
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1105 specifications in @var{dest}. If @code{nil}, then whichever locales or locale
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1106 types are copied will first be completely erased in @var{dest}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1107 Otherwise, it is the same as in @code{add-spec-to-specifier}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1108 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1109
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1110 @defun remove-specifier specifier &optional locale tag-set exact-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1111 This function removes specification(s) for @var{specifier}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1112
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1113 If @var{locale} is a particular locale (a buffer, window, frame, device,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1114 or the symbol @code{global}), the specification for that locale will be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1115 removed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1116
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1117 If instead, @var{locale} is a locale type (i.e. a symbol @code{buffer},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1118 @code{window}, @code{frame}, or @code{device}), the specifications for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1119 all locales of that type will be removed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1120
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1121 If @var{locale} is @code{nil} or the symbol @code{all}, all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1122 specifications will be removed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1123
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1124 @var{locale} can also be a list of locales, locale types, and/or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1125 @code{all}; this is equivalent to calling @code{remove-specifier} for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1126 each of the elements in the list.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1127
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1128 Only instantiators where @var{tag-set} (a list of zero or more tags) is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1129 a subset of (or possibly equal to) the instantiator's tag set are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1130 removed. (The default value of @code{nil} is a subset of all tag sets,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1131 so in this case no instantiators will be screened out.) If @var{exact-p}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1132 is non-@code{nil}, however, @var{tag-set} must be equal to an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1133 instantiator's tag set for the instantiator to be removed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1134 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1135
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1136 @defun map-specifier specifier func &optional locale maparg
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1137 This function applies @var{func} to the specification(s) for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1138 @var{locale} in @var{specifier}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1139
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1140 If @var{locale} is a locale, @var{func} will be called for that locale.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1141 If @var{locale} is a locale type, @var{func} will be mapped over all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1142 locales of that type. If @var{locale} is @code{nil} or the symbol
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1143 @code{all}, @var{func} will be mapped over all locales in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1144 @var{specifier}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1145
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1146 @var{func} is called with four arguments: the @var{specifier}, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1147 locale being mapped over, the inst-list for that locale, and the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1148 optional @var{maparg}. If any invocation of @var{func} returns
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1149 non-@code{nil}, the mapping will stop and the returned value becomes the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1150 value returned from @code{map-specifier}. Otherwise,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1151 @code{map-specifier} returns @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1152 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1153
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1154 @defun specifier-locale-type-from-locale locale
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1155 Given a specifier @var{locale}, this function returns its type.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1156 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1157