diff man/lispref/glyphs.texi @ 428:3ecd8885ac67 r21-2-22

Import from CVS: tag r21-2-22
author cvs
date Mon, 13 Aug 2007 11:28:15 +0200
parents
children 8de8e3f6228a
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/man/lispref/glyphs.texi	Mon Aug 13 11:28:15 2007 +0200
@@ -0,0 +1,1054 @@
+@c -*-texinfo-*-
+@c This is part of the XEmacs Lisp Reference Manual.
+@c Copyright (C) 1995, 1996 Ben Wing.
+@c See the file lispref.texi for copying conditions.
+@setfilename ../../info/glyphs.info
+@node Glyphs, Annotations, Faces and Window-System Objects, top
+@chapter Glyphs
+@cindex glyphs
+
+  A @dfn{glyph} is an object that is used for pixmaps and images of all
+sorts, as well as for things that ``act'' like pixmaps, such as
+non-textual strings (@dfn{annotations}) displayed in a buffer or in the
+margins.  It is used in begin-glyphs and end-glyphs attached to extents,
+marginal and textual annotations, overlay arrows (@code{overlay-arrow-*}
+variables), toolbar buttons, mouse pointers, frame icons, truncation and
+continuation markers, and the like. (Basically, any place there is an
+image or something that acts like an image, there will be a glyph object
+representing it.)
+
+  The actual image that is displayed (as opposed to its position or
+clipping) is defined by an @dfn{image specifier} object contained
+within the glyph.  The separation between an image specifier object
+and a glyph object is made because the glyph includes other properties
+than just the actual image: e.g. the face it is displayed in (for text
+images), the alignment of the image (when it is in a buffer), etc.
+
+@defun glyphp object
+This function returns @code{t} if @var{object} is a glyph.
+@end defun
+
+@menu
+* Glyph Functions::	Functions for working with glyphs.
+* Images::		Graphical images displayed in a frame.
+* Glyph Types::         Each glyph has a particular type.
+* Mouse Pointer::	Controlling the mouse pointer.
+* Redisplay Glyphs::    Glyphs controlling various redisplay functions.
+* Subwindows::          Inserting an externally-controlled subwindow
+                          into a buffer.
+@end menu
+
+@node Glyph Functions
+@section Glyph Functions
+
+@menu
+* Creating Glyphs::	Creating new glyphs.
+* Glyph Properties::	Accessing and modifying a glyph's properties.
+* Glyph Convenience Functions::
+			Convenience functions for accessing particular
+			  properties of a glyph.
+* Glyph Dimensions::    Determining the height, width, etc. of a glyph.
+@end menu
+
+@node Creating Glyphs
+@subsection Creating Glyphs
+
+@defun make-glyph &optional spec-list type
+This function creates a new glyph object of type @var{type}.
+
+@var{spec-list} is used to initialize the glyph's image.  It is
+typically an image instantiator (a string or a vector; @ref{Image
+Specifiers}), but can also be a list of such instantiators (each one in
+turn is tried until an image is successfully produced), a cons of a
+locale (frame, buffer, etc.) and an instantiator, a list of such conses,
+or any other form accepted by @code{canonicalize-spec-list}.
+@xref{Specifiers}, for more information about specifiers.
+
+@var{type} specifies the type of the glyph, which specifies in which
+contexts the glyph can be used, and controls the allowable image types
+into which the glyph's image can be instantiated.  @var{type} should be
+one of @code{buffer} (used for glyphs in an extent, the modeline, the
+toolbar, or elsewhere in a buffer), @code{pointer} (used for the
+mouse-pointer), or @code{icon} (used for a frame's icon), and defaults
+to @code{buffer}.  @xref{Glyph Types}.
+@end defun
+
+@defun make-glyph-internal &optional type
+This function creates a new, uninitialized glyph of type @var{type}.
+@end defun
+
+@defun make-pointer-glyph &optional spec-list
+This function is equivalent to calling @code{make-glyph} with a
+@var{type} of @code{pointer}.
+@end defun
+
+@defun make-icon-glyph &optional spec-list
+This function is equivalent to calling @code{make-glyph} with a
+@var{type} of @code{icon}.
+@end defun
+
+@node Glyph Properties
+@subsection Glyph Properties
+
+Each glyph has a list of properties, which control all of the aspects of
+the glyph's appearance.  The following symbols have predefined meanings:
+
+@table @code
+@item image
+The image used to display the glyph.
+
+@item baseline
+Percent above baseline that glyph is to be displayed.  Only for glyphs
+displayed inside of a buffer.
+
+@item contrib-p
+Whether the glyph contributes to the height of the line it's on.
+Only for glyphs displayed inside of a buffer.
+
+@item face
+Face of this glyph (@emph{not} a specifier).
+@end table
+
+@defun set-glyph-property glyph property value &optional locale tag-set how-to-add
+This function changes a property of a @var{glyph}.
+
+For built-in properties, the actual value of the property is a specifier
+and you cannot change this; but you can change the specifications within
+the specifier, and that is what this function will do.  For user-defined
+properties, you can use this function to either change the actual value
+of the property or, if this value is a specifier, change the
+specifications within it.
+
+If @var{property} is a built-in property, the specifications to be added
+to this property can be supplied in many different ways:
+
+@itemize @bullet
+@item
+If @var{value} is a simple instantiator (e.g. a string naming a pixmap
+filename) or a list of instantiators, then the instantiator(s) will be
+added as a specification of the property for the given @var{locale}
+(which defaults to @code{global} if omitted).
+
+@item
+If @var{value} is a list of specifications (each of which is a cons of a
+locale and a list of instantiators), then @var{locale} must be
+@code{nil} (it does not make sense to explicitly specify a locale in
+this case), and specifications will be added as given.
+
+@item
+If @var{value} is a specifier (as would be returned by
+@code{glyph-property} if no @var{locale} argument is given), then some
+or all of the specifications in the specifier will be added to the
+property.  In this case, the function is really equivalent to
+@code{copy-specifier} and @var{locale} has the same semantics (if it is
+a particular locale, the specification for the locale will be copied; if
+a locale type, specifications for all locales of that type will be
+copied; if @code{nil} or @code{all}, then all specifications will be
+copied).
+@end itemize
+
+@var{how-to-add} should be either @code{nil} or one of the symbols
+@code{prepend}, @code{append}, @code{remove-tag-set-prepend},
+@code{remove-tag-set-append}, @code{remove-locale},
+@code{remove-locale-type}, or @code{remove-all}.  See
+@code{copy-specifier} and @code{add-spec-to-specifier} for a description
+of what each of these means.  Most of the time, you do not need to worry
+about this argument; the default behavior usually is fine.
+
+In general, it is OK to pass an instance object (e.g. as returned by
+@code{glyph-property-instance}) as an instantiator in place of an actual
+instantiator.  In such a case, the instantiator used to create that
+instance object will be used (for example, if you set a font-instance
+object as the value of the @code{font} property, then the font name used
+to create that object will be used instead).  If some cases, however,
+doing this conversion does not make sense, and this will be noted in the
+documentation for particular types of instance objects.
+
+If @var{property} is not a built-in property, then this function will
+simply set its value if @var{locale} is @code{nil}.  However, if
+@var{locale} is given, then this function will attempt to add
+@var{value} as the instantiator for the given @var{locale}, using
+@code{add-spec-to-specifier}.  If the value of the property is not a
+specifier, it will automatically be converted into a @code{generic}
+specifier.
+@end defun
+
+@defun glyph-property glyph property &optional locale
+This function returns @var{glyph}'s value of the given @var{property}.
+
+If @var{locale} is omitted, the @var{glyph}'s actual value for
+@var{property} will be returned.  For built-in properties, this will be
+a specifier object of a type appropriate to the property (e.g. a font or
+color specifier).  For other properties, this could be anything.
+
+If @var{locale} is supplied, then instead of returning the actual value,
+the specification(s) for the given locale or locale type will be
+returned.  This will only work if the actual value of @var{property} is
+a specifier (this will always be the case for built-in properties, but
+may or may not apply to user-defined properties).  If the actual value
+of @var{property} is not a specifier, this value will simply be returned
+regardless of @var{locale}.
+
+The return value will be a list of instantiators (e.g. vectors
+specifying pixmap data), or a list of specifications, each of which is a
+cons of a locale and a list of instantiators.  Specifically, if
+@var{locale} is a particular locale (a buffer, window, frame, device, or
+@code{global}), a list of instantiators for that locale will be
+returned.  Otherwise, if @var{locale} is a locale type (one of the
+symbols @code{buffer}, @code{window}, @code{frame}, or @code{device}),
+the specifications for all locales of that type will be returned.
+Finally, if @var{locale} is @code{all}, the specifications for all
+locales of all types will be returned.
+
+The specifications in a specifier determine what the value of
+@var{property} will be in a particular @dfn{domain} or set of
+circumstances, which is typically a particular Emacs window along with
+the buffer it contains and the frame and device it lies within.  The
+value is derived from the instantiator associated with the most specific
+locale (in the order buffer, window, frame, device, and @code{global})
+that matches the domain in question.  In other words, given a domain
+(i.e. an Emacs window, usually), the specifier for @var{property} will
+first be searched for a specification whose locale is the buffer
+contained within that window; then for a specification whose locale is
+the window itself; then for a specification whose locale is the frame
+that the window is contained within; etc.  The first instantiator that
+is valid for the domain (usually this means that the instantiator is
+recognized by the device [i.e. the X server or TTY device] that the
+domain is on).  The function @code{glyph-property-instance} actually does
+all this, and is used to determine how to display the glyph.
+@end defun
+
+@defun glyph-property-instance glyph property &optional domain default no-fallback
+This function returns the instance of @var{glyph}'s @var{property} in the
+specified @var{domain}.
+
+Under most circumstances, @var{domain} will be a particular window, and
+the returned instance describes how the specified property actually is
+displayed for that window and the particular buffer in it.  Note that
+this may not be the same as how the property appears when the buffer is
+displayed in a different window or frame, or how the property appears in
+the same window if you switch to another buffer in that window; and in
+those cases, the returned instance would be different.
+
+The returned instance is an image-instance object, and you can query it
+using the appropriate image instance functions.  For example, you could use
+@code{image-instance-depth} to find out the depth (number of color
+planes) of a pixmap displayed in a particular window.  The results might
+be different from the results you would get for another window (perhaps
+the user specified a different image for the frame that window is on; or
+perhaps the same image was specified but the window is on a different X
+server, and that X server has different color capabilities from this
+one).
+
+@var{domain} defaults to the selected window if omitted.
+
+@var{domain} can be a frame or device, instead of a window.  The value
+returned for such a domain is used in special circumstances when a
+more specific domain does not apply; for example, a frame value might be
+used for coloring a toolbar, which is conceptually attached to a frame
+rather than a particular window.  The value is also useful in
+determining what the value would be for a particular window within the
+frame or device, if it is not overridden by a more specific
+specification.
+
+If @var{property} does not name a built-in property, its value will
+simply be returned unless it is a specifier object, in which case it
+will be instanced using @code{specifier-instance}.
+
+Optional arguments @var{default} and @var{no-fallback} are the same as
+in @code{specifier-instance}.  @xref{Specifiers}.
+@end defun
+
+@defun remove-glyph-property glyph property &optional locale tag-set exact-p
+This function removes a property from a glyph.  For built-in properties,
+this is analogous to @code{remove-specifier}.  @xref{Specifiers,
+remove-specifier-p}, for the meaning of the @var{locale}, @var{tag-set},
+and @var{exact-p} arguments.
+@end defun
+
+@node Glyph Convenience Functions
+@subsection Glyph Convenience Functions
+
+  The following functions are provided for working with specific
+properties of a glyph.  Note that these are exactly like calling
+the general functions described above and passing in the
+appropriate value for @var{property}.
+
+  Remember that if you want to determine the ``value'' of a
+specific glyph property, you probably want to use the @code{*-instance}
+functions.  For example, to determine whether a glyph contributes
+to its line height, use @code{glyph-contrib-p-instance}, not
+@code{glyph-contrib-p}. (The latter will return a boolean specifier
+or a list of specifications, and you probably aren't concerned with
+these.)
+
+@defun glyph-image glyph &optional locale
+This function is equivalent to calling @code{glyph-property} with
+a property of @code{image}.  The return value will be an image
+specifier if @var{locale} is @code{nil} or omitted; otherwise,
+it will be a specification or list of specifications.
+@end defun
+
+@defun set-glyph-image glyph spec &optional locale tag-set how-to-add
+This function is equivalent to calling @code{set-glyph-property} with
+a property of @code{image}.
+@end defun
+
+@defun glyph-image-instance glyph &optional domain default no-fallback
+This function returns the instance of @var{glyph}'s image in the given
+@var{domain}, and is equivalent to calling
+@code{glyph-property-instance} with a property of @code{image}.  The
+return value will be an image instance.
+
+Normally @var{domain} will be a window or @code{nil} (meaning the
+selected window), and an instance object describing how the image
+appears in that particular window and buffer will be returned.
+@end defun
+
+@defun glyph-contrib-p glyph &optional locale
+This function is equivalent to calling @code{glyph-property} with
+a property of @code{contrib-p}.  The return value will be a boolean
+specifier if @var{locale} is @code{nil} or omitted; otherwise,
+it will be a specification or list of specifications.
+@end defun
+
+@defun set-glyph-contrib-p glyph spec &optional locale tag-set how-to-add
+This function is equivalent to calling @code{set-glyph-property} with
+a property of @code{contrib-p}.
+@end defun
+
+@defun glyph-contrib-p-instance glyph &optional domain default no-fallback
+This function returns whether the glyph contributes to its line height
+in the given @var{domain}, and is equivalent to calling
+@code{glyph-property-instance} with a property of @code{contrib-p}.  The
+return value will be either @code{nil} or @code{t}. (Normally @var{domain}
+will be a window or @code{nil}, meaning the selected window.)
+@end defun
+
+@defun glyph-baseline glyph &optional locale
+This function is equivalent to calling @code{glyph-property} with a
+property of @code{baseline}.  The return value will be a specifier if
+@var{locale} is @code{nil} or omitted; otherwise, it will be a
+specification or list of specifications.
+@end defun
+
+@defun set-glyph-baseline glyph spec &optional locale tag-set how-to-add
+This function is equivalent to calling @code{set-glyph-property} with
+a property of @code{baseline}.
+@end defun
+
+@defun glyph-baseline-instance glyph &optional domain default no-fallback
+This function returns the instance of @var{glyph}'s baseline value in
+the given @var{domain}, and is equivalent to calling
+@code{glyph-property-instance} with a property of @code{baseline}.  The
+return value will be an integer or @code{nil}.
+
+Normally @var{domain} will be a window or @code{nil} (meaning the
+selected window), and an instance object describing the baseline value
+appears in that particular window and buffer will be returned.
+@end defun
+
+@defun glyph-face glyph
+This function returns the face of @var{glyph}. (Remember, this is
+not a specifier, but a simple property.)
+@end defun
+
+@defun set-glyph-face glyph face
+This function changes the face of @var{glyph} to @var{face}.
+@end defun
+
+@node Glyph Dimensions
+@subsection Glyph Dimensions
+
+@defun glyph-width glyph &optional window
+This function returns the width of @var{glyph} on @var{window}.  This
+may not be exact as it does not take into account all of the context
+that redisplay will.
+@end defun
+
+@defun glyph-ascent glyph &optional window
+This function returns the ascent value of @var{glyph} on @var{window}.
+This may not be exact as it does not take into account all of the
+context that redisplay will.
+@end defun
+
+@defun glyph-descent glyph &optional window
+This function returns the descent value of @var{glyph} on @var{window}.
+This may not be exact as it does not take into account all of the
+context that redisplay will.
+@end defun
+
+@defun glyph-height glyph &optional window
+This function returns the height of @var{glyph} on @var{window}.  (This
+is equivalent to the sum of the ascent and descent values.)  This may
+not be exact as it does not take into account all of the context that
+redisplay will.
+@end defun
+
+@node Images
+@section Images
+
+@menu
+* Image Specifiers::		Specifying how an image will appear.
+* Image Instantiator Conversion::
+				Conversion is applied to image instantiators
+				  at the time they are added to an
+				  image specifier or at the time they
+				  are passed to @code{make-image-instance}.
+* Image Instances::		What an image specifier gets instanced as.
+@end menu
+
+@node Image Specifiers
+@subsection Image Specifiers
+@cindex image specifiers
+
+  An image specifier is used to describe the actual image of a glyph.
+It works like other specifiers (@pxref{Specifiers}), in that it contains
+a number of specifications describing how the image should appear in a
+variety of circumstances.  These specifications are called @dfn{image
+instantiators}.  When XEmacs wants to display the image, it instantiates
+the image into an @dfn{image instance}.  Image instances are their own
+primitive object type (similar to font instances and color instances),
+describing how the image appears in a particular domain. (On the other
+hand, image instantiators, which are just descriptions of how the image
+should appear, are represented using strings or vectors.)
+
+@defun image-specifier-p object
+This function returns non-@code{nil} if @var{object} is an image specifier.
+Usually, an image specifier results from calling @code{glyph-image} on
+a glyph.
+@end defun
+
+@defun make-image-specifier spec-list
+This function creates a new image specifier object and initializes
+it according to @var{spec-list}.  It is unlikely that you will ever
+want to do this, but this function is provided for completeness and
+for experimentation purposes.  @xref{Specifiers}.
+@end defun
+
+  Image instantiators come in many formats: @code{xbm}, @code{xpm},
+@code{gif}, @code{jpeg}, etc.  This describes the format of the data
+describing the image.  The resulting image instances also come in many
+types -- @code{mono-pixmap}, @code{color-pixmap}, @code{text},
+@code{pointer}, etc.  This refers to the behavior of the image and the
+sorts of places it can appear. (For example, a color-pixmap image has
+fixed colors specified for it, while a mono-pixmap image comes in two
+unspecified shades ``foreground'' and ``background'' that are determined
+from the face of the glyph or surrounding text; a text image appears as
+a string of text and has an unspecified foreground, background, and
+font; a pointer image behaves like a mono-pixmap image but can only be
+used as a mouse pointer [mono-pixmap images cannot be used as mouse
+pointers]; etc.) It is important to keep the distinction between image
+instantiator format and image instance type in mind.  Typically, a given
+image instantiator format can result in many different image instance
+types (for example, @code{xpm} can be instanced as @code{color-pixmap},
+@code{mono-pixmap}, or @code{pointer}; whereas @code{cursor-font} can be
+instanced only as @code{pointer}), and a particular image instance type
+can be generated by many different image instantiator formats (e.g.
+@code{color-pixmap} can be generated by @code{xpm}, @code{gif},
+@code{jpeg}, etc.).
+
+  @xref{Image Instances}, for a more detailed discussion of image
+instance types.
+
+  An image instantiator should be a string or a vector of the form
+
+@example
+ @code{[@var{format} @var{:keyword} @var{value} ...]}
+@end example
+
+i.e. a format symbol followed by zero or more alternating keyword-value
+pairs.  The @dfn{format} field should be a symbol, one of
+
+@table @code
+@item nothing
+(Don't display anything; no keywords are valid for this.  Can only be
+instanced as @code{nothing}.)
+@item string
+(Display this image as a text string.  Can only be instanced
+as @code{text}, although support for instancing as @code{mono-pixmap}
+should be added.)
+@item formatted-string
+(Display this image as a text string with replaceable fields,
+similar to a modeline format string; not currently implemented.)
+@item xbm
+(An X bitmap; only if X support was compiled into this XEmacs.  Can be
+instanced as @code{mono-pixmap}, @code{color-pixmap}, or
+@code{pointer}.)
+@item xpm
+(An XPM pixmap; only if XPM support was compiled into this XEmacs.  Can
+be instanced as @code{color-pixmap}, @code{mono-pixmap}, or
+@code{pointer}.  XPM is an add-on library for X that was designed to
+rectify the shortcomings of the XBM format.  Most implementations of X
+include the XPM library as a standard part.  If your vendor does not, it
+is highly recommended that you download it and install it.  You can get
+it from the standard XEmacs FTP site, among other places.)
+@item xface
+(An X-Face bitmap, used to encode people's faces in e-mail messages;
+only if X-Face support was compiled into this XEmacs.  Can be instanced
+as @code{mono-pixmap}, @code{color-pixmap}, or @code{pointer}.)
+@item gif
+(A GIF87 or GIF89 image; only if GIF support was compiled into this
+XEmacs.  Can be instanced as @code{color-pixmap}.  Note that XEmacs
+includes GIF decoding functions as a standard part of it, so if you have
+X support, you will normally have GIF support, unless you explicitly
+disable it at configure time.)
+@item jpeg
+(A JPEG-format image; only if JPEG support was compiled into this
+XEmacs.  Can be instanced as @code{color-pixmap}.  If you have the JPEG
+libraries present on your system when XEmacs is built, XEmacs will
+automatically detect this and use them, unless you explicitly disable it
+at configure time.)
+@item png
+(A PNG/GIF24 image; only if PNG support was compiled into this XEmacs.
+Can be instanced as @code{color-pixmap}.)
+@item tiff
+(A TIFF-format image; only if TIFF support was compiled into this XEmacs.
+Not currently implemented.)
+@item cursor-font
+(One of the standard cursor-font names, such as @samp{watch} or
+@samp{right_ptr} under X.  Under X, this is, more specifically, any of
+the standard cursor names from appendix B of the Xlib manual [also known
+as the file @file{<X11/cursorfont.h>}] minus the @samp{XC_} prefix.  On
+other window systems, the valid names will be specific to the type of
+window system.  Can only be instanced as @code{pointer}.)
+@item font
+(A glyph from a font; i.e. the name of a font, and glyph index into it
+of the form @samp{@var{font} fontname index [[mask-font] mask-index]}.
+Only if X support was compiled into this XEmacs.  Currently can only be
+instanced as @code{pointer}, although this should probably be fixed.)
+@item subwindow
+(An embedded X window; not currently implemented.)
+@item autodetect
+(XEmacs tries to guess what format the data is in.  If X support exists,
+the data string will be checked to see if it names a filename.  If so,
+and this filename contains XBM or XPM data, the appropriate sort of
+pixmap or pointer will be created. [This includes picking up any
+specified hotspot or associated mask file.] Otherwise, if @code{pointer}
+is one of the allowable image-instance types and the string names a
+valid cursor-font name, the image will be created as a pointer.
+Otherwise, the image will be displayed as text.  If no X support exists,
+the image will always be displayed as text.)
+@end table
+
+The valid keywords are:
+
+@table @code
+@item :data
+(Inline data.  For most formats above, this should be a string.  For
+XBM images, this should be a list of three elements: width, height, and
+a string of bit data.  This keyword is not valid for instantiator
+format @code{nothing}.)
+
+@item :file
+(Data is contained in a file.  The value is the name of this file.  If
+both @code{:data} and @code{:file} are specified, the image is created
+from what is specified in @code{:data} and the string in @code{:file}
+becomes the value of the @code{image-instance-file-name} function when
+applied to the resulting image-instance.  This keyword is not valid for
+instantiator formats @code{nothing}, @code{string},
+@code{formatted-string}, @code{cursor-font}, @code{font}, and
+@code{autodetect}.)
+
+@item :foreground
+@itemx :background
+(For @code{xbm}, @code{xface}, @code{cursor-font}, and @code{font}.
+These keywords allow you to explicitly specify foreground and background
+colors.  The argument should be anything acceptable to
+@code{make-color-instance}.  This will cause what would be a
+@code{mono-pixmap} to instead be colorized as a two-color color-pixmap,
+and specifies the foreground and/or background colors for a pointer
+instead of black and white.)
+
+@item :mask-data
+(For @code{xbm} and @code{xface}.  This specifies a mask to be used with the
+bitmap.  The format is a list of width, height, and bits, like for
+@code{:data}.)
+
+@item :mask-file
+(For @code{xbm} and @code{xface}.  This specifies a file containing the
+mask data.  If neither a mask file nor inline mask data is given for an
+XBM image, and the XBM image comes from a file, XEmacs will look for a
+mask file with the same name as the image file but with @samp{Mask} or
+@samp{msk} appended.  For example, if you specify the XBM file
+@file{left_ptr} [usually located in @file{/usr/include/X11/bitmaps}],
+the associated mask file @file{left_ptrmsk} will automatically be picked
+up.)
+
+@item :hotspot-x
+@itemx :hotspot-y
+(For @code{xbm} and @code{xface}.  These keywords specify a hotspot if
+the image is instantiated as a @code{pointer}.  Note that if the XBM
+image file specifies a hotspot, it will automatically be picked up if no
+explicit hotspot is given.)
+
+@item :color-symbols
+(Only for @code{xpm}.  This specifies an alist that maps strings that
+specify symbolic color names to the actual color to be used for that
+symbolic color (in the form of a string or a color-specifier object).
+If this is not specified, the contents of @code{xpm-color-symbols} are
+used to generate the alist.)
+@end table
+
+If instead of a vector, the instantiator is a string, it will be
+converted into a vector by looking it up according to the specs in the
+@code{console-type-image-conversion-list} for the console type of
+the domain (usually a window; sometimes a frame or device) over which
+the image is being instantiated.
+
+If the instantiator specifies data from a file, the data will be read in
+at the time that the instantiator is added to the image specifier (which
+may be well before the image is actually displayed), and the
+instantiator will be converted into one of the inline-data forms, with
+the filename retained using a @code{:file} keyword.  This implies that
+the file must exist when the instantiator is added to the image, but
+does not need to exist at any other time (e.g. it may safely be a
+temporary file).
+
+@defun valid-image-instantiator-format-p format
+This function returns non-@code{nil} if @var{format} is a valid image
+instantiator format.  Note that the return value for many formats listed
+above depends on whether XEmacs was compiled with support for that format.
+@end defun
+
+@defun image-instantiator-format-list
+This function return a list of valid image-instantiator formats.
+@end defun
+
+@defvar xpm-color-symbols
+This variable holds definitions of logical color-names used when reading
+XPM files.  Elements of this list should be of the form
+@code{(@var{color-name} @var{form-to-evaluate})}.  The @var{color-name}
+should be a string, which is the name of the color to define; the
+@var{form-to-evaluate} should evaluate to a color specifier object, or a
+string to be passed to @code{make-color-instance} (@pxref{Colors}).  If
+a loaded XPM file references a symbolic color called @var{color-name},
+it will display as the computed color instead.
+
+The default value of this variable defines the logical color names
+@samp{"foreground"} and @samp{"background"} to be the colors of the
+@code{default} face.
+@end defvar
+
+@defvar x-bitmap-file-path
+A list of the directories in which X bitmap files may be found.  If nil,
+this is initialized from the @samp{"*bitmapFilePath"} resource.  This is
+used by the @code{make-image-instance} function (however, note that if
+the environment variable @samp{XBMLANGPATH} is set, it is consulted
+first).
+@end defvar
+
+@node Image Instantiator Conversion
+@subsection Image Instantiator Conversion
+@cindex image instantiator conversion
+@cindex conversion of image instantiators
+
+@defun set-console-type-image-conversion-list console-type list
+This function sets the image-conversion-list for consoles of the given
+@var{console-type}.  The image-conversion-list specifies how image
+instantiators that are strings should be interpreted.  Each element of
+the list should be a list of two elements (a regular expression string
+and a vector) or a list of three elements (the preceding two plus an
+integer index into the vector).  The string is converted to the vector
+associated with the first matching regular expression.  If a vector
+index is specified, the string itself is substituted into that position
+in the vector.
+
+Note: The conversion above is applied when the image instantiator is
+added to an image specifier, not when the specifier is actually
+instantiated.  Therefore, changing the image-conversion-list only affects
+newly-added instantiators.  Existing instantiators in glyphs and image
+specifiers will not be affected.
+@end defun
+
+@defun console-type-image-conversion-list console-type
+This function returns the image-conversion-list for consoles of the given
+@var{console-type}.
+@end defun
+
+@node Image Instances
+@subsection Image Instances
+@cindex image instances
+
+  Image-instance objects encapsulate the way a particular image (pixmap,
+etc.) is displayed on a particular device.
+
+  In most circumstances, you do not need to directly create image
+instances; use a glyph instead.  However, it may occasionally be useful
+to explicitly create image instances, if you want more control over the
+instantiation process.
+
+@defun image-instance-p object
+This function returns non-@code{nil} if @var{object} is an image instance.
+@end defun
+
+@menu
+* Image Instance Types::         Each image instances has a particular type.
+* Image Instance Functions::	 Functions for working with image instances.
+@end menu
+
+@node Image Instance Types
+@subsubsection Image Instance Types
+@cindex image instance types
+
+  Image instances come in a number of different types.  The type
+of an image instance specifies the nature of the image: Whether
+it is a text string, a mono pixmap, a color pixmap, etc.
+
+  The valid image instance types are
+
+@table @code
+@item nothing
+Nothing is displayed.
+
+@item text
+Displayed as text.  The foreground and background colors and the
+font of the text are specified independent of the pixmap.  Typically
+these attributes will come from the face of the surrounding text,
+unless a face is specified for the glyph in which the image appears.
+
+@item mono-pixmap
+Displayed as a mono pixmap (a pixmap with only two colors where the
+foreground and background can be specified independent of the pixmap;
+typically the pixmap assumes the foreground and background colors of
+the text around it, unless a face is specified for the glyph in which
+the image appears).
+@item color-pixmap
+
+Displayed as a color pixmap.
+
+@item pointer
+Used as the mouse pointer for a window.
+
+@item subwindow
+A child window that is treated as an image.  This allows (e.g.)
+another program to be responsible for drawing into the window.
+Not currently implemented.
+@end table
+
+@defun valid-image-instance-type-p type
+This function returns non-@code{nil} if @var{type} is a valid image
+instance type.
+@end defun
+
+@defun image-instance-type-list
+This function returns a list of the valid image instance types.
+@end defun
+
+@defun image-instance-type image-instance
+This function returns the type of the given image instance.  The return
+value will be one of @code{nothing}, @code{text}, @code{mono-pixmap},
+@code{color-pixmap}, @code{pointer}, or @code{subwindow}.
+@end defun
+
+@defun text-image-instance-p object
+This function returns non-@code{nil} if @var{object} is an image
+instance of type @code{text}.
+@end defun
+
+@defun mono-pixmap-image-instance-p object
+This function returns non-@code{nil} if @var{object} is an image
+instance of type @code{mono-pixmap}.
+@end defun
+
+@defun color-pixmap-image-instance-p object
+This function returns non-@code{nil} if @var{object} is an image
+instance of type @code{color-pixmap}.
+@end defun
+
+@defun pointer-image-instance-p object
+This function returns non-@code{nil} if @var{object} is an image
+instance of type @code{pointer}.
+@end defun
+
+@defun subwindow-image-instance-p object
+This function returns non-@code{nil} if @var{object} is an image
+instance of type @code{subwindow}.
+@end defun
+
+@defun nothing-image-instance-p object
+This function returns non-@code{nil} if @var{object} is an image
+instance of type @code{nothing}.
+@end defun
+
+@node Image Instance Functions
+@subsubsection Image Instance Functions
+
+@defun make-image-instance data &optional device dest-types no-error
+This function creates a new image-instance object.
+
+@var{data} is an image instantiator, which describes the image
+(@pxref{Image Specifiers}).
+
+@var{dest-types} should be a list of allowed image instance types that
+can be generated.  The @var{dest-types} list is unordered.  If multiple
+destination types are possible for a given instantiator, the ``most
+natural'' type for the instantiator's format is chosen. (For XBM, the
+most natural types are @code{mono-pixmap}, followed by
+@code{color-pixmap}, followed by @code{pointer}.  For the other normal
+image formats, the most natural types are @code{color-pixmap}, followed
+by @code{mono-pixmap}, followed by @code{pointer}.  For the string and
+formatted-string formats, the most natural types are @code{text},
+followed by @code{mono-pixmap} (not currently implemented), followed by
+@code{color-pixmap} (not currently implemented).  The other formats can
+only be instantiated as one type. (If you want to control more
+specifically the order of the types into which an image is instantiated,
+just call @code{make-image-instance} repeatedly until it succeeds,
+passing less and less preferred destination types each time.
+
+If @var{dest-types} is omitted, all possible types are allowed.
+
+@var{no-error} controls what happens when the image cannot be generated.
+If @var{nil}, an error message is generated.  If @var{t}, no messages
+are generated and this function returns @var{nil}.  If anything else, a
+warning message is generated and this function returns @var{nil}.
+@end defun
+
+@defun colorize-image-instance image-instance foreground background
+This function makes the image instance be displayed in the given
+colors.  Image instances come in two varieties: bitmaps, which are 1
+bit deep which are rendered in the prevailing foreground and background
+colors; and pixmaps, which are of arbitrary depth (including 1) and
+which have the colors explicitly specified.  This function converts a
+bitmap to a pixmap.  If the image instance was a pixmap already,
+nothing is done (and @code{nil} is returned).  Otherwise @code{t} is
+returned.
+@end defun
+
+@defun image-instance-name image-instance
+This function returns the name of the given image instance.
+@end defun
+
+@defun image-instance-string image-instance
+This function returns the string of the given image instance.  This will
+only be non-@code{nil} for text image instances.
+@end defun
+
+@defun image-instance-file-name image-instance
+This function returns the file name from which @var{image-instance} was
+read, if known.
+@end defun
+
+@defun image-instance-mask-file-name image-instance
+This function returns the file name from which @var{image-instance}'s
+mask was read, if known.
+@end defun
+
+@defun image-instance-depth image-instance
+This function returns the depth of the image instance.  This is 0 for a
+mono pixmap, or a positive integer for a color pixmap.
+@end defun
+
+@defun image-instance-height image-instance
+This function returns the height of the image instance, in pixels.
+@end defun
+
+@defun image-instance-width image-instance
+This function returns the width of the image instance, in pixels.
+@end defun
+
+@defun image-instance-hotspot-x image-instance
+This function returns the X coordinate of the image instance's hotspot,
+if known.  This is a point relative to the origin of the pixmap.  When
+an image is used as a mouse pointer, the hotspot is the point on the
+image that sits over the location that the pointer points to.  This is,
+for example, the tip of the arrow or the center of the crosshairs.
+
+This will always be @code{nil} for a non-pointer image instance.
+@end defun
+
+@defun image-instance-hotspot-y image-instance
+This function returns the Y coordinate of the image instance's hotspot,
+if known.
+@end defun
+
+@defun image-instance-foreground image-instance
+This function returns the foreground color of @var{image-instance}, if
+applicable.  This will be a color instance or @code{nil}. (It will only
+be non-@code{nil} for colorized mono pixmaps and for pointers.)
+@end defun
+
+@defun image-instance-background image-instance
+This function returns the background color of @var{image-instance}, if
+applicable.  This will be a color instance or @code{nil}. (It will only
+be non-@code{nil} for colorized mono pixmaps and for pointers.)
+@end defun
+
+
+@node Glyph Types
+@section Glyph Types
+
+  Each glyph has a particular type, which controls how the glyph's image
+is generated.  Each glyph type has a corresponding list of allowable
+image instance types that can be generated.  When you call
+@code{glyph-image-instance} to retrieve the image instance of a glyph,
+XEmacs does the equivalent of calling @code{make-image-instance} and
+passing in @var{dest-types} the list of allowable image instance types
+for the glyph's type.
+
+@itemize @bullet
+@item
+@code{buffer} glyphs can be used as the begin-glyph or end-glyph of an
+extent, in the modeline, and in the toolbar.  Their image can be
+instantiated as @code{nothing}, @code{mono-pixmap}, @code{color-pixmap},
+@code{text}, and @code{subwindow}.
+
+@item
+@code{pointer} glyphs can be used to specify the mouse pointer.  Their
+image can be instantiated as @code{pointer}.
+
+@item
+@code{icon} glyphs can be used to specify the icon used when a frame is
+iconified.  Their image can be instantiated as @code{mono-pixmap} and
+@code{color-pixmap}.
+@end itemize
+
+@defun glyph-type glyph
+This function returns the type of the given glyph.  The return value
+will be a symbol, one of @code{buffer}, @code{pointer}, or @code{icon}.
+@end defun
+
+@defun valid-glyph-type-p glyph-type
+Given a @var{glyph-type}, this function returns non-@code{nil} if it is
+valid.
+@end defun
+
+@defun glyph-type-list
+This function returns a list of valid glyph types.
+@end defun
+
+@defun buffer-glyph-p object
+This function returns non-@code{nil} if @var{object} is a glyph of type
+@code{buffer}.
+@end defun
+
+@defun icon-glyph-p object
+This function returns non-@code{nil} if @var{object} is a glyph of type
+@code{icon}.
+@end defun
+
+@defun pointer-glyph-p object
+This function returns non-@code{nil} if @var{object} is a glyph of type
+@code{pointer}.
+@end defun
+
+@node Mouse Pointer
+@section Mouse Pointer
+@cindex mouse cursor
+@cindex cursor (mouse)
+@cindex pointer (mouse)
+@cindex mouse pointer
+
+The shape of the mouse pointer when over a particular section of a frame
+is controlled using various glyph variables.  Since the image of a glyph
+is a specifier, it can be controlled on a per-buffer, per-frame, per-window,
+or per-device basis.
+
+You should use @code{set-glyph-image} to set the following variables,
+@emph{not} @code{setq}.
+
+@defvr Glyph text-pointer-glyph
+This variable specifies the shape of the mouse pointer when over text.
+@end defvr
+
+@defvr Glyph nontext-pointer-glyph
+This variable specifies the shape of the mouse pointer when over a
+buffer, but not over text.  If unspecified in a particular domain,
+@code{text-pointer-glyph} is used.
+@end defvr
+
+@defvr Glyph modeline-pointer-glyph
+This variable specifies the shape of the mouse pointer when over the modeline.
+If unspecified in a particular domain, @code{nontext-pointer-glyph} is used.
+@end defvr
+
+@defvr Glyph selection-pointer-glyph
+This variable specifies the shape of the mouse pointer when over a
+selectable text region.  If unspecified in a particular domain,
+@code{text-pointer-glyph} is used.
+@end defvr
+
+@defvr Glyph gc-pointer-glyph
+This variable specifies the shape of the mouse pointer when a garbage
+collection is in progress.  If the selected window is on a window system
+and this glyph specifies a value (i.e. a pointer image instance) in the
+domain of the selected window, the pointer will be changed as specified
+during garbage collection.  Otherwise, a message will be printed in the
+echo area, as controlled by @code{gc-message}.
+@end defvr
+
+@defvr Glyph busy-pointer-glyph
+This variable specifies the shape of the mouse pointer when XEmacs is busy.
+If unspecified in a particular domain, the pointer is not changed
+when XEmacs is busy.
+@end defvr
+
+@defvr Glyph menubar-pointer-glyph
+This variable specifies the shape of the mouse pointer when over the
+menubar.  If unspecified in a particular domain, the
+window-system-provided default pointer is used.
+@end defvr
+
+@defvr Glyph scrollbar-pointer-glyph
+This variable specifies the shape of the mouse pointer when over a
+scrollbar.  If unspecified in a particular domain, the
+window-system-provided default pointer is used.
+@end defvr
+
+@defvr Glyph toolbar-pointer-glyph
+This variable specifies the shape of the mouse pointer when over a
+toolbar.  If unspecified in a particular domain,
+@code{nontext-pointer-glyph} is used.
+@end defvr
+
+Internally, these variables are implemented in
+@code{default-mouse-motion-handler}, and thus only take effect when the
+mouse moves.  That function calls @code{set-frame-pointer}, which sets
+the current mouse pointer for a frame.
+
+@defun set-frame-pointer frame image-instance
+This function sets the mouse pointer of @var{frame} to the given pointer
+image instance.  You should not call this function directly.
+(If you do, the pointer will change again the next time the mouse moves.)
+@end defun
+
+@node Redisplay Glyphs
+@section Redisplay Glyphs
+
+@defvr Glyph truncation-glyph
+This variable specifies what is displayed at the end of truncated lines.
+@end defvr
+
+@defvr Glyph continuation-glyph
+This variable specifies what is displayed at the end of wrapped lines.
+@end defvr
+
+@defvr Glyph octal-escape-glyph
+This variable specifies what to prefix character codes displayed in octal
+with.
+@end defvr
+
+@defvr Glyph hscroll-glyph
+This variable specifies what to display at the beginning of horizontally
+scrolled lines.
+@end defvr
+
+@defvr Glyph invisible-text-glyph
+This variable specifies what to use to indicate the presence of
+invisible text.  This is the glyph that is displayed when an ellipsis is
+called for, according to @code{selective-display-ellipses} or
+@code{buffer-invisibility-spec}).  Normally this is three dots (``...'').
+@end defvr
+
+@defvr Glyph control-arrow-glyph
+This variable specifies what to use as an arrow for control characters.
+@end defvr
+
+@node Subwindows
+@section Subwindows
+
+Subwindows are not currently implemented.
+
+@defun subwindowp object
+This function returns non-@code{nil} if @var{object} is a subwindow.
+@end defun