Contents in 1999-06-04-13 of release-21-2.
[chise/xemacs-chise.git.1] / man / lispref / glyphs.texi
1 @c -*-texinfo-*-
2 @c This is part of the XEmacs Lisp Reference Manual.
3 @c Copyright (C) 1995, 1996 Ben Wing.
4 @c See the file lispref.texi for copying conditions.
5 @setfilename ../../info/glyphs.info
6 @node Glyphs, Annotations, Faces and Window-System Objects, top
7 @chapter Glyphs
8 @cindex glyphs
9
10   A @dfn{glyph} is an object that is used for pixmaps and images of all
11 sorts, as well as for things that ``act'' like pixmaps, such as
12 non-textual strings (@dfn{annotations}) displayed in a buffer or in the
13 margins.  It is used in begin-glyphs and end-glyphs attached to extents,
14 marginal and textual annotations, overlay arrows (@code{overlay-arrow-*}
15 variables), toolbar buttons, mouse pointers, frame icons, truncation and
16 continuation markers, and the like. (Basically, any place there is an
17 image or something that acts like an image, there will be a glyph object
18 representing it.)
19
20   The actual image that is displayed (as opposed to its position or
21 clipping) is defined by an @dfn{image specifier} object contained
22 within the glyph.  The separation between an image specifier object
23 and a glyph object is made because the glyph includes other properties
24 than just the actual image: e.g. the face it is displayed in (for text
25 images), the alignment of the image (when it is in a buffer), etc.
26
27 @defun glyphp object
28 This function returns @code{t} if @var{object} is a glyph.
29 @end defun
30
31 @menu
32 * Glyph Functions::     Functions for working with glyphs.
33 * Images::              Graphical images displayed in a frame.
34 * Glyph Types::         Each glyph has a particular type.
35 * Mouse Pointer::       Controlling the mouse pointer.
36 * Redisplay Glyphs::    Glyphs controlling various redisplay functions.
37 * Subwindows::          Inserting an externally-controlled subwindow
38                           into a buffer.
39 @end menu
40
41 @node Glyph Functions
42 @section Glyph Functions
43
44 @menu
45 * Creating Glyphs::     Creating new glyphs.
46 * Glyph Properties::    Accessing and modifying a glyph's properties.
47 * Glyph Convenience Functions::
48                         Convenience functions for accessing particular
49                           properties of a glyph.
50 * Glyph Dimensions::    Determining the height, width, etc. of a glyph.
51 @end menu
52
53 @node Creating Glyphs
54 @subsection Creating Glyphs
55
56 @defun make-glyph &optional spec-list type
57 This function creates a new glyph object of type @var{type}.
58
59 @var{spec-list} is used to initialize the glyph's image.  It is
60 typically an image instantiator (a string or a vector; @ref{Image
61 Specifiers}), but can also be a list of such instantiators (each one in
62 turn is tried until an image is successfully produced), a cons of a
63 locale (frame, buffer, etc.) and an instantiator, a list of such conses,
64 or any other form accepted by @code{canonicalize-spec-list}.
65 @xref{Specifiers}, for more information about specifiers.
66
67 @var{type} specifies the type of the glyph, which specifies in which
68 contexts the glyph can be used, and controls the allowable image types
69 into which the glyph's image can be instantiated.  @var{type} should be
70 one of @code{buffer} (used for glyphs in an extent, the modeline, the
71 toolbar, or elsewhere in a buffer), @code{pointer} (used for the
72 mouse-pointer), or @code{icon} (used for a frame's icon), and defaults
73 to @code{buffer}.  @xref{Glyph Types}.
74 @end defun
75
76 @defun make-glyph-internal &optional type
77 This function creates a new, uninitialized glyph of type @var{type}.
78 @end defun
79
80 @defun make-pointer-glyph &optional spec-list
81 This function is equivalent to calling @code{make-glyph} with a
82 @var{type} of @code{pointer}.
83 @end defun
84
85 @defun make-icon-glyph &optional spec-list
86 This function is equivalent to calling @code{make-glyph} with a
87 @var{type} of @code{icon}.
88 @end defun
89
90 @node Glyph Properties
91 @subsection Glyph Properties
92
93 Each glyph has a list of properties, which control all of the aspects of
94 the glyph's appearance.  The following symbols have predefined meanings:
95
96 @table @code
97 @item image
98 The image used to display the glyph.
99
100 @item baseline
101 Percent above baseline that glyph is to be displayed.  Only for glyphs
102 displayed inside of a buffer.
103
104 @item contrib-p
105 Whether the glyph contributes to the height of the line it's on.
106 Only for glyphs displayed inside of a buffer.
107
108 @item face
109 Face of this glyph (@emph{not} a specifier).
110 @end table
111
112 @defun set-glyph-property glyph property value &optional locale tag-set how-to-add
113 This function changes a property of a @var{glyph}.
114
115 For built-in properties, the actual value of the property is a specifier
116 and you cannot change this; but you can change the specifications within
117 the specifier, and that is what this function will do.  For user-defined
118 properties, you can use this function to either change the actual value
119 of the property or, if this value is a specifier, change the
120 specifications within it.
121
122 If @var{property} is a built-in property, the specifications to be added
123 to this property can be supplied in many different ways:
124
125 @itemize @bullet
126 @item
127 If @var{value} is a simple instantiator (e.g. a string naming a pixmap
128 filename) or a list of instantiators, then the instantiator(s) will be
129 added as a specification of the property for the given @var{locale}
130 (which defaults to @code{global} if omitted).
131
132 @item
133 If @var{value} is a list of specifications (each of which is a cons of a
134 locale and a list of instantiators), then @var{locale} must be
135 @code{nil} (it does not make sense to explicitly specify a locale in
136 this case), and specifications will be added as given.
137
138 @item
139 If @var{value} is a specifier (as would be returned by
140 @code{glyph-property} if no @var{locale} argument is given), then some
141 or all of the specifications in the specifier will be added to the
142 property.  In this case, the function is really equivalent to
143 @code{copy-specifier} and @var{locale} has the same semantics (if it is
144 a particular locale, the specification for the locale will be copied; if
145 a locale type, specifications for all locales of that type will be
146 copied; if @code{nil} or @code{all}, then all specifications will be
147 copied).
148 @end itemize
149
150 @var{how-to-add} should be either @code{nil} or one of the symbols
151 @code{prepend}, @code{append}, @code{remove-tag-set-prepend},
152 @code{remove-tag-set-append}, @code{remove-locale},
153 @code{remove-locale-type}, or @code{remove-all}.  See
154 @code{copy-specifier} and @code{add-spec-to-specifier} for a description
155 of what each of these means.  Most of the time, you do not need to worry
156 about this argument; the default behavior usually is fine.
157
158 In general, it is OK to pass an instance object (e.g. as returned by
159 @code{glyph-property-instance}) as an instantiator in place of an actual
160 instantiator.  In such a case, the instantiator used to create that
161 instance object will be used (for example, if you set a font-instance
162 object as the value of the @code{font} property, then the font name used
163 to create that object will be used instead).  If some cases, however,
164 doing this conversion does not make sense, and this will be noted in the
165 documentation for particular types of instance objects.
166
167 If @var{property} is not a built-in property, then this function will
168 simply set its value if @var{locale} is @code{nil}.  However, if
169 @var{locale} is given, then this function will attempt to add
170 @var{value} as the instantiator for the given @var{locale}, using
171 @code{add-spec-to-specifier}.  If the value of the property is not a
172 specifier, it will automatically be converted into a @code{generic}
173 specifier.
174 @end defun
175
176 @defun glyph-property glyph property &optional locale
177 This function returns @var{glyph}'s value of the given @var{property}.
178
179 If @var{locale} is omitted, the @var{glyph}'s actual value for
180 @var{property} will be returned.  For built-in properties, this will be
181 a specifier object of a type appropriate to the property (e.g. a font or
182 color specifier).  For other properties, this could be anything.
183
184 If @var{locale} is supplied, then instead of returning the actual value,
185 the specification(s) for the given locale or locale type will be
186 returned.  This will only work if the actual value of @var{property} is
187 a specifier (this will always be the case for built-in properties, but
188 may or may not apply to user-defined properties).  If the actual value
189 of @var{property} is not a specifier, this value will simply be returned
190 regardless of @var{locale}.
191
192 The return value will be a list of instantiators (e.g. vectors
193 specifying pixmap data), or a list of specifications, each of which is a
194 cons of a locale and a list of instantiators.  Specifically, if
195 @var{locale} is a particular locale (a buffer, window, frame, device, or
196 @code{global}), a list of instantiators for that locale will be
197 returned.  Otherwise, if @var{locale} is a locale type (one of the
198 symbols @code{buffer}, @code{window}, @code{frame}, or @code{device}),
199 the specifications for all locales of that type will be returned.
200 Finally, if @var{locale} is @code{all}, the specifications for all
201 locales of all types will be returned.
202
203 The specifications in a specifier determine what the value of
204 @var{property} will be in a particular @dfn{domain} or set of
205 circumstances, which is typically a particular Emacs window along with
206 the buffer it contains and the frame and device it lies within.  The
207 value is derived from the instantiator associated with the most specific
208 locale (in the order buffer, window, frame, device, and @code{global})
209 that matches the domain in question.  In other words, given a domain
210 (i.e. an Emacs window, usually), the specifier for @var{property} will
211 first be searched for a specification whose locale is the buffer
212 contained within that window; then for a specification whose locale is
213 the window itself; then for a specification whose locale is the frame
214 that the window is contained within; etc.  The first instantiator that
215 is valid for the domain (usually this means that the instantiator is
216 recognized by the device [i.e. the X server or TTY device] that the
217 domain is on).  The function @code{glyph-property-instance} actually does
218 all this, and is used to determine how to display the glyph.
219 @end defun
220
221 @defun glyph-property-instance glyph property &optional domain default no-fallback
222 This function returns the instance of @var{glyph}'s @var{property} in the
223 specified @var{domain}.
224
225 Under most circumstances, @var{domain} will be a particular window, and
226 the returned instance describes how the specified property actually is
227 displayed for that window and the particular buffer in it.  Note that
228 this may not be the same as how the property appears when the buffer is
229 displayed in a different window or frame, or how the property appears in
230 the same window if you switch to another buffer in that window; and in
231 those cases, the returned instance would be different.
232
233 The returned instance is an image-instance object, and you can query it
234 using the appropriate image instance functions.  For example, you could use
235 @code{image-instance-depth} to find out the depth (number of color
236 planes) of a pixmap displayed in a particular window.  The results might
237 be different from the results you would get for another window (perhaps
238 the user specified a different image for the frame that window is on; or
239 perhaps the same image was specified but the window is on a different X
240 server, and that X server has different color capabilities from this
241 one).
242
243 @var{domain} defaults to the selected window if omitted.
244
245 @var{domain} can be a frame or device, instead of a window.  The value
246 returned for such a domain is used in special circumstances when a
247 more specific domain does not apply; for example, a frame value might be
248 used for coloring a toolbar, which is conceptually attached to a frame
249 rather than a particular window.  The value is also useful in
250 determining what the value would be for a particular window within the
251 frame or device, if it is not overridden by a more specific
252 specification.
253
254 If @var{property} does not name a built-in property, its value will
255 simply be returned unless it is a specifier object, in which case it
256 will be instanced using @code{specifier-instance}.
257
258 Optional arguments @var{default} and @var{no-fallback} are the same as
259 in @code{specifier-instance}.  @xref{Specifiers}.
260 @end defun
261
262 @defun remove-glyph-property glyph property &optional locale tag-set exact-p
263 This function removes a property from a glyph.  For built-in properties,
264 this is analogous to @code{remove-specifier}.  @xref{Specifiers,
265 remove-specifier-p}, for the meaning of the @var{locale}, @var{tag-set},
266 and @var{exact-p} arguments.
267 @end defun
268
269 @node Glyph Convenience Functions
270 @subsection Glyph Convenience Functions
271
272   The following functions are provided for working with specific
273 properties of a glyph.  Note that these are exactly like calling
274 the general functions described above and passing in the
275 appropriate value for @var{property}.
276
277   Remember that if you want to determine the ``value'' of a
278 specific glyph property, you probably want to use the @code{*-instance}
279 functions.  For example, to determine whether a glyph contributes
280 to its line height, use @code{glyph-contrib-p-instance}, not
281 @code{glyph-contrib-p}. (The latter will return a boolean specifier
282 or a list of specifications, and you probably aren't concerned with
283 these.)
284
285 @defun glyph-image glyph &optional locale
286 This function is equivalent to calling @code{glyph-property} with
287 a property of @code{image}.  The return value will be an image
288 specifier if @var{locale} is @code{nil} or omitted; otherwise,
289 it will be a specification or list of specifications.
290 @end defun
291
292 @defun set-glyph-image glyph spec &optional locale tag-set how-to-add
293 This function is equivalent to calling @code{set-glyph-property} with
294 a property of @code{image}.
295 @end defun
296
297 @defun glyph-image-instance glyph &optional domain default no-fallback
298 This function returns the instance of @var{glyph}'s image in the given
299 @var{domain}, and is equivalent to calling
300 @code{glyph-property-instance} with a property of @code{image}.  The
301 return value will be an image instance.
302
303 Normally @var{domain} will be a window or @code{nil} (meaning the
304 selected window), and an instance object describing how the image
305 appears in that particular window and buffer will be returned.
306 @end defun
307
308 @defun glyph-contrib-p glyph &optional locale
309 This function is equivalent to calling @code{glyph-property} with
310 a property of @code{contrib-p}.  The return value will be a boolean
311 specifier if @var{locale} is @code{nil} or omitted; otherwise,
312 it will be a specification or list of specifications.
313 @end defun
314
315 @defun set-glyph-contrib-p glyph spec &optional locale tag-set how-to-add
316 This function is equivalent to calling @code{set-glyph-property} with
317 a property of @code{contrib-p}.
318 @end defun
319
320 @defun glyph-contrib-p-instance glyph &optional domain default no-fallback
321 This function returns whether the glyph contributes to its line height
322 in the given @var{domain}, and is equivalent to calling
323 @code{glyph-property-instance} with a property of @code{contrib-p}.  The
324 return value will be either @code{nil} or @code{t}. (Normally @var{domain}
325 will be a window or @code{nil}, meaning the selected window.)
326 @end defun
327
328 @defun glyph-baseline glyph &optional locale
329 This function is equivalent to calling @code{glyph-property} with a
330 property of @code{baseline}.  The return value will be a specifier if
331 @var{locale} is @code{nil} or omitted; otherwise, it will be a
332 specification or list of specifications.
333 @end defun
334
335 @defun set-glyph-baseline glyph spec &optional locale tag-set how-to-add
336 This function is equivalent to calling @code{set-glyph-property} with
337 a property of @code{baseline}.
338 @end defun
339
340 @defun glyph-baseline-instance glyph &optional domain default no-fallback
341 This function returns the instance of @var{glyph}'s baseline value in
342 the given @var{domain}, and is equivalent to calling
343 @code{glyph-property-instance} with a property of @code{baseline}.  The
344 return value will be an integer or @code{nil}.
345
346 Normally @var{domain} will be a window or @code{nil} (meaning the
347 selected window), and an instance object describing the baseline value
348 appears in that particular window and buffer will be returned.
349 @end defun
350
351 @defun glyph-face glyph
352 This function returns the face of @var{glyph}. (Remember, this is
353 not a specifier, but a simple property.)
354 @end defun
355
356 @defun set-glyph-face glyph face
357 This function changes the face of @var{glyph} to @var{face}.
358 @end defun
359
360 @node Glyph Dimensions
361 @subsection Glyph Dimensions
362
363 @defun glyph-width glyph &optional window
364 This function returns the width of @var{glyph} on @var{window}.  This
365 may not be exact as it does not take into account all of the context
366 that redisplay will.
367 @end defun
368
369 @defun glyph-ascent glyph &optional window
370 This function returns the ascent value of @var{glyph} on @var{window}.
371 This may not be exact as it does not take into account all of the
372 context that redisplay will.
373 @end defun
374
375 @defun glyph-descent glyph &optional window
376 This function returns the descent value of @var{glyph} on @var{window}.
377 This may not be exact as it does not take into account all of the
378 context that redisplay will.
379 @end defun
380
381 @defun glyph-height glyph &optional window
382 This function returns the height of @var{glyph} on @var{window}.  (This
383 is equivalent to the sum of the ascent and descent values.)  This may
384 not be exact as it does not take into account all of the context that
385 redisplay will.
386 @end defun
387
388 @node Images
389 @section Images
390
391 @menu
392 * Image Specifiers::            Specifying how an image will appear.
393 * Image Instantiator Conversion::
394                                 Conversion is applied to image instantiators
395                                   at the time they are added to an
396                                   image specifier or at the time they
397                                   are passed to @code{make-image-instance}.
398 * Image Instances::             What an image specifier gets instanced as.
399 @end menu
400
401 @node Image Specifiers
402 @subsection Image Specifiers
403 @cindex image specifiers
404
405   An image specifier is used to describe the actual image of a glyph.
406 It works like other specifiers (@pxref{Specifiers}), in that it contains
407 a number of specifications describing how the image should appear in a
408 variety of circumstances.  These specifications are called @dfn{image
409 instantiators}.  When XEmacs wants to display the image, it instantiates
410 the image into an @dfn{image instance}.  Image instances are their own
411 primitive object type (similar to font instances and color instances),
412 describing how the image appears in a particular domain. (On the other
413 hand, image instantiators, which are just descriptions of how the image
414 should appear, are represented using strings or vectors.)
415
416 @defun image-specifier-p object
417 This function returns non-@code{nil} if @var{object} is an image specifier.
418 Usually, an image specifier results from calling @code{glyph-image} on
419 a glyph.
420 @end defun
421
422 @defun make-image-specifier spec-list
423 This function creates a new image specifier object and initializes
424 it according to @var{spec-list}.  It is unlikely that you will ever
425 want to do this, but this function is provided for completeness and
426 for experimentation purposes.  @xref{Specifiers}.
427 @end defun
428
429   Image instantiators come in many formats: @code{xbm}, @code{xpm},
430 @code{gif}, @code{jpeg}, etc.  This describes the format of the data
431 describing the image.  The resulting image instances also come in many
432 types -- @code{mono-pixmap}, @code{color-pixmap}, @code{text},
433 @code{pointer}, etc.  This refers to the behavior of the image and the
434 sorts of places it can appear. (For example, a color-pixmap image has
435 fixed colors specified for it, while a mono-pixmap image comes in two
436 unspecified shades ``foreground'' and ``background'' that are determined
437 from the face of the glyph or surrounding text; a text image appears as
438 a string of text and has an unspecified foreground, background, and
439 font; a pointer image behaves like a mono-pixmap image but can only be
440 used as a mouse pointer [mono-pixmap images cannot be used as mouse
441 pointers]; etc.) It is important to keep the distinction between image
442 instantiator format and image instance type in mind.  Typically, a given
443 image instantiator format can result in many different image instance
444 types (for example, @code{xpm} can be instanced as @code{color-pixmap},
445 @code{mono-pixmap}, or @code{pointer}; whereas @code{cursor-font} can be
446 instanced only as @code{pointer}), and a particular image instance type
447 can be generated by many different image instantiator formats (e.g.
448 @code{color-pixmap} can be generated by @code{xpm}, @code{gif},
449 @code{jpeg}, etc.).
450
451   @xref{Image Instances}, for a more detailed discussion of image
452 instance types.
453
454   An image instantiator should be a string or a vector of the form
455
456 @example
457  @code{[@var{format} @var{:keyword} @var{value} ...]}
458 @end example
459
460 i.e. a format symbol followed by zero or more alternating keyword-value
461 pairs.  The @dfn{format} field should be a symbol, one of
462
463 @table @code
464 @item nothing
465 (Don't display anything; no keywords are valid for this.  Can only be
466 instanced as @code{nothing}.)
467 @item string
468 (Display this image as a text string.  Can only be instanced
469 as @code{text}, although support for instancing as @code{mono-pixmap}
470 should be added.)
471 @item formatted-string
472 (Display this image as a text string with replaceable fields,
473 similar to a modeline format string; not currently implemented.)
474 @item xbm
475 (An X bitmap; only if X support was compiled into this XEmacs.  Can be
476 instanced as @code{mono-pixmap}, @code{color-pixmap}, or
477 @code{pointer}.)
478 @item xpm
479 (An XPM pixmap; only if XPM support was compiled into this XEmacs.  Can
480 be instanced as @code{color-pixmap}, @code{mono-pixmap}, or
481 @code{pointer}.  XPM is an add-on library for X that was designed to
482 rectify the shortcomings of the XBM format.  Most implementations of X
483 include the XPM library as a standard part.  If your vendor does not, it
484 is highly recommended that you download it and install it.  You can get
485 it from the standard XEmacs FTP site, among other places.)
486 @item xface
487 (An X-Face bitmap, used to encode people's faces in e-mail messages;
488 only if X-Face support was compiled into this XEmacs.  Can be instanced
489 as @code{mono-pixmap}, @code{color-pixmap}, or @code{pointer}.)
490 @item gif
491 (A GIF87 or GIF89 image; only if GIF support was compiled into this
492 XEmacs.  Can be instanced as @code{color-pixmap}.  Note that XEmacs
493 includes GIF decoding functions as a standard part of it, so if you have
494 X support, you will normally have GIF support, unless you explicitly
495 disable it at configure time.)
496 @item jpeg
497 (A JPEG-format image; only if JPEG support was compiled into this
498 XEmacs.  Can be instanced as @code{color-pixmap}.  If you have the JPEG
499 libraries present on your system when XEmacs is built, XEmacs will
500 automatically detect this and use them, unless you explicitly disable it
501 at configure time.)
502 @item png
503 (A PNG/GIF24 image; only if PNG support was compiled into this XEmacs.
504 Can be instanced as @code{color-pixmap}.)
505 @item tiff
506 (A TIFF-format image; only if TIFF support was compiled into this XEmacs.
507 Not currently implemented.)
508 @item cursor-font
509 (One of the standard cursor-font names, such as @samp{watch} or
510 @samp{right_ptr} under X.  Under X, this is, more specifically, any of
511 the standard cursor names from appendix B of the Xlib manual [also known
512 as the file @file{<X11/cursorfont.h>}] minus the @samp{XC_} prefix.  On
513 other window systems, the valid names will be specific to the type of
514 window system.  Can only be instanced as @code{pointer}.)
515 @item font
516 (A glyph from a font; i.e. the name of a font, and glyph index into it
517 of the form @samp{@var{font} fontname index [[mask-font] mask-index]}.
518 Only if X support was compiled into this XEmacs.  Currently can only be
519 instanced as @code{pointer}, although this should probably be fixed.)
520 @item subwindow
521 (An embedded X window; not currently implemented.)
522 @item autodetect
523 (XEmacs tries to guess what format the data is in.  If X support exists,
524 the data string will be checked to see if it names a filename.  If so,
525 and this filename contains XBM or XPM data, the appropriate sort of
526 pixmap or pointer will be created. [This includes picking up any
527 specified hotspot or associated mask file.] Otherwise, if @code{pointer}
528 is one of the allowable image-instance types and the string names a
529 valid cursor-font name, the image will be created as a pointer.
530 Otherwise, the image will be displayed as text.  If no X support exists,
531 the image will always be displayed as text.)
532 @end table
533
534 The valid keywords are:
535
536 @table @code
537 @item :data
538 (Inline data.  For most formats above, this should be a string.  For
539 XBM images, this should be a list of three elements: width, height, and
540 a string of bit data.  This keyword is not valid for instantiator
541 format @code{nothing}.)
542
543 @item :file
544 (Data is contained in a file.  The value is the name of this file.  If
545 both @code{:data} and @code{:file} are specified, the image is created
546 from what is specified in @code{:data} and the string in @code{:file}
547 becomes the value of the @code{image-instance-file-name} function when
548 applied to the resulting image-instance.  This keyword is not valid for
549 instantiator formats @code{nothing}, @code{string},
550 @code{formatted-string}, @code{cursor-font}, @code{font}, and
551 @code{autodetect}.)
552
553 @item :foreground
554 @itemx :background
555 (For @code{xbm}, @code{xface}, @code{cursor-font}, and @code{font}.
556 These keywords allow you to explicitly specify foreground and background
557 colors.  The argument should be anything acceptable to
558 @code{make-color-instance}.  This will cause what would be a
559 @code{mono-pixmap} to instead be colorized as a two-color color-pixmap,
560 and specifies the foreground and/or background colors for a pointer
561 instead of black and white.)
562
563 @item :mask-data
564 (For @code{xbm} and @code{xface}.  This specifies a mask to be used with the
565 bitmap.  The format is a list of width, height, and bits, like for
566 @code{:data}.)
567
568 @item :mask-file
569 (For @code{xbm} and @code{xface}.  This specifies a file containing the
570 mask data.  If neither a mask file nor inline mask data is given for an
571 XBM image, and the XBM image comes from a file, XEmacs will look for a
572 mask file with the same name as the image file but with @samp{Mask} or
573 @samp{msk} appended.  For example, if you specify the XBM file
574 @file{left_ptr} [usually located in @file{/usr/include/X11/bitmaps}],
575 the associated mask file @file{left_ptrmsk} will automatically be picked
576 up.)
577
578 @item :hotspot-x
579 @itemx :hotspot-y
580 (For @code{xbm} and @code{xface}.  These keywords specify a hotspot if
581 the image is instantiated as a @code{pointer}.  Note that if the XBM
582 image file specifies a hotspot, it will automatically be picked up if no
583 explicit hotspot is given.)
584
585 @item :color-symbols
586 (Only for @code{xpm}.  This specifies an alist that maps strings that
587 specify symbolic color names to the actual color to be used for that
588 symbolic color (in the form of a string or a color-specifier object).
589 If this is not specified, the contents of @code{xpm-color-symbols} are
590 used to generate the alist.)
591 @end table
592
593 If instead of a vector, the instantiator is a string, it will be
594 converted into a vector by looking it up according to the specs in the
595 @code{console-type-image-conversion-list} for the console type of
596 the domain (usually a window; sometimes a frame or device) over which
597 the image is being instantiated.
598
599 If the instantiator specifies data from a file, the data will be read in
600 at the time that the instantiator is added to the image specifier (which
601 may be well before the image is actually displayed), and the
602 instantiator will be converted into one of the inline-data forms, with
603 the filename retained using a @code{:file} keyword.  This implies that
604 the file must exist when the instantiator is added to the image, but
605 does not need to exist at any other time (e.g. it may safely be a
606 temporary file).
607
608 @defun valid-image-instantiator-format-p format
609 This function returns non-@code{nil} if @var{format} is a valid image
610 instantiator format.  Note that the return value for many formats listed
611 above depends on whether XEmacs was compiled with support for that format.
612 @end defun
613
614 @defun image-instantiator-format-list
615 This function return a list of valid image-instantiator formats.
616 @end defun
617
618 @defvar xpm-color-symbols
619 This variable holds definitions of logical color-names used when reading
620 XPM files.  Elements of this list should be of the form
621 @code{(@var{color-name} @var{form-to-evaluate})}.  The @var{color-name}
622 should be a string, which is the name of the color to define; the
623 @var{form-to-evaluate} should evaluate to a color specifier object, or a
624 string to be passed to @code{make-color-instance} (@pxref{Colors}).  If
625 a loaded XPM file references a symbolic color called @var{color-name},
626 it will display as the computed color instead.
627
628 The default value of this variable defines the logical color names
629 @samp{"foreground"} and @samp{"background"} to be the colors of the
630 @code{default} face.
631 @end defvar
632
633 @defvar x-bitmap-file-path
634 A list of the directories in which X bitmap files may be found.  If nil,
635 this is initialized from the @samp{"*bitmapFilePath"} resource.  This is
636 used by the @code{make-image-instance} function (however, note that if
637 the environment variable @samp{XBMLANGPATH} is set, it is consulted
638 first).
639 @end defvar
640
641 @node Image Instantiator Conversion
642 @subsection Image Instantiator Conversion
643 @cindex image instantiator conversion
644 @cindex conversion of image instantiators
645
646 @defun set-console-type-image-conversion-list console-type list
647 This function sets the image-conversion-list for consoles of the given
648 @var{console-type}.  The image-conversion-list specifies how image
649 instantiators that are strings should be interpreted.  Each element of
650 the list should be a list of two elements (a regular expression string
651 and a vector) or a list of three elements (the preceding two plus an
652 integer index into the vector).  The string is converted to the vector
653 associated with the first matching regular expression.  If a vector
654 index is specified, the string itself is substituted into that position
655 in the vector.
656
657 Note: The conversion above is applied when the image instantiator is
658 added to an image specifier, not when the specifier is actually
659 instantiated.  Therefore, changing the image-conversion-list only affects
660 newly-added instantiators.  Existing instantiators in glyphs and image
661 specifiers will not be affected.
662 @end defun
663
664 @defun console-type-image-conversion-list console-type
665 This function returns the image-conversion-list for consoles of the given
666 @var{console-type}.
667 @end defun
668
669 @node Image Instances
670 @subsection Image Instances
671 @cindex image instances
672
673   Image-instance objects encapsulate the way a particular image (pixmap,
674 etc.) is displayed on a particular device.
675
676   In most circumstances, you do not need to directly create image
677 instances; use a glyph instead.  However, it may occasionally be useful
678 to explicitly create image instances, if you want more control over the
679 instantiation process.
680
681 @defun image-instance-p object
682 This function returns non-@code{nil} if @var{object} is an image instance.
683 @end defun
684
685 @menu
686 * Image Instance Types::         Each image instances has a particular type.
687 * Image Instance Functions::     Functions for working with image instances.
688 @end menu
689
690 @node Image Instance Types
691 @subsubsection Image Instance Types
692 @cindex image instance types
693
694   Image instances come in a number of different types.  The type
695 of an image instance specifies the nature of the image: Whether
696 it is a text string, a mono pixmap, a color pixmap, etc.
697
698   The valid image instance types are
699
700 @table @code
701 @item nothing
702 Nothing is displayed.
703
704 @item text
705 Displayed as text.  The foreground and background colors and the
706 font of the text are specified independent of the pixmap.  Typically
707 these attributes will come from the face of the surrounding text,
708 unless a face is specified for the glyph in which the image appears.
709
710 @item mono-pixmap
711 Displayed as a mono pixmap (a pixmap with only two colors where the
712 foreground and background can be specified independent of the pixmap;
713 typically the pixmap assumes the foreground and background colors of
714 the text around it, unless a face is specified for the glyph in which
715 the image appears).
716 @item color-pixmap
717
718 Displayed as a color pixmap.
719
720 @item pointer
721 Used as the mouse pointer for a window.
722
723 @item subwindow
724 A child window that is treated as an image.  This allows (e.g.)
725 another program to be responsible for drawing into the window.
726 Not currently implemented.
727 @end table
728
729 @defun valid-image-instance-type-p type
730 This function returns non-@code{nil} if @var{type} is a valid image
731 instance type.
732 @end defun
733
734 @defun image-instance-type-list
735 This function returns a list of the valid image instance types.
736 @end defun
737
738 @defun image-instance-type image-instance
739 This function returns the type of the given image instance.  The return
740 value will be one of @code{nothing}, @code{text}, @code{mono-pixmap},
741 @code{color-pixmap}, @code{pointer}, or @code{subwindow}.
742 @end defun
743
744 @defun text-image-instance-p object
745 This function returns non-@code{nil} if @var{object} is an image
746 instance of type @code{text}.
747 @end defun
748
749 @defun mono-pixmap-image-instance-p object
750 This function returns non-@code{nil} if @var{object} is an image
751 instance of type @code{mono-pixmap}.
752 @end defun
753
754 @defun color-pixmap-image-instance-p object
755 This function returns non-@code{nil} if @var{object} is an image
756 instance of type @code{color-pixmap}.
757 @end defun
758
759 @defun pointer-image-instance-p object
760 This function returns non-@code{nil} if @var{object} is an image
761 instance of type @code{pointer}.
762 @end defun
763
764 @defun subwindow-image-instance-p object
765 This function returns non-@code{nil} if @var{object} is an image
766 instance of type @code{subwindow}.
767 @end defun
768
769 @defun nothing-image-instance-p object
770 This function returns non-@code{nil} if @var{object} is an image
771 instance of type @code{nothing}.
772 @end defun
773
774 @node Image Instance Functions
775 @subsubsection Image Instance Functions
776
777 @defun make-image-instance data &optional device dest-types no-error
778 This function creates a new image-instance object.
779
780 @var{data} is an image instantiator, which describes the image
781 (@pxref{Image Specifiers}).
782
783 @var{dest-types} should be a list of allowed image instance types that
784 can be generated.  The @var{dest-types} list is unordered.  If multiple
785 destination types are possible for a given instantiator, the ``most
786 natural'' type for the instantiator's format is chosen. (For XBM, the
787 most natural types are @code{mono-pixmap}, followed by
788 @code{color-pixmap}, followed by @code{pointer}.  For the other normal
789 image formats, the most natural types are @code{color-pixmap}, followed
790 by @code{mono-pixmap}, followed by @code{pointer}.  For the string and
791 formatted-string formats, the most natural types are @code{text},
792 followed by @code{mono-pixmap} (not currently implemented), followed by
793 @code{color-pixmap} (not currently implemented).  The other formats can
794 only be instantiated as one type. (If you want to control more
795 specifically the order of the types into which an image is instantiated,
796 just call @code{make-image-instance} repeatedly until it succeeds,
797 passing less and less preferred destination types each time.
798
799 If @var{dest-types} is omitted, all possible types are allowed.
800
801 @var{no-error} controls what happens when the image cannot be generated.
802 If @var{nil}, an error message is generated.  If @var{t}, no messages
803 are generated and this function returns @var{nil}.  If anything else, a
804 warning message is generated and this function returns @var{nil}.
805 @end defun
806
807 @defun colorize-image-instance image-instance foreground background
808 This function makes the image instance be displayed in the given
809 colors.  Image instances come in two varieties: bitmaps, which are 1
810 bit deep which are rendered in the prevailing foreground and background
811 colors; and pixmaps, which are of arbitrary depth (including 1) and
812 which have the colors explicitly specified.  This function converts a
813 bitmap to a pixmap.  If the image instance was a pixmap already,
814 nothing is done (and @code{nil} is returned).  Otherwise @code{t} is
815 returned.
816 @end defun
817
818 @defun image-instance-name image-instance
819 This function returns the name of the given image instance.
820 @end defun
821
822 @defun image-instance-string image-instance
823 This function returns the string of the given image instance.  This will
824 only be non-@code{nil} for text image instances.
825 @end defun
826
827 @defun image-instance-file-name image-instance
828 This function returns the file name from which @var{image-instance} was
829 read, if known.
830 @end defun
831
832 @defun image-instance-mask-file-name image-instance
833 This function returns the file name from which @var{image-instance}'s
834 mask was read, if known.
835 @end defun
836
837 @defun image-instance-depth image-instance
838 This function returns the depth of the image instance.  This is 0 for a
839 mono pixmap, or a positive integer for a color pixmap.
840 @end defun
841
842 @defun image-instance-height image-instance
843 This function returns the height of the image instance, in pixels.
844 @end defun
845
846 @defun image-instance-width image-instance
847 This function returns the width of the image instance, in pixels.
848 @end defun
849
850 @defun image-instance-hotspot-x image-instance
851 This function returns the X coordinate of the image instance's hotspot,
852 if known.  This is a point relative to the origin of the pixmap.  When
853 an image is used as a mouse pointer, the hotspot is the point on the
854 image that sits over the location that the pointer points to.  This is,
855 for example, the tip of the arrow or the center of the crosshairs.
856
857 This will always be @code{nil} for a non-pointer image instance.
858 @end defun
859
860 @defun image-instance-hotspot-y image-instance
861 This function returns the Y coordinate of the image instance's hotspot,
862 if known.
863 @end defun
864
865 @defun image-instance-foreground image-instance
866 This function returns the foreground color of @var{image-instance}, if
867 applicable.  This will be a color instance or @code{nil}. (It will only
868 be non-@code{nil} for colorized mono pixmaps and for pointers.)
869 @end defun
870
871 @defun image-instance-background image-instance
872 This function returns the background color of @var{image-instance}, if
873 applicable.  This will be a color instance or @code{nil}. (It will only
874 be non-@code{nil} for colorized mono pixmaps and for pointers.)
875 @end defun
876
877
878 @node Glyph Types
879 @section Glyph Types
880
881   Each glyph has a particular type, which controls how the glyph's image
882 is generated.  Each glyph type has a corresponding list of allowable
883 image instance types that can be generated.  When you call
884 @code{glyph-image-instance} to retrieve the image instance of a glyph,
885 XEmacs does the equivalent of calling @code{make-image-instance} and
886 passing in @var{dest-types} the list of allowable image instance types
887 for the glyph's type.
888
889 @itemize @bullet
890 @item
891 @code{buffer} glyphs can be used as the begin-glyph or end-glyph of an
892 extent, in the modeline, and in the toolbar.  Their image can be
893 instantiated as @code{nothing}, @code{mono-pixmap}, @code{color-pixmap},
894 @code{text}, and @code{subwindow}.
895
896 @item
897 @code{pointer} glyphs can be used to specify the mouse pointer.  Their
898 image can be instantiated as @code{pointer}.
899
900 @item
901 @code{icon} glyphs can be used to specify the icon used when a frame is
902 iconified.  Their image can be instantiated as @code{mono-pixmap} and
903 @code{color-pixmap}.
904 @end itemize
905
906 @defun glyph-type glyph
907 This function returns the type of the given glyph.  The return value
908 will be a symbol, one of @code{buffer}, @code{pointer}, or @code{icon}.
909 @end defun
910
911 @defun valid-glyph-type-p glyph-type
912 Given a @var{glyph-type}, this function returns non-@code{nil} if it is
913 valid.
914 @end defun
915
916 @defun glyph-type-list
917 This function returns a list of valid glyph types.
918 @end defun
919
920 @defun buffer-glyph-p object
921 This function returns non-@code{nil} if @var{object} is a glyph of type
922 @code{buffer}.
923 @end defun
924
925 @defun icon-glyph-p object
926 This function returns non-@code{nil} if @var{object} is a glyph of type
927 @code{icon}.
928 @end defun
929
930 @defun pointer-glyph-p object
931 This function returns non-@code{nil} if @var{object} is a glyph of type
932 @code{pointer}.
933 @end defun
934
935 @node Mouse Pointer
936 @section Mouse Pointer
937 @cindex mouse cursor
938 @cindex cursor (mouse)
939 @cindex pointer (mouse)
940 @cindex mouse pointer
941
942 The shape of the mouse pointer when over a particular section of a frame
943 is controlled using various glyph variables.  Since the image of a glyph
944 is a specifier, it can be controlled on a per-buffer, per-frame, per-window,
945 or per-device basis.
946
947 You should use @code{set-glyph-image} to set the following variables,
948 @emph{not} @code{setq}.
949
950 @defvr Glyph text-pointer-glyph
951 This variable specifies the shape of the mouse pointer when over text.
952 @end defvr
953
954 @defvr Glyph nontext-pointer-glyph
955 This variable specifies the shape of the mouse pointer when over a
956 buffer, but not over text.  If unspecified in a particular domain,
957 @code{text-pointer-glyph} is used.
958 @end defvr
959
960 @defvr Glyph modeline-pointer-glyph
961 This variable specifies the shape of the mouse pointer when over the modeline.
962 If unspecified in a particular domain, @code{nontext-pointer-glyph} is used.
963 @end defvr
964
965 @defvr Glyph selection-pointer-glyph
966 This variable specifies the shape of the mouse pointer when over a
967 selectable text region.  If unspecified in a particular domain,
968 @code{text-pointer-glyph} is used.
969 @end defvr
970
971 @defvr Glyph gc-pointer-glyph
972 This variable specifies the shape of the mouse pointer when a garbage
973 collection is in progress.  If the selected window is on a window system
974 and this glyph specifies a value (i.e. a pointer image instance) in the
975 domain of the selected window, the pointer will be changed as specified
976 during garbage collection.  Otherwise, a message will be printed in the
977 echo area, as controlled by @code{gc-message}.
978 @end defvr
979
980 @defvr Glyph busy-pointer-glyph
981 This variable specifies the shape of the mouse pointer when XEmacs is busy.
982 If unspecified in a particular domain, the pointer is not changed
983 when XEmacs is busy.
984 @end defvr
985
986 @defvr Glyph menubar-pointer-glyph
987 This variable specifies the shape of the mouse pointer when over the
988 menubar.  If unspecified in a particular domain, the
989 window-system-provided default pointer is used.
990 @end defvr
991
992 @defvr Glyph scrollbar-pointer-glyph
993 This variable specifies the shape of the mouse pointer when over a
994 scrollbar.  If unspecified in a particular domain, the
995 window-system-provided default pointer is used.
996 @end defvr
997
998 @defvr Glyph toolbar-pointer-glyph
999 This variable specifies the shape of the mouse pointer when over a
1000 toolbar.  If unspecified in a particular domain,
1001 @code{nontext-pointer-glyph} is used.
1002 @end defvr
1003
1004 Internally, these variables are implemented in
1005 @code{default-mouse-motion-handler}, and thus only take effect when the
1006 mouse moves.  That function calls @code{set-frame-pointer}, which sets
1007 the current mouse pointer for a frame.
1008
1009 @defun set-frame-pointer frame image-instance
1010 This function sets the mouse pointer of @var{frame} to the given pointer
1011 image instance.  You should not call this function directly.
1012 (If you do, the pointer will change again the next time the mouse moves.)
1013 @end defun
1014
1015 @node Redisplay Glyphs
1016 @section Redisplay Glyphs
1017
1018 @defvr Glyph truncation-glyph
1019 This variable specifies what is displayed at the end of truncated lines.
1020 @end defvr
1021
1022 @defvr Glyph continuation-glyph
1023 This variable specifies what is displayed at the end of wrapped lines.
1024 @end defvr
1025
1026 @defvr Glyph octal-escape-glyph
1027 This variable specifies what to prefix character codes displayed in octal
1028 with.
1029 @end defvr
1030
1031 @defvr Glyph hscroll-glyph
1032 This variable specifies what to display at the beginning of horizontally
1033 scrolled lines.
1034 @end defvr
1035
1036 @defvr Glyph invisible-text-glyph
1037 This variable specifies what to use to indicate the presence of
1038 invisible text.  This is the glyph that is displayed when an ellipsis is
1039 called for, according to @code{selective-display-ellipses} or
1040 @code{buffer-invisibility-spec}).  Normally this is three dots (``...'').
1041 @end defvr
1042
1043 @defvr Glyph control-arrow-glyph
1044 This variable specifies what to use as an arrow for control characters.
1045 @end defvr
1046
1047 @node Subwindows
1048 @section Subwindows
1049
1050 Subwindows are not currently implemented.
1051
1052 @defun subwindowp object
1053 This function returns non-@code{nil} if @var{object} is a subwindow.
1054 @end defun