(Change Hooks): Get rid of "Emacs 21".
[bpt/emacs.git] / lispref / display.texi
CommitLineData
42b85554
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
f0d3d9fe
SM
3@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001,
4@c 2002, 2005 Free Software Foundation, Inc.
42b85554
RS
5@c See the file elisp.texi for copying conditions.
6@setfilename ../info/display
969fe9b5 7@node Display, Calendar, Processes, Top
42b85554
RS
8@chapter Emacs Display
9
10 This chapter describes a number of features related to the display
11that Emacs presents to the user.
12
13@menu
14* Refresh Screen:: Clearing the screen and redrawing everything on it.
8241495d 15* Forcing Redisplay:: Forcing redisplay.
42b85554
RS
16* Truncation:: Folding or wrapping long text lines.
17* The Echo Area:: Where messages are displayed.
8a6ca431 18* Warnings:: Displaying warning messages for the user.
276dd8a8 19* Progress:: Informing user about progress of a long operation.
22697dac
KH
20* Invisible Text:: Hiding part of the buffer text.
21* Selective Display:: Hiding part of the buffer text (the old way).
42b85554
RS
22* Overlay Arrow:: Display of an arrow to indicate position.
23* Temporary Displays:: Displays that go away automatically.
02c77ee9 24* Overlays:: Use overlays to highlight parts of the buffer.
a40d4712 25* Width:: How wide a character or string is on the screen.
93449dd1 26* Line Height:: Controlling the height of lines.
02c77ee9 27* Faces:: A face defines a graphics style for text characters:
a40d4712 28 font, colors, etc.
8a6ca431 29* Fringes:: Controlling window fringes.
26b76360
RS
30* Fringe Bitmaps:: Displaying bitmaps in the window fringes.
31* Customizing Bitmaps:: Specifying your own bitmaps to use in the fringes.
f6cad089 32* Scroll Bars:: Controlling vertical scroll bars.
6db2bc02 33* Pointer Shape:: Controlling the mouse pointer shape.
8241495d
RS
34* Display Property:: Enabling special display features.
35* Images:: Displaying images in Emacs buffers.
02c77ee9 36* Buttons:: Adding clickable buttons to Emacs buffers.
42b85554 37* Blinking:: How Emacs shows the matching open parenthesis.
02c77ee9
MB
38* Inverse Video:: Specifying how the screen looks.
39* Usual Display:: The usual conventions for displaying nonprinting chars.
40* Display Tables:: How to specify other conventions.
42b85554
RS
41* Beeping:: Audible signal to the user.
42* Window Systems:: Which window system is being used.
43@end menu
44
45@node Refresh Screen
46@section Refreshing the Screen
47
48The function @code{redraw-frame} redisplays the entire contents of a
1911e6e5 49given frame (@pxref{Frames}).
42b85554
RS
50
51@c Emacs 19 feature
52@defun redraw-frame frame
53This function clears and redisplays frame @var{frame}.
54@end defun
55
56Even more powerful is @code{redraw-display}:
57
58@deffn Command redraw-display
59This function clears and redisplays all visible frames.
60@end deffn
61
00b3c1cd
RS
62 This function forces certain windows to be redisplayed
63but does not clear them.
64
65@defun force-window-update object
66This function forces redisplay of some or all windows. If
67@var{object} is a window, it forces redisplay of that window. If
68@var{object} is a buffer or buffer name, it forces redisplay of all
69windows displaying that buffer. If @var{object} is @code{nil}, it
70forces redisplay of all windows.
71@end defun
72
bfe721d1
KH
73 Processing user input takes absolute priority over redisplay. If you
74call these functions when input is available, they do nothing
75immediately, but a full redisplay does happen eventually---after all the
76input has been processed.
77
42b85554
RS
78 Normally, suspending and resuming Emacs also refreshes the screen.
79Some terminal emulators record separate contents for display-oriented
80programs such as Emacs and for ordinary sequential display. If you are
81using such a terminal, you might want to inhibit the redisplay on
78608595 82resumption.
42b85554
RS
83
84@defvar no-redraw-on-reenter
85@cindex suspend (cf. @code{no-redraw-on-reenter})
86@cindex resume (cf. @code{no-redraw-on-reenter})
87This variable controls whether Emacs redraws the entire screen after it
f9f59935 88has been suspended and resumed. Non-@code{nil} means there is no need
969fe9b5 89to redraw, @code{nil} means redrawing is needed. The default is @code{nil}.
42b85554
RS
90@end defvar
91
8241495d
RS
92@node Forcing Redisplay
93@section Forcing Redisplay
94@cindex forcing redisplay
95
96 Emacs redisplay normally stops if input arrives, and does not happen
97at all if input is available before it starts. Most of the time, this
98is exactly what you want. However, you can prevent preemption by
99binding @code{redisplay-dont-pause} to a non-@code{nil} value.
100
101@tindex redisplay-dont-pause
102@defvar redisplay-dont-pause
103If this variable is non-@code{nil}, pending input does not
104prevent or halt redisplay; redisplay occurs, and finishes,
911a7105 105regardless of whether input is available.
8241495d
RS
106@end defvar
107
108 You can request a display update, but only if no input is pending,
109with @code{(sit-for 0)}. To force a display update even when input is
110pending, do this:
111
112@example
113(let ((redisplay-dont-pause t))
114 (sit-for 0))
115@end example
116
42b85554
RS
117@node Truncation
118@section Truncation
119@cindex line wrapping
120@cindex continuation lines
121@cindex @samp{$} in display
122@cindex @samp{\} in display
123
124 When a line of text extends beyond the right edge of a window, the
125line can either be continued on the next screen line, or truncated to
126one screen line. The additional screen lines used to display a long
127text line are called @dfn{continuation} lines. Normally, a @samp{$} in
128the rightmost column of the window indicates truncation; a @samp{\} on
969fe9b5
RS
129the rightmost column indicates a line that ``wraps'' onto the next line,
130which is also called @dfn{continuing} the line. (The display table can
131specify alternative indicators; see @ref{Display Tables}.)
42b85554 132
6e2391a8 133 On a windowed display, the @samp{$} and @samp{\} indicators are
8a6ca431
RS
134replaced with graphics bitmaps displayed in the window fringes
135(@pxref{Fringes}).
6e2391a8 136
42b85554
RS
137 Note that continuation is different from filling; continuation happens
138on the screen only, not in the buffer contents, and it breaks a line
139precisely at the right margin, not at a word boundary. @xref{Filling}.
140
141@defopt truncate-lines
142This buffer-local variable controls how Emacs displays lines that extend
143beyond the right edge of the window. The default is @code{nil}, which
144specifies continuation. If the value is non-@code{nil}, then these
145lines are truncated.
146
147If the variable @code{truncate-partial-width-windows} is non-@code{nil},
148then truncation is always used for side-by-side windows (within one
149frame) regardless of the value of @code{truncate-lines}.
150@end defopt
151
bfe721d1 152@defopt default-truncate-lines
42b85554 153This variable is the default value for @code{truncate-lines}, for
969fe9b5 154buffers that do not have buffer-local values for it.
bfe721d1 155@end defopt
42b85554
RS
156
157@defopt truncate-partial-width-windows
158This variable controls display of lines that extend beyond the right
159edge of the window, in side-by-side windows (@pxref{Splitting Windows}).
160If it is non-@code{nil}, these lines are truncated; otherwise,
161@code{truncate-lines} says what to do with them.
162@end defopt
163
a9f0a989
RS
164 When horizontal scrolling (@pxref{Horizontal Scrolling}) is in use in
165a window, that forces truncation.
166
f9f59935
RS
167 You can override the glyphs that indicate continuation or truncation
168using the display table; see @ref{Display Tables}.
42b85554 169
1911e6e5 170 If your buffer contains @emph{very} long lines, and you use
22697dac 171continuation to display them, just thinking about them can make Emacs
bfe721d1
KH
172redisplay slow. The column computation and indentation functions also
173become slow. Then you might find it advisable to set
174@code{cache-long-line-scans} to @code{t}.
22697dac
KH
175
176@defvar cache-long-line-scans
177If this variable is non-@code{nil}, various indentation and motion
bfe721d1
KH
178functions, and Emacs redisplay, cache the results of scanning the
179buffer, and consult the cache to avoid rescanning regions of the buffer
180unless they are modified.
22697dac 181
bfe721d1 182Turning on the cache slows down processing of short lines somewhat.
22697dac 183
969fe9b5 184This variable is automatically buffer-local in every buffer.
22697dac
KH
185@end defvar
186
42b85554
RS
187@node The Echo Area
188@section The Echo Area
189@cindex error display
190@cindex echo area
191
22697dac 192The @dfn{echo area} is used for displaying messages made with the
42b85554
RS
193@code{message} primitive, and for echoing keystrokes. It is not the
194same as the minibuffer, despite the fact that the minibuffer appears
195(when active) in the same place on the screen as the echo area. The
196@cite{GNU Emacs Manual} specifies the rules for resolving conflicts
197between the echo area and the minibuffer for use of that screen space
198(@pxref{Minibuffer,, The Minibuffer, emacs, The GNU Emacs Manual}).
199Error messages appear in the echo area; see @ref{Errors}.
200
201You can write output in the echo area by using the Lisp printing
202functions with @code{t} as the stream (@pxref{Output Functions}), or as
203follows:
204
205@defun message string &rest arguments
a2f2ceaa 206This function displays a message in the echo area. The
42b85554
RS
207argument @var{string} is similar to a C language @code{printf} control
208string. See @code{format} in @ref{String Conversion}, for the details
209on the conversion specifications. @code{message} returns the
210constructed string.
211
b22f3a19
RS
212In batch mode, @code{message} prints the message text on the standard
213error stream, followed by a newline.
214
8241495d
RS
215If @var{string}, or strings among the @var{arguments}, have @code{face}
216text properties, these affect the way the message is displayed.
217
42b85554 218@c Emacs 19 feature
8241495d
RS
219If @var{string} is @code{nil}, @code{message} clears the echo area; if
220the echo area has been expanded automatically, this brings it back to
221its normal size. If the minibuffer is active, this brings the
222minibuffer contents back onto the screen immediately.
b22f3a19 223
a2f2ceaa 224@vindex message-truncate-lines
caae20c7
RS
225Normally, displaying a long message resizes the echo area to display
226the entire message. But if the variable @code{message-truncate-lines}
227is non-@code{nil}, the echo area does not resize, and the message is
228truncated to fit it, as in Emacs 20 and before.
a2f2ceaa 229
42b85554
RS
230@example
231@group
232(message "Minibuffer depth is %d."
233 (minibuffer-depth))
234 @print{} Minibuffer depth is 0.
235@result{} "Minibuffer depth is 0."
236@end group
237
238@group
239---------- Echo Area ----------
240Minibuffer depth is 0.
241---------- Echo Area ----------
242@end group
243@end example
a43709e6
MB
244
245To automatically display a message in the echo area or in a pop-buffer,
246depending on its size, use @code{display-message-or-buffer}.
42b85554
RS
247@end defun
248
b6954afd
RS
249@tindex with-temp-message
250@defmac with-temp-message message &rest body
251This construct displays a message in the echo area temporarily, during
252the execution of @var{body}. It displays @var{message}, executes
253@var{body}, then returns the value of the last body form while restoring
254the previous echo area contents.
255@end defmac
256
39d6d9bd
RS
257@defun message-or-box string &rest arguments
258This function displays a message like @code{message}, but may display it
259in a dialog box instead of the echo area. If this function is called in
260a command that was invoked using the mouse---more precisely, if
261@code{last-nonmenu-event} (@pxref{Command Loop Info}) is either
262@code{nil} or a list---then it uses a dialog box or pop-up menu to
263display the message. Otherwise, it uses the echo area. (This is the
264same criterion that @code{y-or-n-p} uses to make a similar decision; see
265@ref{Yes-or-No Queries}.)
266
267You can force use of the mouse or of the echo area by binding
268@code{last-nonmenu-event} to a suitable value around the call.
269@end defun
270
271@defun message-box string &rest arguments
272This function displays a message like @code{message}, but uses a dialog
273box (or a pop-up menu) whenever that is possible. If it is impossible
274to use a dialog box or pop-up menu, because the terminal does not
275support them, then @code{message-box} uses the echo area, like
276@code{message}.
277@end defun
278
a43709e6 279@defun display-message-or-buffer message &optional buffer-name not-this-window frame
26f42fed 280@tindex display-message-or-buffer
a43709e6
MB
281This function displays the message @var{message}, which may be either a
282string or a buffer. If it is shorter than the maximum height of the
283echo area, as defined by @code{max-mini-window-height}, it is displayed
284in the echo area, using @code{message}. Otherwise,
285@code{display-buffer} is used to show it in a pop-up buffer.
286
287Returns either the string shown in the echo area, or when a pop-up
288buffer is used, the window used to display it.
289
290If @var{message} is a string, then the optional argument
291@var{buffer-name} is the name of the buffer used to display it when a
292pop-up buffer is used, defaulting to @samp{*Message*}. In the case
293where @var{message} is a string and displayed in the echo area, it is
294not specified whether the contents are inserted into the buffer anyway.
295
296The optional arguments @var{not-this-window} and @var{frame} are as for
297@code{display-buffer}, and only used if a buffer is displayed.
298@end defun
299
f9f59935
RS
300@defun current-message
301This function returns the message currently being displayed in the
302echo area, or @code{nil} if there is none.
303@end defun
304
969fe9b5
RS
305@defvar cursor-in-echo-area
306This variable controls where the cursor appears when a message is
307displayed in the echo area. If it is non-@code{nil}, then the cursor
308appears at the end of the message. Otherwise, the cursor appears at
309point---not in the echo area at all.
310
311The value is normally @code{nil}; Lisp programs bind it to @code{t}
312for brief periods of time.
313@end defvar
314
f9f59935
RS
315@defvar echo-area-clear-hook
316This normal hook is run whenever the echo area is cleared---either by
317@code{(message nil)} or for any other reason.
318@end defvar
319
22697dac
KH
320Almost all the messages displayed in the echo area are also recorded
321in the @samp{*Messages*} buffer.
322
323@defopt message-log-max
324This variable specifies how many lines to keep in the @samp{*Messages*}
325buffer. The value @code{t} means there is no limit on how many lines to
326keep. The value @code{nil} disables message logging entirely. Here's
327how to display a message and prevent it from being logged:
328
329@example
330(let (message-log-max)
331 (message @dots{}))
332@end example
333@end defopt
334
bfe721d1
KH
335@defvar echo-keystrokes
336This variable determines how much time should elapse before command
65e8b582
DL
337characters echo. Its value must be an integer or floating point number,
338which specifies the
bfe721d1
KH
339number of seconds to wait before echoing. If the user types a prefix
340key (such as @kbd{C-x}) and then delays this many seconds before
a9f0a989
RS
341continuing, the prefix key is echoed in the echo area. (Once echoing
342begins in a key sequence, all subsequent characters in the same key
343sequence are echoed immediately.)
bfe721d1
KH
344
345If the value is zero, then command input is not echoed.
346@end defvar
347
8a6ca431
RS
348@node Warnings
349@section Reporting Warnings
350@cindex warnings
351
352 @dfn{Warnings} are a facility for a program to inform the user of a
353possible problem, but continue running.
354
355@menu
356* Warning Basics:: Warnings concepts and functions to report them.
357* Warning Variables:: Variables programs bind to customize their warnings.
358* Warning Options:: Variables users set to control display of warnings.
359@end menu
360
361@node Warning Basics
362@subsection Warning Basics
363@cindex severity level
364
365 Every warning has a textual message, which explains the problem for
366the user, and a @dfn{severity level} which is a symbol. Here are the
367possible severity levels, in order of decreasing severity, and their
368meanings:
369
370@table @code
371@item :emergency
372A problem that will seriously impair Emacs operation soon
373if you do not attend to it promptly.
374@item :error
375A report of data or circumstances that are inherently wrong.
376@item :warning
377A report of data or circumstances that are not inherently wrong, but
378raise suspicion of a possible problem.
379@item :debug
380A report of information that may be useful if you are debugging.
381@end table
382
383 When your program encounters invalid input data, it can either
384signal a Lisp error by calling @code{error} or @code{signal} or report
385a warning with severity @code{:error}. Signaling a Lisp error is the
386easiest thing to do, but it means the program cannot continue
387processing. If you want to take the trouble to implement a way to
388continue processing despite the bad data, then reporting a warning of
389severity @code{:error} is the right way to inform the user of the
390problem. For instance, the Emacs Lisp byte compiler can report an
391error that way and continue compiling other functions. (If the
392program signals a Lisp error and then handles it with
393@code{condition-case}, the user won't see the error message; it could
394show the message to the user by reporting it as a warning.)
395
c00d3ba4 396@cindex warning type
8a6ca431
RS
397 Each warning has a @dfn{warning type} to classify it. The type is a
398list of symbols. The first symbol should be the custom group that you
399use for the program's user options. For example, byte compiler
400warnings use the warning type @code{(bytecomp)}. You can also
401subcategorize the warnings, if you wish, by using more symbols in the
402list.
403
404@defun display-warning type message &optional level buffer-name
405This function reports a warning, using @var{message} as the message
406and @var{type} as the warning type. @var{level} should be the
407severity level, with @code{:warning} being the default.
408
409@var{buffer-name}, if non-@code{nil}, specifies the name of the buffer
410for logging the warning. By default, it is @samp{*Warnings*}.
411@end defun
412
413@defun lwarn type level message &rest args
414This function reports a warning using the value of @code{(format
415@var{message} @var{args}...)} as the message. In other respects it is
416equivalent to @code{display-warning}.
417@end defun
418
419@defun warn message &rest args
420This function reports a warning using the value of @code{(format
421@var{message} @var{args}...)} as the message, @code{(emacs)} as the
422type, and @code{:warning} as the severity level. It exists for
423compatibility only; we recommend not using it, because you should
424specify a specific warning type.
425@end defun
426
427@node Warning Variables
428@subsection Warning Variables
429
430 Programs can customize how their warnings appear by binding
431the variables described in this section.
432
433@defvar warning-levels
434This list defines the meaning and severity order of the warning
435severity levels. Each element defines one severity level,
436and they are arranged in order of decreasing severity.
437
438Each element has the form @code{(@var{level} @var{string}
439@var{function})}, where @var{level} is the severity level it defines.
440@var{string} specifies the textual description of this level.
441@var{string} should use @samp{%s} to specify where to put the warning
442type information, or it can omit the @samp{%s} so as not to include
443that information.
444
445The optional @var{function}, if non-@code{nil}, is a function to call
446with no arguments, to get the user's attention.
447
448Normally you should not change the value of this variable.
449@end defvar
450
451@defvar warning-prefix-function
812a2341 452If non-@code{nil}, the value is a function to generate prefix text for
8a6ca431
RS
453warnings. Programs can bind the variable to a suitable function.
454@code{display-warning} calls this function with the warnings buffer
455current, and the function can insert text in it. That text becomes
456the beginning of the warning message.
457
458The function is called with two arguments, the severity level and its
459entry in @code{warning-levels}. It should return a list to use as the
460entry (this value need not be an actual member of
812a2341 461@code{warning-levels}). By constructing this value, the function can
8a6ca431
RS
462change the severity of the warning, or specify different handling for
463a given severity level.
464
465If the variable's value is @code{nil} then there is no function
466to call.
467@end defvar
468
469@defvar warning-series
470Programs can bind this variable to @code{t} to say that the next
471warning should begin a series. When several warnings form a series,
472that means to leave point on the first warning of the series, rather
812a2341 473than keep moving it for each warning so that it appears on the last one.
8a6ca431
RS
474The series ends when the local binding is unbound and
475@code{warning-series} becomes @code{nil} again.
476
477The value can also be a symbol with a function definition. That is
478equivalent to @code{t}, except that the next warning will also call
479the function with no arguments with the warnings buffer current. The
480function can insert text which will serve as a header for the series
481of warnings.
482
483Once a series has begun, the value is a marker which points to the
484buffer position in the warnings buffer of the start of the series.
485
486The variable's normal value is @code{nil}, which means to handle
487each warning separately.
488@end defvar
489
490@defvar warning-fill-prefix
491When this variable is non-@code{nil}, it specifies a fill prefix to
492use for filling each warning's text.
493@end defvar
494
495@defvar warning-type-format
496This variable specifies the format for displaying the warning type
497in the warning message. The result of formatting the type this way
498gets included in the message under the control of the string in the
499entry in @code{warning-levels}. The default value is @code{" (%s)"}.
500If you bind it to @code{""} then the warning type won't appear at
501all.
502@end defvar
503
504@node Warning Options
505@subsection Warning Options
506
507 These variables are used by users to control what happens
508when a Lisp program reports a warning.
509
510@defopt warning-minimum-level
511This user option specifies the minimum severity level that should be
512shown immediately to the user. The default is @code{:warning}, which
513means to immediately display all warnings except @code{:debug}
514warnings.
515@end defopt
516
517@defopt warning-minimum-log-level
518This user option specifies the minimum severity level that should be
519logged in the warnings buffer. The default is @code{:warning}, which
520means to log all warnings except @code{:debug} warnings.
521@end defopt
522
523@defopt warning-suppress-types
524This list specifies which warning types should not be displayed
525immediately for the user. Each element of the list should be a list
526of symbols. If its elements match the first elements in a warning
527type, then that warning is not displayed immediately.
528@end defopt
529
530@defopt warning-suppress-log-types
531This list specifies which warning types should not be logged in the
532warnings buffer. Each element of the list should be a list of
533symbols. If it matches the first few elements in a warning type, then
534that warning is not logged.
535@end defopt
00b3c1cd 536
276dd8a8
EZ
537@node Progress
538@section Reporting Operation Progress
539@cindex progress reporting
540
541When an operation can take a while to finish, you should inform the
542user about the progress it makes. This way the user can estimate
543remaining time and clearly see that Emacs is busy working, not hung.
544
545Functions listed in this section provide simple and efficient way of
546reporting operation progress. Here is a working example that does
547nothing useful:
548
549@example
550(let ((progress-reporter
551 (make-progress-reporter "Collecting some mana for Emacs..."
552 0 500)))
553 (dotimes (k 500)
554 (sit-for 0.01)
555 (progress-reporter-update progress-reporter k))
556 (progress-reporter-done progress-reporter))
557@end example
558
559@defun make-progress-reporter message min-value max-value &optional current-value min-change min-time
560This function creates a progress reporter---the object you will use as
561an argument for all other functions listed here. The idea is to
562precompute as much data as possible to make progress reporting very
563fast.
564
565The @var{message} will be displayed in the echo area, followed by
566progress percentage. @var{message} is treated as a simple string. If
567you need it to depend on a filename, for instance, use @code{format}
568before calling this function.
569
570@var{min-value} and @var{max-value} arguments stand for starting and
571final states of your operation. For instance, if you scan a buffer,
572they should be the results of @code{point-min} and @code{point-max}
573correspondingly. It is required that @var{max-value} is greater than
574@var{min-value}. If you create progress reporter when some part of
575the operation has already been completed, then specify
576@var{current-value} argument. But normally you should omit it or set
577it to @code{nil}---it will default to @var{min-value} then.
578
579Remaining arguments control the rate of echo area updates. Progress
580reporter will wait for at least @var{min-change} more percents of the
581operation to be completed before printing next message.
582@var{min-time} specifies the minimum time in seconds to pass between
583successive prints. It can be fractional. Depending on Emacs and
584system capabilities, progress reporter may or may not respect this
585last argument or do it with varying precision. Default value for
586@var{min-change} is 1 (one percent), for @var{min-time}---0.2
587(seconds.)
588
589This function calls @code{progress-reporter-update}, so the first
590message is printed immediately.
591@end defun
592
593@defun progress-reporter-update reporter value
594This function does the main work of reporting progress of your
595operation. It print the message of @var{reporter} followed by
596progress percentage determined by @var{value}. If percentage is zero,
597then it is not printed at all.
598
599@var{reporter} must be the result of a call to
600@code{make-progress-reporter}. @var{value} specifies the current
601state of your operation and must be between @var{min-value} and
602@var{max-value} (inclusive) as passed to
603@code{make-progress-reporter}. For instance, if you scan a buffer,
604then @var{value} should be the result of a call to @code{point}.
605
606This function respects @var{min-change} and @var{min-time} as passed
607to @code{make-progress-reporter} and so does not output new messages
608on every invocation. It is thus very fast and normally you should not
609try to reduce the number of calls to it: resulting overhead will most
610likely negate your effort.
611@end defun
612
613@defun progress-reporter-force-update reporter value &optional new-message
614This function is similar to @code{progress-reporter-update} except
615that it prints a message in the echo area unconditionally.
616
617The first two arguments have the same meaning as for
618@code{progress-reporter-update}. Optional @var{new-message} allows
619you to change the message of the @var{reporter}. Since this functions
620always updates the echo area, such a change will be immediately
621presented to the user.
622@end defun
623
624@defun progress-reporter-done reporter
625This function should be called when the operation is finished. It
626prints the message of @var{reporter} followed by word ``done'' in the
627echo area.
628
629You should always call this function and not hope for
630@code{progress-reporter-update} to print ``100%.'' Firstly, it may
631never print it, there are many good reasons for this not to happen.
632Secondly, ``done'' is more explicit.
633@end defun
634
f0d3d9fe
SM
635@defmac dotimes-with-progress-reporter (var count [result]) message body...
636This is a convenience macro that works the same way as @code{dotimes}
637does, but also reports loop progress using the functions described
638above. It allows you to save some typing.
639
640You can rewrite the example in the beginning of this node using
641this macro this way:
642
643@example
644(dotimes-with-progress-reporter
645 (k 500)
646 "Collecting some mana for Emacs..."
647 (sit-for 0.01))
648@end example
649@end defmac
650
22697dac
KH
651@node Invisible Text
652@section Invisible Text
653
654@cindex invisible text
655You can make characters @dfn{invisible}, so that they do not appear on
656the screen, with the @code{invisible} property. This can be either a
a9f0a989
RS
657text property (@pxref{Text Properties}) or a property of an overlay
658(@pxref{Overlays}).
22697dac
KH
659
660In the simplest case, any non-@code{nil} @code{invisible} property makes
661a character invisible. This is the default case---if you don't alter
662the default value of @code{buffer-invisibility-spec}, this is how the
31b0520f
RS
663@code{invisible} property works. You should normally use @code{t}
664as the value of the @code{invisible} property if you don't plan
665to set @code{buffer-invisibility-spec} yourself.
22697dac
KH
666
667More generally, you can use the variable @code{buffer-invisibility-spec}
668to control which values of the @code{invisible} property make text
669invisible. This permits you to classify the text into different subsets
670in advance, by giving them different @code{invisible} values, and
671subsequently make various subsets visible or invisible by changing the
672value of @code{buffer-invisibility-spec}.
673
674Controlling visibility with @code{buffer-invisibility-spec} is
a40d4712
PR
675especially useful in a program to display the list of entries in a
676database. It permits the implementation of convenient filtering
677commands to view just a part of the entries in the database. Setting
678this variable is very fast, much faster than scanning all the text in
679the buffer looking for properties to change.
22697dac
KH
680
681@defvar buffer-invisibility-spec
682This variable specifies which kinds of @code{invisible} properties
658f691f
RS
683actually make a character invisible. Setting this variable makes it
684buffer-local.
22697dac
KH
685
686@table @asis
687@item @code{t}
688A character is invisible if its @code{invisible} property is
689non-@code{nil}. This is the default.
690
691@item a list
969fe9b5
RS
692Each element of the list specifies a criterion for invisibility; if a
693character's @code{invisible} property fits any one of these criteria,
694the character is invisible. The list can have two kinds of elements:
22697dac
KH
695
696@table @code
697@item @var{atom}
969fe9b5 698A character is invisible if its @code{invisible} property value
22697dac
KH
699is @var{atom} or if it is a list with @var{atom} as a member.
700
701@item (@var{atom} . t)
969fe9b5 702A character is invisible if its @code{invisible} property value
22697dac
KH
703is @var{atom} or if it is a list with @var{atom} as a member.
704Moreover, if this character is at the end of a line and is followed
705by a visible newline, it displays an ellipsis.
706@end table
707@end table
708@end defvar
709
f9f59935
RS
710 Two functions are specifically provided for adding elements to
711@code{buffer-invisibility-spec} and removing elements from it.
712
f9f59935 713@defun add-to-invisibility-spec element
31b0520f
RS
714This function adds the element @var{element} to
715@code{buffer-invisibility-spec} (if it is not already present in that
716list). If @code{buffer-invisibility-spec} was @code{t}, it changes to
717a list, @code{(t)}, so that text whose @code{invisible} property
718is @code{t} remains invisible.
f9f59935
RS
719@end defun
720
f9f59935 721@defun remove-from-invisibility-spec element
812a2341 722This removes the element @var{element} from
31b0520f
RS
723@code{buffer-invisibility-spec}. This does nothing if @var{element}
724is not in the list.
f9f59935
RS
725@end defun
726
31b0520f
RS
727 A convention for use of @code{buffer-invisibility-spec} is that a
728major mode should use the mode's own name as an element of
729@code{buffer-invisibility-spec} and as the value of the
730@code{invisible} property:
f9f59935
RS
731
732@example
969fe9b5 733;; @r{If you want to display an ellipsis:}
177c0ea7 734(add-to-invisibility-spec '(my-symbol . t))
969fe9b5 735;; @r{If you don't want ellipsis:}
177c0ea7 736(add-to-invisibility-spec 'my-symbol)
f9f59935
RS
737
738(overlay-put (make-overlay beginning end)
739 'invisible 'my-symbol)
740
969fe9b5 741;; @r{When done with the overlays:}
f9f59935 742(remove-from-invisibility-spec '(my-symbol . t))
969fe9b5 743;; @r{Or respectively:}
f9f59935
RS
744(remove-from-invisibility-spec 'my-symbol)
745@end example
746
5e8ae792 747@vindex line-move-ignore-invisible
00b3c1cd 748 Ordinarily, functions that operate on text or move point do not care
5e8ae792
RS
749whether the text is invisible. The user-level line motion commands
750explicitly ignore invisible newlines if
751@code{line-move-ignore-invisible} is non-@code{nil}, but only because
752they are explicitly programmed to do so.
bfe721d1 753
00b3c1cd
RS
754 However, if a command ends with point inside or immediately after
755invisible text, the main editing loop moves point further forward or
756further backward (in the same direction that the command already moved
757it) until that condition is no longer true. Thus, if the command
758moved point back into an invisible range, Emacs moves point back to
759the beginning of that range, following the previous visible character.
760If the command moved point forward into an invisible range, Emacs
761moves point forward past the first visible character that follows the
762invisible text.
763
f9f59935
RS
764 Incremental search can make invisible overlays visible temporarily
765and/or permanently when a match includes invisible text. To enable
766this, the overlay should have a non-@code{nil}
767@code{isearch-open-invisible} property. The property value should be a
768function to be called with the overlay as an argument. This function
769should make the overlay visible permanently; it is used when the match
770overlaps the overlay on exit from the search.
771
772 During the search, such overlays are made temporarily visible by
773temporarily modifying their invisible and intangible properties. If you
ebc6903b 774want this to be done differently for a certain overlay, give it an
f9f59935
RS
775@code{isearch-open-invisible-temporary} property which is a function.
776The function is called with two arguments: the first is the overlay, and
f21b06b7 777the second is @code{nil} to make the overlay visible, or @code{t} to
a9f0a989 778make it invisible again.
f9f59935 779
42b85554
RS
780@node Selective Display
781@section Selective Display
782@cindex selective display
783
969fe9b5
RS
784 @dfn{Selective display} refers to a pair of related features for
785hiding certain lines on the screen.
42b85554
RS
786
787 The first variant, explicit selective display, is designed for use in
969fe9b5
RS
788a Lisp program: it controls which lines are hidden by altering the text.
789The invisible text feature (@pxref{Invisible Text}) has partially
790replaced this feature.
22697dac
KH
791
792 In the second variant, the choice of lines to hide is made
bfe721d1 793automatically based on indentation. This variant is designed to be a
22697dac 794user-level feature.
42b85554
RS
795
796 The way you control explicit selective display is by replacing a
78608595 797newline (control-j) with a carriage return (control-m). The text that
42b85554
RS
798was formerly a line following that newline is now invisible. Strictly
799speaking, it is temporarily no longer a line at all, since only newlines
800can separate lines; it is now part of the previous line.
801
802 Selective display does not directly affect editing commands. For
803example, @kbd{C-f} (@code{forward-char}) moves point unhesitatingly into
804invisible text. However, the replacement of newline characters with
805carriage return characters affects some editing commands. For example,
806@code{next-line} skips invisible lines, since it searches only for
807newlines. Modes that use selective display can also define commands
808that take account of the newlines, or that make parts of the text
809visible or invisible.
810
811 When you write a selectively displayed buffer into a file, all the
812control-m's are output as newlines. This means that when you next read
813in the file, it looks OK, with nothing invisible. The selective display
814effect is seen only within Emacs.
815
816@defvar selective-display
817This buffer-local variable enables selective display. This means that
177c0ea7 818lines, or portions of lines, may be made invisible.
42b85554
RS
819
820@itemize @bullet
821@item
a40d4712
PR
822If the value of @code{selective-display} is @code{t}, then the character
823control-m marks the start of invisible text; the control-m, and the rest
824of the line following it, are not displayed. This is explicit selective
825display.
42b85554
RS
826
827@item
828If the value of @code{selective-display} is a positive integer, then
829lines that start with more than that many columns of indentation are not
830displayed.
831@end itemize
832
833When some portion of a buffer is invisible, the vertical movement
834commands operate as if that portion did not exist, allowing a single
835@code{next-line} command to skip any number of invisible lines.
836However, character movement commands (such as @code{forward-char}) do
837not skip the invisible portion, and it is possible (if tricky) to insert
838or delete text in an invisible portion.
839
840In the examples below, we show the @emph{display appearance} of the
841buffer @code{foo}, which changes with the value of
842@code{selective-display}. The @emph{contents} of the buffer do not
843change.
844
845@example
846@group
847(setq selective-display nil)
848 @result{} nil
849
850---------- Buffer: foo ----------
8511 on this column
852 2on this column
853 3n this column
854 3n this column
855 2on this column
8561 on this column
857---------- Buffer: foo ----------
858@end group
859
860@group
861(setq selective-display 2)
862 @result{} 2
863
864---------- Buffer: foo ----------
8651 on this column
866 2on this column
867 2on this column
8681 on this column
869---------- Buffer: foo ----------
870@end group
871@end example
872@end defvar
873
874@defvar selective-display-ellipses
875If this buffer-local variable is non-@code{nil}, then Emacs displays
876@samp{@dots{}} at the end of a line that is followed by invisible text.
877This example is a continuation of the previous one.
878
879@example
880@group
881(setq selective-display-ellipses t)
882 @result{} t
883
884---------- Buffer: foo ----------
8851 on this column
886 2on this column ...
887 2on this column
8881 on this column
889---------- Buffer: foo ----------
890@end group
891@end example
892
893You can use a display table to substitute other text for the ellipsis
894(@samp{@dots{}}). @xref{Display Tables}.
895@end defvar
896
897@node Overlay Arrow
898@section The Overlay Arrow
899@cindex overlay arrow
900
901 The @dfn{overlay arrow} is useful for directing the user's attention
902to a particular line in a buffer. For example, in the modes used for
903interface to debuggers, the overlay arrow indicates the line of code
904about to be executed.
905
906@defvar overlay-arrow-string
78608595
RS
907This variable holds the string to display to call attention to a
908particular line, or @code{nil} if the arrow feature is not in use.
bb2337f5
DL
909On a graphical display the contents of the string are ignored; instead a
910glyph is displayed in the fringe area to the left of the display area.
42b85554
RS
911@end defvar
912
913@defvar overlay-arrow-position
78608595 914This variable holds a marker that indicates where to display the overlay
bb2337f5
DL
915arrow. It should point at the beginning of a line. On a non-graphical
916display the arrow text
78608595
RS
917appears at the beginning of that line, overlaying any text that would
918otherwise appear. Since the arrow is usually short, and the line
919usually begins with indentation, normally nothing significant is
920overwritten.
921
922The overlay string is displayed only in the buffer that this marker
42b85554
RS
923points into. Thus, only one buffer can have an overlay arrow at any
924given time.
925@c !!! overlay-arrow-position: but the overlay string may remain in the display
926@c of some other buffer until an update is required. This should be fixed
927@c now. Is it?
928@end defvar
929
969fe9b5 930 You can do a similar job by creating an overlay with a
22697dac
KH
931@code{before-string} property. @xref{Overlay Properties}.
932
42b85554
RS
933@node Temporary Displays
934@section Temporary Displays
935
969fe9b5
RS
936 Temporary displays are used by Lisp programs to put output into a
937buffer and then present it to the user for perusal rather than for
938editing. Many help commands use this feature.
42b85554
RS
939
940@defspec with-output-to-temp-buffer buffer-name forms@dots{}
b6954afd
RS
941This function executes @var{forms} while arranging to insert any output
942they print into the buffer named @var{buffer-name}, which is first
943created if necessary, and put into Help mode. Finally, the buffer is
944displayed in some window, but not selected.
945
d7cd58d7
LT
946If the @var{forms} do not change the major mode in the output buffer,
947so that it is still Help mode at the end of their execution, then
b6954afd 948@code{with-output-to-temp-buffer} makes this buffer read-only at the
d7cd58d7 949end, and also scans it for function and variable names to make them
68e74f25
LT
950into clickable cross-references. @xref{Docstring hyperlinks, , Tips
951for Documentation Strings}, in particular the item on hyperlinks in
952documentation strings, for more details.
42b85554
RS
953
954The string @var{buffer-name} specifies the temporary buffer, which
955need not already exist. The argument must be a string, not a buffer.
956The buffer is erased initially (with no questions asked), and it is
957marked as unmodified after @code{with-output-to-temp-buffer} exits.
958
959@code{with-output-to-temp-buffer} binds @code{standard-output} to the
960temporary buffer, then it evaluates the forms in @var{forms}. Output
961using the Lisp output functions within @var{forms} goes by default to
962that buffer (but screen display and messages in the echo area, although
963they are ``output'' in the general sense of the word, are not affected).
964@xref{Output Functions}.
965
b6954afd
RS
966Several hooks are available for customizing the behavior
967of this construct; they are listed below.
968
42b85554
RS
969The value of the last form in @var{forms} is returned.
970
971@example
972@group
973---------- Buffer: foo ----------
974 This is the contents of foo.
975---------- Buffer: foo ----------
976@end group
977
978@group
979(with-output-to-temp-buffer "foo"
980 (print 20)
981 (print standard-output))
982@result{} #<buffer foo>
983
984---------- Buffer: foo ----------
98520
986
987#<buffer foo>
988
989---------- Buffer: foo ----------
990@end group
991@end example
992@end defspec
993
994@defvar temp-buffer-show-function
78608595 995If this variable is non-@code{nil}, @code{with-output-to-temp-buffer}
42b85554
RS
996calls it as a function to do the job of displaying a help buffer. The
997function gets one argument, which is the buffer it should display.
a9f0a989
RS
998
999It is a good idea for this function to run @code{temp-buffer-show-hook}
1000just as @code{with-output-to-temp-buffer} normally would, inside of
b6954afd 1001@code{save-selected-window} and with the chosen window and buffer
a9f0a989
RS
1002selected.
1003@end defvar
1004
b6954afd
RS
1005@defvar temp-buffer-setup-hook
1006@tindex temp-buffer-setup-hook
1007This normal hook is run by @code{with-output-to-temp-buffer} before
13a8e917
RS
1008evaluating @var{body}. When the hook runs, the temporary buffer is
1009current. This hook is normally set up with a function to put the
1010buffer in Help mode.
b6954afd
RS
1011@end defvar
1012
a9f0a989
RS
1013@defvar temp-buffer-show-hook
1014This normal hook is run by @code{with-output-to-temp-buffer} after
13a8e917
RS
1015displaying the temporary buffer. When the hook runs, the temporary buffer
1016is current, and the window it was displayed in is selected. This hook
1017is normally set up with a function to make the buffer read only, and
1018find function names and variable names in it, provided the major mode
1019is Help mode.
42b85554
RS
1020@end defvar
1021
1022@defun momentary-string-display string position &optional char message
1023This function momentarily displays @var{string} in the current buffer at
1024@var{position}. It has no effect on the undo list or on the buffer's
1025modification status.
1026
1027The momentary display remains until the next input event. If the next
1028input event is @var{char}, @code{momentary-string-display} ignores it
1029and returns. Otherwise, that event remains buffered for subsequent use
1030as input. Thus, typing @var{char} will simply remove the string from
1031the display, while typing (say) @kbd{C-f} will remove the string from
1032the display and later (presumably) move point forward. The argument
1033@var{char} is a space by default.
1034
1035The return value of @code{momentary-string-display} is not meaningful.
1036
bfe721d1 1037If the string @var{string} does not contain control characters, you can
969fe9b5
RS
1038do the same job in a more general way by creating (and then subsequently
1039deleting) an overlay with a @code{before-string} property.
1040@xref{Overlay Properties}.
bfe721d1 1041
42b85554
RS
1042If @var{message} is non-@code{nil}, it is displayed in the echo area
1043while @var{string} is displayed in the buffer. If it is @code{nil}, a
1044default message says to type @var{char} to continue.
1045
1046In this example, point is initially located at the beginning of the
1047second line:
1048
1049@example
1050@group
1051---------- Buffer: foo ----------
1052This is the contents of foo.
1053@point{}Second line.
1054---------- Buffer: foo ----------
1055@end group
1056
1057@group
1058(momentary-string-display
1059 "**** Important Message! ****"
1060 (point) ?\r
1061 "Type RET when done reading")
1062@result{} t
1063@end group
1064
1065@group
1066---------- Buffer: foo ----------
1067This is the contents of foo.
1068**** Important Message! ****Second line.
1069---------- Buffer: foo ----------
1070
1071---------- Echo Area ----------
1072Type RET when done reading
1073---------- Echo Area ----------
1074@end group
1075@end example
1076@end defun
1077
1078@node Overlays
1079@section Overlays
1080@cindex overlays
1081
1082You can use @dfn{overlays} to alter the appearance of a buffer's text on
bfe721d1
KH
1083the screen, for the sake of presentation features. An overlay is an
1084object that belongs to a particular buffer, and has a specified
1085beginning and end. It also has properties that you can examine and set;
1086these affect the display of the text within the overlay.
42b85554 1087
812a2341
RS
1088An overlays uses markers to record its beginning and end; thus,
1089editing the text of the buffer adjusts the beginning and end of each
1090overlay so that it stays with the text. When you create the overlay,
1091you can specify whether text inserted at the beginning should be
1092inside the overlay or outside, and likewise for the end of the overlay.
1093
42b85554 1094@menu
02c77ee9 1095* Overlay Properties:: How to read and set properties.
42b85554 1096 What properties do to the screen display.
eda77a0f
DL
1097* Managing Overlays:: Creating and moving overlays.
1098* Finding Overlays:: Searching for overlays.
42b85554
RS
1099@end menu
1100
1101@node Overlay Properties
1102@subsection Overlay Properties
1103
8241495d 1104 Overlay properties are like text properties in that the properties that
a9f0a989
RS
1105alter how a character is displayed can come from either source. But in
1106most respects they are different. Text properties are considered a part
1107of the text; overlays are specifically considered not to be part of the
1108text. Thus, copying text between various buffers and strings preserves
1109text properties, but does not try to preserve overlays. Changing a
1110buffer's text properties marks the buffer as modified, while moving an
1111overlay or changing its properties does not. Unlike text property
1112changes, overlay changes are not recorded in the buffer's undo list.
1113@xref{Text Properties}, for comparison.
42b85554 1114
8241495d
RS
1115 These functions are used for reading and writing the properties of an
1116overlay:
1117
1118@defun overlay-get overlay prop
1119This function returns the value of property @var{prop} recorded in
1120@var{overlay}, if any. If @var{overlay} does not record any value for
1121that property, but it does have a @code{category} property which is a
1122symbol, that symbol's @var{prop} property is used. Otherwise, the value
1123is @code{nil}.
1124@end defun
1125
1126@defun overlay-put overlay prop value
1127This function sets the value of property @var{prop} recorded in
1128@var{overlay} to @var{value}. It returns @var{value}.
00b3c1cd
RS
1129@end defun
1130
1131@defun overlay-properties overlay
1132This returns a copy of the property list of @var{overlay}.
8241495d
RS
1133@end defun
1134
1135 See also the function @code{get-char-property} which checks both
1136overlay properties and text properties for a given character.
1137@xref{Examining Properties}.
1138
1139 Many overlay properties have special meanings; here is a table
1140of them:
1141
42b85554
RS
1142@table @code
1143@item priority
1144@kindex priority @r{(overlay property)}
f1579f52
RS
1145This property's value (which should be a nonnegative integer number)
1146determines the priority of the overlay. The priority matters when two
1147or more overlays cover the same character and both specify the same
1148property; the one whose @code{priority} value is larger takes priority
1149over the other. For the @code{face} property, the higher priority
1150value does not completely replace the other; instead, its face
1151attributes override the face attributes of the lower priority
1152@code{face} property.
42b85554
RS
1153
1154Currently, all overlays take priority over text properties. Please
1155avoid using negative priority values, as we have not yet decided just
1156what they should mean.
1157
1158@item window
1159@kindex window @r{(overlay property)}
1160If the @code{window} property is non-@code{nil}, then the overlay
1161applies only on that window.
1162
22697dac
KH
1163@item category
1164@kindex category @r{(overlay property)}
1165If an overlay has a @code{category} property, we call it the
bfe721d1 1166@dfn{category} of the overlay. It should be a symbol. The properties
22697dac
KH
1167of the symbol serve as defaults for the properties of the overlay.
1168
42b85554
RS
1169@item face
1170@kindex face @r{(overlay property)}
f9f59935 1171This property controls the way text is displayed---for example, which
8241495d 1172font and which colors. @xref{Faces}, for more information.
f9f59935 1173
8241495d 1174In the simplest case, the value is a face name. It can also be a list;
a40d4712 1175then each element can be any of these possibilities:
8241495d
RS
1176
1177@itemize @bullet
1178@item
1179A face name (a symbol or string).
1180
1181@item
911a7105
RS
1182A property list of face attributes. This has the form (@var{keyword}
1183@var{value} @dots{}), where each @var{keyword} is a face attribute
1184name and @var{value} is a meaningful value for that attribute. With
1185this feature, you do not need to create a face each time you want to
1186specify a particular attribute for certain text. @xref{Face
1187Attributes}.
8241495d
RS
1188
1189@item
1190A cons cell of the form @code{(foreground-color . @var{color-name})} or
1191@code{(background-color . @var{color-name})}. These elements specify
1192just the foreground color or just the background color.
1193
1194@code{(foreground-color . @var{color-name})} is equivalent to
1195@code{(:foreground @var{color-name})}, and likewise for the background.
1196@end itemize
42b85554
RS
1197
1198@item mouse-face
1199@kindex mouse-face @r{(overlay property)}
1200This property is used instead of @code{face} when the mouse is within
f9f59935 1201the range of the overlay.
42b85554 1202
8241495d
RS
1203@item display
1204@kindex display @r{(overlay property)}
1205This property activates various features that change the
1206way text is displayed. For example, it can make text appear taller
24eb6c0e 1207or shorter, higher or lower, wider or narrower, or replaced with an image.
8241495d
RS
1208@xref{Display Property}.
1209
1210@item help-echo
d94f2aab 1211@kindex help-echo @r{(overlay property)}
e3b9fc91
DL
1212If an overlay has a @code{help-echo} property, then when you move the
1213mouse onto the text in the overlay, Emacs displays a help string in the
1214echo area, or in the tooltip window. For details see @ref{Text
2e46cd09 1215help-echo}.
8241495d 1216
42b85554
RS
1217@item modification-hooks
1218@kindex modification-hooks @r{(overlay property)}
1219This property's value is a list of functions to be called if any
1220character within the overlay is changed or if text is inserted strictly
22697dac
KH
1221within the overlay.
1222
1223The hook functions are called both before and after each change.
1224If the functions save the information they receive, and compare notes
1225between calls, they can determine exactly what change has been made
1226in the buffer text.
1227
1228When called before a change, each function receives four arguments: the
1229overlay, @code{nil}, and the beginning and end of the text range to be
a890e1b0 1230modified.
42b85554 1231
22697dac
KH
1232When called after a change, each function receives five arguments: the
1233overlay, @code{t}, the beginning and end of the text range just
1234modified, and the length of the pre-change text replaced by that range.
1235(For an insertion, the pre-change length is zero; for a deletion, that
1236length is the number of characters deleted, and the post-change
bfe721d1 1237beginning and end are equal.)
22697dac 1238
42b85554
RS
1239@item insert-in-front-hooks
1240@kindex insert-in-front-hooks @r{(overlay property)}
22697dac
KH
1241This property's value is a list of functions to be called before and
1242after inserting text right at the beginning of the overlay. The calling
1243conventions are the same as for the @code{modification-hooks} functions.
42b85554
RS
1244
1245@item insert-behind-hooks
1246@kindex insert-behind-hooks @r{(overlay property)}
22697dac
KH
1247This property's value is a list of functions to be called before and
1248after inserting text right at the end of the overlay. The calling
1249conventions are the same as for the @code{modification-hooks} functions.
42b85554
RS
1250
1251@item invisible
1252@kindex invisible @r{(overlay property)}
22697dac
KH
1253The @code{invisible} property can make the text in the overlay
1254invisible, which means that it does not appear on the screen.
1255@xref{Invisible Text}, for details.
1256
1257@item intangible
1258@kindex intangible @r{(overlay property)}
1259The @code{intangible} property on an overlay works just like the
bfe721d1 1260@code{intangible} text property. @xref{Special Properties}, for details.
f9f59935
RS
1261
1262@item isearch-open-invisible
a9f0a989
RS
1263This property tells incremental search how to make an invisible overlay
1264visible, permanently, if the final match overlaps it. @xref{Invisible
f9f59935 1265Text}.
42b85554 1266
a9f0a989
RS
1267@item isearch-open-invisible-temporary
1268This property tells incremental search how to make an invisible overlay
1269visible, temporarily, during the search. @xref{Invisible Text}.
1270
42b85554
RS
1271@item before-string
1272@kindex before-string @r{(overlay property)}
1273This property's value is a string to add to the display at the beginning
1274of the overlay. The string does not appear in the buffer in any
a40d4712 1275sense---only on the screen.
42b85554
RS
1276
1277@item after-string
1278@kindex after-string @r{(overlay property)}
1279This property's value is a string to add to the display at the end of
1280the overlay. The string does not appear in the buffer in any
a40d4712 1281sense---only on the screen.
22697dac
KH
1282
1283@item evaporate
1284@kindex evaporate @r{(overlay property)}
1285If this property is non-@code{nil}, the overlay is deleted automatically
11cd6064
RS
1286if it becomes empty (i.e., if its length becomes zero). If you give
1287an empty overlay a non-@code{nil} @code{evaporate} property, that deletes
1288it immediately.
d2609065 1289
ce75fd23 1290@item local-map
969fe9b5 1291@cindex keymap of character (and overlays)
ce75fd23 1292@kindex local-map @r{(overlay property)}
d2609065
RS
1293If this property is non-@code{nil}, it specifies a keymap for a portion
1294of the text. The property's value replaces the buffer's local map, when
1295the character after point is within the overlay. @xref{Active Keymaps}.
62fb5c66
DL
1296
1297@item keymap
1298@kindex keymap @r{(overlay property)}
1299The @code{keymap} property is similar to @code{local-map} but overrides the
1300buffer's local map (and the map specified by the @code{local-map}
1301property) rather than replacing it.
42b85554
RS
1302@end table
1303
42b85554
RS
1304@node Managing Overlays
1305@subsection Managing Overlays
1306
1307 This section describes the functions to create, delete and move
1308overlays, and to examine their contents.
1309
00b3c1cd
RS
1310@defun overlayp object
1311This function returns @code{t} if @var{object} is an overlay.
1312@end defun
1313
f9f59935 1314@defun make-overlay start end &optional buffer front-advance rear-advance
78608595 1315This function creates and returns an overlay that belongs to
42b85554
RS
1316@var{buffer} and ranges from @var{start} to @var{end}. Both @var{start}
1317and @var{end} must specify buffer positions; they may be integers or
1318markers. If @var{buffer} is omitted, the overlay is created in the
1319current buffer.
f9f59935
RS
1320
1321The arguments @var{front-advance} and @var{rear-advance} specify the
1322insertion type for the start of the overlay and for the end of the
812a2341
RS
1323overlay, respectively. @xref{Marker Insertion Types}. If
1324@var{front-advance} is non-@code{nil}, text inserted at the beginning
1325of the overlay is excluded from the overlay. If @var{read-advance} is
1326non-@code{nil}, text inserted at the beginning of the overlay is
1327included in the overlay.
42b85554
RS
1328@end defun
1329
1330@defun overlay-start overlay
f9f59935
RS
1331This function returns the position at which @var{overlay} starts,
1332as an integer.
42b85554
RS
1333@end defun
1334
1335@defun overlay-end overlay
f9f59935
RS
1336This function returns the position at which @var{overlay} ends,
1337as an integer.
42b85554
RS
1338@end defun
1339
1340@defun overlay-buffer overlay
65c492fd 1341This function returns the buffer that @var{overlay} belongs to. It
911a7105 1342returns @code{nil} if @var{overlay} has been deleted.
42b85554
RS
1343@end defun
1344
1345@defun delete-overlay overlay
1346This function deletes @var{overlay}. The overlay continues to exist as
2468d0c0
DL
1347a Lisp object, and its property list is unchanged, but it ceases to be
1348attached to the buffer it belonged to, and ceases to have any effect on
1349display.
a9f0a989 1350
2468d0c0
DL
1351A deleted overlay is not permanently disconnected. You can give it a
1352position in a buffer again by calling @code{move-overlay}.
42b85554
RS
1353@end defun
1354
1355@defun move-overlay overlay start end &optional buffer
1356This function moves @var{overlay} to @var{buffer}, and places its bounds
1357at @var{start} and @var{end}. Both arguments @var{start} and @var{end}
2468d0c0
DL
1358must specify buffer positions; they may be integers or markers.
1359
1360If @var{buffer} is omitted, @var{overlay} stays in the same buffer it
1361was already associated with; if @var{overlay} was deleted, it goes into
1362the current buffer.
42b85554
RS
1363
1364The return value is @var{overlay}.
1365
1366This is the only valid way to change the endpoints of an overlay. Do
1367not try modifying the markers in the overlay by hand, as that fails to
1368update other vital data structures and can cause some overlays to be
1369``lost''.
1370@end defun
1371
2468d0c0
DL
1372 Here are some examples:
1373
1374@example
1375;; @r{Create an overlay.}
1376(setq foo (make-overlay 1 10))
1377 @result{} #<overlay from 1 to 10 in display.texi>
1378(overlay-start foo)
1379 @result{} 1
1380(overlay-end foo)
1381 @result{} 10
1382(overlay-buffer foo)
1383 @result{} #<buffer display.texi>
1384;; @r{Give it a property we can check later.}
1385(overlay-put foo 'happy t)
1386 @result{} t
1387;; @r{Verify the property is present.}
1388(overlay-get foo 'happy)
1389 @result{} t
1390;; @r{Move the overlay.}
1391(move-overlay foo 5 20)
1392 @result{} #<overlay from 5 to 20 in display.texi>
1393(overlay-start foo)
1394 @result{} 5
1395(overlay-end foo)
1396 @result{} 20
1397;; @r{Delete the overlay.}
1398(delete-overlay foo)
1399 @result{} nil
1400;; @r{Verify it is deleted.}
1401foo
1402 @result{} #<overlay in no buffer>
1403;; @r{A deleted overlay has no position.}
1404(overlay-start foo)
1405 @result{} nil
1406(overlay-end foo)
1407 @result{} nil
1408(overlay-buffer foo)
1409 @result{} nil
1410;; @r{Undelete the overlay.}
1411(move-overlay foo 1 20)
1412 @result{} #<overlay from 1 to 20 in display.texi>
1413;; @r{Verify the results.}
1414(overlay-start foo)
1415 @result{} 1
1416(overlay-end foo)
1417 @result{} 20
1418(overlay-buffer foo)
1419 @result{} #<buffer display.texi>
05aea714 1420;; @r{Moving and deleting the overlay does not change its properties.}
2468d0c0
DL
1421(overlay-get foo 'happy)
1422 @result{} t
1423@end example
1424
1425@node Finding Overlays
1426@subsection Searching for Overlays
1427
42b85554 1428@defun overlays-at pos
2468d0c0
DL
1429This function returns a list of all the overlays that cover the
1430character at position @var{pos} in the current buffer. The list is in
1431no particular order. An overlay contains position @var{pos} if it
1432begins at or before @var{pos}, and ends after @var{pos}.
1433
1434To illustrate usage, here is a Lisp function that returns a list of the
1435overlays that specify property @var{prop} for the character at point:
1436
1437@smallexample
1438(defun find-overlays-specifying (prop)
1439 (let ((overlays (overlays-at (point)))
1440 found)
1441 (while overlays
86b032fa 1442 (let ((overlay (car overlays)))
2468d0c0
DL
1443 (if (overlay-get overlay prop)
1444 (setq found (cons overlay found))))
1445 (setq overlays (cdr overlays)))
1446 found))
1447@end smallexample
42b85554
RS
1448@end defun
1449
f9f59935
RS
1450@defun overlays-in beg end
1451This function returns a list of the overlays that overlap the region
1452@var{beg} through @var{end}. ``Overlap'' means that at least one
1453character is contained within the overlay and also contained within the
1454specified region; however, empty overlays are included in the result if
2468d0c0 1455they are located at @var{beg}, or strictly between @var{beg} and @var{end}.
f9f59935
RS
1456@end defun
1457
42b85554
RS
1458@defun next-overlay-change pos
1459This function returns the buffer position of the next beginning or end
1460of an overlay, after @var{pos}.
1461@end defun
1462
22697dac
KH
1463@defun previous-overlay-change pos
1464This function returns the buffer position of the previous beginning or
1465end of an overlay, before @var{pos}.
1466@end defun
1467
2468d0c0
DL
1468 Here's an easy way to use @code{next-overlay-change} to search for the
1469next character which gets a non-@code{nil} @code{happy} property from
1470either its overlays or its text properties (@pxref{Property Search}):
1471
1472@smallexample
1473(defun find-overlay-prop (prop)
1474 (save-excursion
1475 (while (and (not (eobp))
1476 (not (get-char-property (point) 'happy)))
1477 (goto-char (min (next-overlay-change (point))
1478 (next-single-property-change (point) 'happy))))
1479 (point)))
1480@end smallexample
1481
f9f59935
RS
1482@node Width
1483@section Width
1484
1485Since not all characters have the same width, these functions let you
969fe9b5
RS
1486check the width of a character. @xref{Primitive Indent}, and
1487@ref{Screen Lines}, for related functions.
f9f59935 1488
f9f59935
RS
1489@defun char-width char
1490This function returns the width in columns of the character @var{char},
1491if it were displayed in the current buffer and the selected window.
1492@end defun
1493
f9f59935
RS
1494@defun string-width string
1495This function returns the width in columns of the string @var{string},
1496if it were displayed in the current buffer and the selected window.
1497@end defun
1498
f9f59935
RS
1499@defun truncate-string-to-width string width &optional start-column padding
1500This function returns the part of @var{string} that fits within
1501@var{width} columns, as a new string.
1502
1503If @var{string} does not reach @var{width}, then the result ends where
1504@var{string} ends. If one multi-column character in @var{string}
1505extends across the column @var{width}, that character is not included in
1506the result. Thus, the result can fall short of @var{width} but cannot
1507go beyond it.
1508
1509The optional argument @var{start-column} specifies the starting column.
1510If this is non-@code{nil}, then the first @var{start-column} columns of
1511the string are omitted from the value. If one multi-column character in
1512@var{string} extends across the column @var{start-column}, that
1513character is not included.
1514
1515The optional argument @var{padding}, if non-@code{nil}, is a padding
1516character added at the beginning and end of the result string, to extend
1517it to exactly @var{width} columns. The padding character is used at the
1518end of the result if it falls short of @var{width}. It is also used at
1519the beginning of the result if one multi-column character in
1520@var{string} extends across the column @var{start-column}.
1521
1522@example
1523(truncate-string-to-width "\tab\t" 12 4)
1524 @result{} "ab"
6bc3abcb 1525(truncate-string-to-width "\tab\t" 12 4 ?\s)
f9f59935
RS
1526 @result{} " ab "
1527@end example
1528@end defun
1529
93449dd1
KS
1530@node Line Height
1531@section Line Height
1532@cindex line height
1533
1534 The total height of each display line consists of the height of the
1535contents of the line, and additional vertical line spacing below the
1536display row.
1537
1538 The height of the line contents is normally determined from the
1539maximum height of any character or image on that display line,
1540including the final newline if there is one. (A line that is
1541continued doesn't include a final newline.) In the most common case,
1542the line height equals the height of the default frame font.
1543
9eb8959a
RS
1544 There are several ways to explicitly control or change the line
1545height, either by specifying an absolute height for the display line,
1546or by adding additional vertical space below one or all lines.
93449dd1
KS
1547
1548@kindex line-height @r{(text property)}
9eb8959a
RS
1549 A newline can have a @code{line-height} text or overlay property
1550that controls the total height of the display line ending in that
1225f637
KS
1551newline.
1552
1553 If the property value is a list @code{(@var{height} @var{total})},
1554then @var{height} is used as the actual property value for the
1555@code{line-height}, and @var{total} specifies the total displayed
1556height of the line, so the line spacing added below the line equals
1557the @var{total} height minus the actual line height. In this case,
1558the other ways to specify the line spacing are ignored.
1559
1560 If the property value is @code{t}, the displayed height of the
af046edf 1561line is exactly what its contents demand; no line-spacing is added.
9eb8959a
RS
1562This case is useful for tiling small images or image slices without
1563adding blank areas between the images.
93449dd1 1564
1225f637 1565 If the property value is not @code{t}, it is a height spec. A height
af046edf
RS
1566spec stands for a numeric height value; this heigh spec specifies the
1567actual line height, @var{line-height}. There are several ways to
1568write a height spec; here's how each of them translates into a numeric
1569height:
93449dd1 1570
9eb8959a
RS
1571@table @code
1572@item @var{integer}
af046edf 1573If the height spec is a positive integer, the height value is that integer.
9eb8959a 1574@item @var{float}
af046edf
RS
1575If the height spec is a float, @var{float}, the numeric height value
1576is @var{float} times the frame's default line height.
1225f637 1577@item (@var{face} . @var{ratio})
af046edf
RS
1578If the height spec is a cons of the format shown, the numeric height
1579is @var{ratio} times the height of face @var{face}. @var{ratio} can
1225f637
KS
1580be any type of number, or @code{nil} which means a ratio of 1.
1581If @var{face} is @code{t}, it refers to the current face.
1582@item (@code{nil} . @var{ratio})
1583If the height spec is a cons of the format shown, the numeric height
1584is @var{ratio} times the height of the contents of the line.
9eb8959a 1585@end table
93449dd1 1586
1225f637 1587 Thus, any valid non-@code{t} property value specifies a height in pixels,
9eb8959a
RS
1588@var{line-height}, one way or another. If the line contents' height
1589is less than @var{line-height}, Emacs adds extra vertical space above
1590the line to achieve the total height @var{line-height}. Otherwise,
1591@var{line-height} has no effect.
93449dd1 1592
9eb8959a
RS
1593 If you don't specify the @code{line-height} propery, the line's
1594height consists of the contents' height plus the line spacing.
af046edf
RS
1595There are several ways to specify the line spacing for different
1596parts of Emacs text.
93449dd1
KS
1597
1598@vindex default-line-spacing
9eb8959a
RS
1599 You can specify the line spacing for all lines in a frame with the
1600@code{line-spacing} frame parameter, @xref{Window Frame Parameters}.
1601However, if the variable @code{default-line-spacing} is
93449dd1
KS
1602non-@code{nil}, it overrides the frame's @code{line-spacing}
1603parameter. An integer value specifies the number of pixels put below
1604lines on window systems. A floating point number specifies the
9eb8959a 1605spacing relative to the frame's default line height.
93449dd1
KS
1606
1607@vindex line-spacing
9eb8959a
RS
1608 You can specify the line spacing for all lines in a buffer via the
1609buffer-local @code{line-spacing} variable. An integer value specifies
1610the number of pixels put below lines on window systems. A floating
1611point number specifies the spacing relative to the default frame line
1612height. This overrides line spacings specified for the frame.
93449dd1
KS
1613
1614@kindex line-spacing @r{(text property)}
1615 Finally, a newline can have a @code{line-spacing} text or overlay
1616property that controls the height of the display line ending with that
1617newline. The property value overrides the default frame line spacing
9eb8959a
RS
1618and the buffer local @code{line-spacing} variable.
1619
af046edf
RS
1620 One way or another, these mechanisms specify a Lisp value for the
1621spacing of each line. The value is a height spec, and it translates
1622into a Lisp value as described above. However, in this case the
1623numeric height value specifies the line spacing, rather than the line
1624height.
1625
42b85554
RS
1626@node Faces
1627@section Faces
b9bc6c81 1628@cindex faces
42b85554 1629
8241495d
RS
1630 A @dfn{face} is a named collection of graphical attributes: font
1631family, foreground color, background color, optional underlining, and
1632many others. Faces are used in Emacs to control the style of display of
1633particular parts of the text or the frame.
42b85554
RS
1634
1635@cindex face id
969fe9b5 1636Each face has its own @dfn{face number}, which distinguishes faces at
8241495d 1637low levels within Emacs. However, for most purposes, you refer to
42b85554
RS
1638faces in Lisp programs by their names.
1639
22697dac
KH
1640@defun facep object
1641This function returns @code{t} if @var{object} is a face name symbol (or
1642if it is a vector of the kind used internally to record face data). It
1643returns @code{nil} otherwise.
1644@end defun
1645
42b85554
RS
1646Each face name is meaningful for all frames, and by default it has the
1647same meaning in all frames. But you can arrange to give a particular
1648face name a special meaning in one frame if you wish.
1649
1650@menu
1651* Standard Faces:: The faces Emacs normally comes with.
969fe9b5 1652* Defining Faces:: How to define a face with @code{defface}.
8241495d 1653* Face Attributes:: What is in a face?
02c77ee9 1654* Attribute Functions:: Functions to examine and set face attributes.
6057489e 1655* Displaying Faces:: How Emacs combines the faces specified for a character.
8241495d 1656* Font Selection:: Finding the best available font for a face.
02c77ee9 1657* Face Functions:: How to define and examine faces.
8241495d
RS
1658* Auto Faces:: Hook for automatic face assignment.
1659* Font Lookup:: Looking up the names of available fonts
1660 and information about them.
1661* Fontsets:: A fontset is a collection of fonts
1662 that handle a range of character sets.
42b85554
RS
1663@end menu
1664
1665@node Standard Faces
1666@subsection Standard Faces
1667
8241495d
RS
1668 This table lists all the standard faces and their uses. Most of them
1669are used for displaying certain parts of the frames or certain kinds of
1670text; you can control how those places look by customizing these faces.
42b85554
RS
1671
1672@table @code
1673@item default
1674@kindex default @r{(face name)}
1675This face is used for ordinary text.
1676
8241495d
RS
1677@item mode-line
1678@kindex mode-line @r{(face name)}
d211eec7
EZ
1679This face is used for the mode line of the selected window, and for
1680menu bars when toolkit menus are not used---but only if
1681@code{mode-line-inverse-video} is non-@code{nil}.
8241495d 1682
42b85554
RS
1683@item modeline
1684@kindex modeline @r{(face name)}
8241495d
RS
1685This is an alias for the @code{mode-line} face, for compatibility with
1686old Emacs versions.
1687
d211eec7
EZ
1688@item mode-line-inactive
1689@kindex mode-line-inactive @r{(face name)}
1690This face is used for mode lines of non-selected windows.
9b9d845d
RS
1691This face inherits from @code{mode-line}, so changes
1692in that face affect all windows.
d211eec7 1693
8241495d
RS
1694@item header-line
1695@kindex header-line @r{(face name)}
1696This face is used for the header lines of windows that have them.
1697
a40d4712
PR
1698@item menu
1699This face controls the display of menus, both their colors and their
1700font. (This works only on certain systems.)
1701
8241495d
RS
1702@item fringe
1703@kindex fringe @r{(face name)}
9b6e4bc3 1704This face controls the default colors of window fringes, the thin areas on
8241495d
RS
1705either side that are used to display continuation and truncation glyphs.
1706
2811080b
EZ
1707@item minibuffer-prompt
1708@kindex minibuffer-prompt @r{(face name)}
1709@vindex minibuffer-prompt-properties
1710This face is used for the text of minibuffer prompts. By default,
1711Emacs automatically adds this face to the value of
1712@code{minibuffer-prompt-properties}, which is a list of text
1713properties used to display the prompt text.
1714
8241495d
RS
1715@item scroll-bar
1716@kindex scroll-bar @r{(face name)}
1717This face controls the colors for display of scroll bars.
1718
1719@item tool-bar
1720@kindex tool-bar @r{(face name)}
1721This face is used for display of the tool bar, if any.
42b85554
RS
1722
1723@item region
1724@kindex region @r{(face name)}
1725This face is used for highlighting the region in Transient Mark mode.
1726
1727@item secondary-selection
1728@kindex secondary-selection @r{(face name)}
1729This face is used to show any secondary selection you have made.
1730
1731@item highlight
1732@kindex highlight @r{(face name)}
1733This face is meant to be used for highlighting for various purposes.
1734
8241495d
RS
1735@item trailing-whitespace
1736@kindex trailing-whitespace @r{(face name)}
a40d4712
PR
1737This face is used to display excess whitespace at the end of a line,
1738if @code{show-trailing-whitespace} is non-@code{nil}.
8241495d 1739@end table
42b85554 1740
8241495d
RS
1741 In contrast, these faces are provided to change the appearance of text
1742in specific ways. You can use them on specific text, when you want
1743the effects they produce.
1744
1745@table @code
42b85554
RS
1746@item bold
1747@kindex bold @r{(face name)}
1748This face uses a bold font, if possible. It uses the bold variant of
1749the frame's font, if it has one. It's up to you to choose a default
1750font that has a bold variant, if you want to use one.
1751
1752@item italic
1753@kindex italic @r{(face name)}
1754This face uses the italic variant of the frame's font, if it has one.
1755
1756@item bold-italic
1757@kindex bold-italic @r{(face name)}
1758This face uses the bold italic variant of the frame's font, if it has
1759one.
8241495d
RS
1760
1761@item underline
1762@kindex underline @r{(face name)}
1763This face underlines text.
1764
24eb6c0e
GM
1765@item fixed-pitch
1766@kindex fixed-pitch @r{(face name)}
8241495d
RS
1767This face forces use of a particular fixed-width font.
1768
24eb6c0e
GM
1769@item variable-pitch
1770@kindex variable-pitch @r{(face name)}
8241495d 1771This face forces use of a particular variable-width font. It's
a40d4712 1772reasonable to customize this to use a different variable-width font, if
8241495d 1773you like, but you should not make it a fixed-width font.
42b85554
RS
1774@end table
1775
a40d4712
PR
1776@defvar show-trailing-whitespace
1777@tindex show-trailing-whitespace
1778If this variable is non-@code{nil}, Emacs uses the
1779@code{trailing-whitespace} face to display any spaces and tabs at the
1780end of a line.
1781@end defvar
1782
969fe9b5 1783@node Defining Faces
a9f0a989 1784@subsection Defining Faces
969fe9b5
RS
1785
1786 The way to define a new face is with @code{defface}. This creates a
1787kind of customization item (@pxref{Customization}) which the user can
1788customize using the Customization buffer (@pxref{Easy Customization,,,
1789emacs, The GNU Emacs Manual}).
1790
177c0ea7 1791@defmac defface face spec doc [keyword value]...
a40d4712
PR
1792This declares @var{face} as a customizable face that defaults according
1793to @var{spec}. You should not quote the symbol @var{face}. The
1794argument @var{doc} specifies the face documentation. The keywords you
1795can use in @code{defface} are the same ones that are meaningful in both
1796@code{defgroup} and @code{defcustom} (@pxref{Common Keywords}).
969fe9b5
RS
1797
1798When @code{defface} executes, it defines the face according to
a9f0a989 1799@var{spec}, then uses any customizations that were read from the
a40d4712 1800init file (@pxref{Init File}) to override that specification.
969fe9b5
RS
1801
1802The purpose of @var{spec} is to specify how the face should appear on
1803different kinds of terminals. It should be an alist whose elements have
a40d4712
PR
1804the form @code{(@var{display} @var{atts})}. Each element's @sc{car},
1805@var{display}, specifies a class of terminals. The element's second element,
969fe9b5
RS
1806@var{atts}, is a list of face attributes and their values; it specifies
1807what the face should look like on that kind of terminal. The possible
1808attributes are defined in the value of @code{custom-face-attributes}.
1809
1810The @var{display} part of an element of @var{spec} determines which
1811frames the element applies to. If more than one element of @var{spec}
1812matches a given frame, the first matching element is the only one used
1813for that frame. There are two possibilities for @var{display}:
1814
1815@table @asis
1816@item @code{t}
1817This element of @var{spec} matches all frames. Therefore, any
1818subsequent elements of @var{spec} are never used. Normally
1819@code{t} is used in the last (or only) element of @var{spec}.
1820
a9f0a989 1821@item a list
1911e6e5 1822If @var{display} is a list, each element should have the form
969fe9b5
RS
1823@code{(@var{characteristic} @var{value}@dots{})}. Here
1824@var{characteristic} specifies a way of classifying frames, and the
1825@var{value}s are possible classifications which @var{display} should
1826apply to. Here are the possible values of @var{characteristic}:
1827
1828@table @code
1829@item type
9a6b7dcd
MB
1830The kind of window system the frame uses---either @code{graphic} (any
1831graphics-capable display), @code{x}, @code{pc} (for the MS-DOS console),
1832@code{w32} (for MS Windows 9X/NT), or @code{tty} (a non-graphics-capable
1833display).
969fe9b5
RS
1834
1835@item class
1836What kinds of colors the frame supports---either @code{color},
1837@code{grayscale}, or @code{mono}.
1838
1839@item background
1911e6e5 1840The kind of background---either @code{light} or @code{dark}.
82c3d852 1841
9fe84db6
EZ
1842@item min-colors
1843An integer that represents the minimum number of colors the frame should
1844support, it is compared with the result of @code{display-color-cells}.
1845
82c3d852 1846@item supports
95b5b933
MB
1847Whether or not the frame can display the face attributes given in
1848@var{value}@dots{} (@pxref{Face Attributes}). See the documentation
1849for the function @code{display-supports-face-attributes-p} for more
1850information on exactly how this testing is done. @xref{Display Face
1851Attribute Testing}.
969fe9b5
RS
1852@end table
1853
1854If an element of @var{display} specifies more than one @var{value} for a
1855given @var{characteristic}, any of those values is acceptable. If
1856@var{display} has more than one element, each element should specify a
1857different @var{characteristic}; then @emph{each} characteristic of the
1858frame must match one of the @var{value}s specified for it in
1859@var{display}.
1860@end table
1861@end defmac
1862
a40d4712 1863 Here's how the standard face @code{region} is defined:
969fe9b5
RS
1864
1865@example
a40d4712 1866@group
9fe84db6
EZ
1867 '((((class color) (min-colors 88) (background dark))
1868 :background "blue3")
a40d4712 1869@end group
9fe84db6
EZ
1870 (((class color) (min-colors 88) (background light))
1871 :background "lightgoldenrod2")
1872 (((class color) (min-colors 16) (background dark))
1873 :background "blue3")
1874 (((class color) (min-colors 16) (background light))
1875 :background "lightgoldenrod2")
1876 (((class color) (min-colors 8))
1877 :background "blue" :foreground "white")
a40d4712 1878 (((type tty) (class mono))
9fe84db6
EZ
1879 :inverse-video t)
1880 (t :background "gray"))
a40d4712
PR
1881@group
1882 "Basic face for highlighting the region."
1883 :group 'basic-faces)
1884@end group
969fe9b5
RS
1885@end example
1886
1887 Internally, @code{defface} uses the symbol property
1888@code{face-defface-spec} to record the face attributes specified in
1889@code{defface}, @code{saved-face} for the attributes saved by the user
1890with the customization buffer, and @code{face-documentation} for the
1891documentation string.
1892
1911e6e5
RS
1893@defopt frame-background-mode
1894This option, if non-@code{nil}, specifies the background type to use for
1895interpreting face definitions. If it is @code{dark}, then Emacs treats
1896all frames as if they had a dark background, regardless of their actual
1897background colors. If it is @code{light}, then Emacs treats all frames
1898as if they had a light background.
1899@end defopt
1900
8241495d
RS
1901@node Face Attributes
1902@subsection Face Attributes
1903@cindex face attributes
42b85554 1904
8241495d
RS
1905 The effect of using a face is determined by a fixed set of @dfn{face
1906attributes}. This table lists all the face attributes, and what they
a40d4712
PR
1907mean. Note that in general, more than one face can be specified for a
1908given piece of text; when that happens, the attributes of all the faces
a3a43b3b 1909are merged to specify how to display the text. @xref{Displaying Faces}.
42b85554 1910
911a7105
RS
1911 Any attribute in a face can have the value @code{unspecified}. This
1912means the face doesn't specify that attribute. In face merging, when
1913the first face fails to specify a particular attribute, that means the
1914next face gets a chance. However, the @code{default} face must
1915specify all attributes.
42b85554 1916
a40d4712
PR
1917 Some of these font attributes are meaningful only on certain kinds of
1918displays---if your display cannot handle a certain attribute, the
1919attribute is ignored. (The attributes @code{:family}, @code{:width},
1920@code{:height}, @code{:weight}, and @code{:slant} correspond to parts of
1921an X Logical Font Descriptor.)
42b85554 1922
8241495d
RS
1923@table @code
1924@item :family
1925Font family name, or fontset name (@pxref{Fontsets}). If you specify a
a40d4712
PR
1926font family name, the wild-card characters @samp{*} and @samp{?} are
1927allowed.
8241495d
RS
1928
1929@item :width
1930Relative proportionate width, also known as the character set width or
1931set width. This should be one of the symbols @code{ultra-condensed},
1932@code{extra-condensed}, @code{condensed}, @code{semi-condensed},
1933@code{normal}, @code{semi-expanded}, @code{expanded},
1934@code{extra-expanded}, or @code{ultra-expanded}.
177c0ea7 1935
8241495d 1936@item :height
96f71a49
MB
1937Either the font height, an integer in units of 1/10 point, a floating
1938point number specifying the amount by which to scale the height of any
1939underlying face, or a function, which is called with the old height
1940(from the underlying face), and should return the new height.
177c0ea7 1941
8241495d
RS
1942@item :weight
1943Font weight---a symbol from this series (from most dense to most faint):
1944@code{ultra-bold}, @code{extra-bold}, @code{bold}, @code{semi-bold},
1945@code{normal}, @code{semi-light}, @code{light}, @code{extra-light},
a40d4712 1946or @code{ultra-light}.
66f54605 1947
a40d4712
PR
1948On a text-only terminal, any weight greater than normal is displayed as
1949extra bright, and any weight less than normal is displayed as
1950half-bright (provided the terminal supports the feature).
1951
8241495d
RS
1952@item :slant
1953Font slant---one of the symbols @code{italic}, @code{oblique}, @code{normal},
1954@code{reverse-italic}, or @code{reverse-oblique}.
66f54605
PR
1955
1956On a text-only terminal, slanted text is displayed as half-bright, if
1957the terminal supports the feature.
1958
8241495d 1959@item :foreground
6057489e
RS
1960Foreground color, a string. The value can be a system-defined color
1961name, or a hexadecimal color specification of the form
1962@samp{#@var{rr}@var{gg}@var{bb}}. (@samp{#000000} is black,
1963@samp{#ff0000} is red, @samp{#00ff00} is green, @samp{#0000ff} is
1964blue, and @samp{#ffffff} is white.)
177c0ea7 1965
8241495d 1966@item :background
6057489e 1967Background color, a string, like the foreground color.
8241495d
RS
1968
1969@item :inverse-video
1970Whether or not characters should be displayed in inverse video. The
1971value should be @code{t} (yes) or @code{nil} (no).
1972
1973@item :stipple
a40d4712 1974The background stipple, a bitmap.
8241495d 1975
a40d4712
PR
1976The value can be a string; that should be the name of a file containing
1977external-format X bitmap data. The file is found in the directories
1978listed in the variable @code{x-bitmap-file-path}.
8241495d 1979
a3fbafe2
RS
1980Alternatively, the value can specify the bitmap directly, with a list
1981of the form @code{(@var{width} @var{height} @var{data})}. Here,
1982@var{width} and @var{height} specify the size in pixels, and
1983@var{data} is a string containing the raw bits of the bitmap, row by
1984row. Each row occupies @math{(@var{width} + 7) / 8} consecutive bytes
1985in the string (which should be a unibyte string for best results).
1986This means that each row always occupies at least one whole byte.
8241495d
RS
1987
1988If the value is @code{nil}, that means use no stipple pattern.
1989
1990Normally you do not need to set the stipple attribute, because it is
1991used automatically to handle certain shades of gray.
1992
1993@item :underline
1994Whether or not characters should be underlined, and in what color. If
1995the value is @code{t}, underlining uses the foreground color of the
1996face. If the value is a string, underlining uses that color. The
1997value @code{nil} means do not underline.
1998
1999@item :overline
2000Whether or not characters should be overlined, and in what color.
2001The value is used like that of @code{:underline}.
2002
2003@item :strike-through
2004Whether or not characters should be strike-through, and in what
2005color. The value is used like that of @code{:underline}.
2006
96f71a49
MB
2007@item :inherit
2008The name of a face from which to inherit attributes, or a list of face
2009names. Attributes from inherited faces are merged into the face like an
2010underlying face would be, with higher priority than underlying faces.
2011
8241495d
RS
2012@item :box
2013Whether or not a box should be drawn around characters, its color, the
a40d4712 2014width of the box lines, and 3D appearance.
8241495d 2015@end table
42b85554 2016
8241495d
RS
2017 Here are the possible values of the @code{:box} attribute, and what
2018they mean:
42b85554 2019
8241495d
RS
2020@table @asis
2021@item @code{nil}
2022Don't draw a box.
bfe721d1 2023
8241495d
RS
2024@item @code{t}
2025Draw a box with lines of width 1, in the foreground color.
42b85554 2026
8241495d
RS
2027@item @var{color}
2028Draw a box with lines of width 1, in color @var{color}.
42b85554 2029
8241495d
RS
2030@item @code{(:line-width @var{width} :color @var{color} :style @var{style})}
2031This way you can explicitly specify all aspects of the box. The value
2032@var{width} specifies the width of the lines to draw; it defaults to 1.
42b85554 2033
8241495d
RS
2034The value @var{color} specifies the color to draw with. The default is
2035the foreground color of the face for simple boxes, and the background
2036color of the face for 3D boxes.
42b85554 2037
8241495d
RS
2038The value @var{style} specifies whether to draw a 3D box. If it is
2039@code{released-button}, the box looks like a 3D button that is not being
2040pressed. If it is @code{pressed-button}, the box looks like a 3D button
2041that is being pressed. If it is @code{nil} or omitted, a plain 2D box
2042is used.
2043@end table
42b85554 2044
911a7105
RS
2045 In older versions of Emacs, before @code{:family}, @code{:height},
2046@code{:width}, @code{:weight}, and @code{:slant} existed, these
2047attributes were used to specify the type face. They are now
2048semi-obsolete, but they still work:
42b85554 2049
8241495d
RS
2050@table @code
2051@item :font
a40d4712 2052This attribute specifies the font name.
42b85554 2053
8241495d
RS
2054@item :bold
2055A non-@code{nil} value specifies a bold font.
42b85554 2056
8241495d
RS
2057@item :italic
2058A non-@code{nil} value specifies an italic font.
2059@end table
42b85554 2060
911a7105
RS
2061 For compatibility, you can still set these ``attributes'', even
2062though they are not real face attributes. Here is what that does:
42b85554 2063
8241495d
RS
2064@table @code
2065@item :font
a40d4712
PR
2066You can specify an X font name as the ``value'' of this ``attribute'';
2067that sets the @code{:family}, @code{:width}, @code{:height},
2068@code{:weight}, and @code{:slant} attributes according to the font name.
8241495d
RS
2069
2070If the value is a pattern with wildcards, the first font that matches
2071the pattern is used to set these attributes.
2072
2073@item :bold
2074A non-@code{nil} makes the face bold; @code{nil} makes it normal.
2075This actually works by setting the @code{:weight} attribute.
2076
2077@item :italic
2078A non-@code{nil} makes the face italic; @code{nil} makes it normal.
2079This actually works by setting the @code{:slant} attribute.
2080@end table
42b85554 2081
8241495d
RS
2082@defvar x-bitmap-file-path
2083This variable specifies a list of directories for searching
2084for bitmap files, for the @code{:stipple} attribute.
2085@end defvar
2086
ea7220f8 2087@defun bitmap-spec-p object
2252bdcf
RS
2088This returns @code{t} if @var{object} is a valid bitmap specification,
2089suitable for use with @code{:stipple} (see above). It returns
2090@code{nil} otherwise.
a40d4712
PR
2091@end defun
2092
8241495d
RS
2093@node Attribute Functions
2094@subsection Face Attribute Functions
42b85554
RS
2095
2096 You can modify the attributes of an existing face with the following
2097functions. If you specify @var{frame}, they affect just that frame;
2098otherwise, they affect all frames as well as the defaults that apply to
2099new frames.
2100
8241495d
RS
2101@tindex set-face-attribute
2102@defun set-face-attribute face frame &rest arguments
2103This function sets one or more attributes of face @var{face}
2104for frame @var{frame}. If @var{frame} is @code{nil}, it sets
2105the attribute for all frames, and the defaults for new frames.
2106
2107The extra arguments @var{arguments} specify the attributes to set, and
2108the values for them. They should consist of alternating attribute names
a40d4712 2109(such as @code{:family} or @code{:underline}) and corresponding values.
8241495d
RS
2110Thus,
2111
2112@example
2113(set-face-attribute 'foo nil
dbcff00c
RS
2114 :width 'extended
2115 :weight 'bold
8241495d
RS
2116 :underline "red")
2117@end example
2118
2119@noindent
2120sets the attributes @code{:width}, @code{:weight} and @code{:underline}
2121to the corresponding values.
2122@end defun
2123
2124@tindex face-attribute
35f23bbf 2125@defun face-attribute face attribute &optional frame inherit
8241495d
RS
2126This returns the value of the @var{attribute} attribute of face
2127@var{face} on @var{frame}. If @var{frame} is @code{nil},
8d82c597 2128that means the selected frame (@pxref{Input Focus}).
8241495d
RS
2129
2130If @var{frame} is @code{t}, the value is the default for
2131@var{face} for new frames.
2132
9a8dc0d3 2133If @var{inherit} is @code{nil}, only attributes directly defined by
35f23bbf 2134@var{face} are considered, so the return value may be
9a8dc0d3
RS
2135@code{unspecified}, or a relative value. If @var{inherit} is
2136non-@code{nil}, @var{face}'s definition of @var{attribute} is merged
2137with the faces specified by its @code{:inherit} attribute; however the
2138return value may still be @code{unspecified} or relative. If
2139@var{inherit} is a face or a list of faces, then the result is further
2140merged with that face (or faces), until it becomes specified and
2141absolute.
35f23bbf
MB
2142
2143To ensure that the return value is always specified and absolute, use
2144a value of @code{default} for @var{inherit}; this will resolve any
2145unspecified or relative values by merging with the @code{default} face
2146(which is always completely specified).
2147
8241495d
RS
2148For example,
2149
2150@example
2151(face-attribute 'bold :weight)
2152 @result{} bold
2153@end example
2154@end defun
2155
a40d4712
PR
2156 The functions above did not exist before Emacs 21. For compatibility
2157with older Emacs versions, you can use the following functions to set
8241495d
RS
2158and examine the face attributes which existed in those versions.
2159
35f23bbf
MB
2160@tindex face-attribute-relative-p
2161@defun face-attribute-relative-p attribute value
812a2341 2162This function returns non-@code{nil} if @var{value}, when used as
35f23bbf
MB
2163the value of the face attribute @var{attribute}, is relative (that is,
2164if it modifies an underlying or inherited value of @var{attribute}).
2165@end defun
2166
2167@tindex merge-face-attribute
2168@defun merge-face-attribute attribute value1 value2
2169If @var{value1} is a relative value for the face attribute
2170@var{attribute}, returns it merged with the underlying value
2171@var{value2}; otherwise, if @var{value1} is an absolute value for the
9ee1638e 2172face attribute @var{attribute}, returns @var{value1} unchanged.
35f23bbf
MB
2173@end defun
2174
42b85554
RS
2175@defun set-face-foreground face color &optional frame
2176@defunx set-face-background face color &optional frame
78608595
RS
2177These functions set the foreground (or background, respectively) color
2178of face @var{face} to @var{color}. The argument @var{color} should be a
42b85554 2179string, the name of a color.
bfe721d1
KH
2180
2181Certain shades of gray are implemented by stipple patterns on
2182black-and-white screens.
2183@end defun
2184
2185@defun set-face-stipple face pattern &optional frame
2252bdcf
RS
2186This function sets the background stipple pattern of face @var{face}
2187to @var{pattern}. The argument @var{pattern} should be the name of a
2188stipple pattern defined by the X server, or actual bitmap data
2189(@pxref{Face Attributes}), or @code{nil} meaning don't use stipple.
bfe721d1
KH
2190
2191Normally there is no need to pay attention to stipple patterns, because
2192they are used automatically to handle certain shades of gray.
42b85554
RS
2193@end defun
2194
2195@defun set-face-font face font &optional frame
911a7105
RS
2196This function sets the font of face @var{face}. This actually sets
2197the attributes @code{:family}, @code{:width}, @code{:height},
2198@code{:weight}, and @code{:slant} according to the font name
2199@var{font}.
21cffb83
RS
2200@end defun
2201
f9f59935 2202@defun set-face-bold-p face bold-p &optional frame
8241495d
RS
2203This function specifies whether @var{face} should be bold. If
2204@var{bold-p} is non-@code{nil}, that means yes; @code{nil} means no.
911a7105 2205This actually sets the @code{:weight} attribute.
21cffb83
RS
2206@end defun
2207
f9f59935 2208@defun set-face-italic-p face italic-p &optional frame
8241495d
RS
2209This function specifies whether @var{face} should be italic. If
2210@var{italic-p} is non-@code{nil}, that means yes; @code{nil} means no.
911a7105 2211This actually sets the @code{:slant} attribute.
42b85554
RS
2212@end defun
2213
969fe9b5
RS
2214@defun set-face-underline-p face underline-p &optional frame
2215This function sets the underline attribute of face @var{face}.
2216Non-@code{nil} means do underline; @code{nil} means don't.
2217@end defun
2218
42b85554 2219@defun invert-face face &optional frame
8241495d
RS
2220This function inverts the @code{:inverse-video} attribute of face
2221@var{face}. If the attribute is @code{nil}, this function sets it to
2222@code{t}, and vice versa.
42b85554
RS
2223@end defun
2224
2225 These functions examine the attributes of a face. If you don't
2226specify @var{frame}, they refer to the default data for new frames.
a40d4712
PR
2227They return the symbol @code{unspecified} if the face doesn't define any
2228value for that attribute.
42b85554 2229
69137def 2230@defun face-foreground face &optional frame inherit
42b85554 2231@defunx face-background face &optional frame
78608595
RS
2232These functions return the foreground color (or background color,
2233respectively) of face @var{face}, as a string.
69137def 2234
00991494
JH
2235If @var{inherit} is @code{nil}, only a color directly defined by the face is
2236returned. If @var{inherit} is non-@code{nil}, any faces specified by its
69137def
MB
2237@code{:inherit} attribute are considered as well, and if @var{inherit}
2238is a face or a list of faces, then they are also considered, until a
2239specified color is found. To ensure that the return value is always
2240specified, use a value of @code{default} for @var{inherit}.
42b85554
RS
2241@end defun
2242
69137def 2243@defun face-stipple face &optional frame inherit
bfe721d1
KH
2244This function returns the name of the background stipple pattern of face
2245@var{face}, or @code{nil} if it doesn't have one.
69137def 2246
9a8dc0d3
RS
2247If @var{inherit} is @code{nil}, only a stipple directly defined by the
2248face is returned. If @var{inherit} is non-@code{nil}, any faces
2249specified by its @code{:inherit} attribute are considered as well, and
2250if @var{inherit} is a face or a list of faces, then they are also
2251considered, until a specified stipple is found. To ensure that the
2252return value is always specified, use a value of @code{default} for
2253@var{inherit}.
bfe721d1
KH
2254@end defun
2255
42b85554
RS
2256@defun face-font face &optional frame
2257This function returns the name of the font of face @var{face}.
2258@end defun
2259
f9f59935 2260@defun face-bold-p face &optional frame
8241495d
RS
2261This function returns @code{t} if @var{face} is bold---that is, if it is
2262bolder than normal. It returns @code{nil} otherwise.
f9f59935
RS
2263@end defun
2264
f9f59935 2265@defun face-italic-p face &optional frame
8241495d
RS
2266This function returns @code{t} if @var{face} is italic or oblique,
2267@code{nil} otherwise.
f9f59935
RS
2268@end defun
2269
969fe9b5 2270@defun face-underline-p face &optional frame
8241495d
RS
2271This function returns the @code{:underline} attribute of face @var{face}.
2272@end defun
2273
2274@defun face-inverse-video-p face &optional frame
2275This function returns the @code{:inverse-video} attribute of face @var{face}.
2276@end defun
2277
6057489e
RS
2278@node Displaying Faces
2279@subsection Displaying Faces
8241495d
RS
2280
2281 Here are the ways to specify which faces to use for display of text:
2282
2283@itemize @bullet
2284@item
2285With defaults. The @code{default} face is used as the ultimate
2286default for all text. (In Emacs 19 and 20, the @code{default}
2287face is used only when no other face is specified.)
2288
2289For a mode line or header line, the face @code{modeline} or
2290@code{header-line} is used just before @code{default}.
2291
2292@item
2293With text properties. A character can have a @code{face} property; if
2294so, the faces and face attributes specified there apply. @xref{Special
2295Properties}.
2296
2297If the character has a @code{mouse-face} property, that is used instead
2298of the @code{face} property when the mouse is ``near enough'' to the
2299character.
2300
2301@item
2302With overlays. An overlay can have @code{face} and @code{mouse-face}
2303properties too; they apply to all the text covered by the overlay.
2304
2305@item
2306With a region that is active. In Transient Mark mode, the region is
2307highlighted with the face @code{region} (@pxref{Standard Faces}).
2308
2309@item
177c0ea7 2310With special glyphs. Each glyph can specify a particular face
8241495d
RS
2311number. @xref{Glyphs}.
2312@end itemize
2313
2314 If these various sources together specify more than one face for a
2315particular character, Emacs merges the attributes of the various faces
2316specified. The attributes of the faces of special glyphs come first;
2317then comes the face for region highlighting, if appropriate;
2318then come attributes of faces from overlays, followed by those from text
2319properties, and last the default face.
2320
2321 When multiple overlays cover one character, an overlay with higher
2322priority overrides those with lower priority. @xref{Overlays}.
2323
2324 In Emacs 20, if an attribute such as the font or a color is not
2325specified in any of the above ways, the frame's own font or color is
2326used. In newer Emacs versions, this cannot happen, because the
2327@code{default} face specifies all attributes---in fact, the frame's own
2328font and colors are synonymous with those of the default face.
2329
2330@node Font Selection
2331@subsection Font Selection
2332
2333 @dfn{Selecting a font} means mapping the specified face attributes for
2334a character to a font that is available on a particular display. The
2335face attributes, as determined by face merging, specify most of the
2336font choice, but not all. Part of the choice depends on what character
2337it is.
2338
8241495d
RS
2339 If the face specifies a fontset name, that fontset determines a
2340pattern for fonts of the given charset. If the face specifies a font
2341family, a font pattern is constructed.
2342
2343 Emacs tries to find an available font for the given face attributes
2344and character's registry and encoding. If there is a font that matches
2345exactly, it is used, of course. The hard case is when no available font
2346exactly fits the specification. Then Emacs looks for one that is
1dffc5db
RS
2347``close''---one attribute at a time. You can specify the order to
2348consider the attributes. In the case where a specified font family is
2349not available, you can specify a set of mappings for alternatives to
2350try.
8241495d
RS
2351
2352@defvar face-font-selection-order
2353@tindex face-font-selection-order
2354This variable specifies the order of importance of the face attributes
2355@code{:width}, @code{:height}, @code{:weight}, and @code{:slant}. The
2356value should be a list containing those four symbols, in order of
2357decreasing importance.
2358
2359Font selection first finds the best available matches for the first
2360attribute listed; then, among the fonts which are best in that way, it
2361searches for the best matches in the second attribute, and so on.
2362
2363The attributes @code{:weight} and @code{:width} have symbolic values in
2364a range centered around @code{normal}. Matches that are more extreme
2365(farther from @code{normal}) are somewhat preferred to matches that are
2366less extreme (closer to @code{normal}); this is designed to ensure that
2367non-normal faces contrast with normal ones, whenever possible.
2368
2369The default is @code{(:width :height :weight :slant)}, which means first
2370find the fonts closest to the specified @code{:width}, then---among the
2371fonts with that width---find a best match for the specified font height,
2372and so on.
2373
2374One example of a case where this variable makes a difference is when the
2375default font has no italic equivalent. With the default ordering, the
2376@code{italic} face will use a non-italic font that is similar to the
2377default one. But if you put @code{:slant} before @code{:height}, the
2378@code{italic} face will use an italic font, even if its height is not
2379quite right.
2380@end defvar
2381
52d89894
GM
2382@defvar face-font-family-alternatives
2383@tindex face-font-family-alternatives
8241495d
RS
2384This variable lets you specify alternative font families to try, if a
2385given family is specified and doesn't exist. Each element should have
2386this form:
2387
2388@example
2389(@var{family} @var{alternate-families}@dots{})
2390@end example
2391
2392If @var{family} is specified but not available, Emacs will try the other
2393families given in @var{alternate-families}, one by one, until it finds a
2394family that does exist.
52d89894
GM
2395@end defvar
2396
2397@defvar face-font-registry-alternatives
2398@tindex face-font-registry-alternatives
2399This variable lets you specify alternative font registries to try, if a
2400given registry is specified and doesn't exist. Each element should have
2401this form:
2402
2403@example
2404(@var{registry} @var{alternate-registries}@dots{})
2405@end example
2406
2407If @var{registry} is specified but not available, Emacs will try the
2408other registries given in @var{alternate-registries}, one by one,
2409until it finds a registry that does exist.
8241495d
RS
2410@end defvar
2411
2412 Emacs can make use of scalable fonts, but by default it does not use
2413them, since the use of too many or too big scalable fonts can crash
2414XFree86 servers.
2415
2416@defvar scalable-fonts-allowed
2417@tindex scalable-fonts-allowed
2418This variable controls which scalable fonts to use. A value of
2419@code{nil}, the default, means do not use scalable fonts. @code{t}
2420means to use any scalable font that seems appropriate for the text.
2421
2422Otherwise, the value must be a list of regular expressions. Then a
2423scalable font is enabled for use if its name matches any regular
2424expression in the list. For example,
2425
2426@example
2427(setq scalable-fonts-allowed '("muleindian-2$"))
2428@end example
2429
2430@noindent
2431allows the use of scalable fonts with registry @code{muleindian-2}.
eda77a0f 2432@end defvar
8241495d
RS
2433
2434@defun clear-face-cache &optional unload-p
2435@tindex clear-face-cache
2436This function clears the face cache for all frames.
2437If @var{unload-p} is non-@code{nil}, that means to unload
2438all unused fonts as well.
2439@end defun
2440
6bc3abcb
RS
2441@defvar face-font-rescale-alist
2442This variable specifies scaling for certain faces. Its value should
2443be a list of elements of the form
2444
2445@example
2446(@var{fontname-regexp} . @var{scale-factor})
2447@end example
2448
2449If @var{fontname-regexp} matches the font name that is about to be
2450used, this says to choose a larger similar font according to the
2451factor @var{scale-factor}. You would use this feature to normalize
2452the font size if certain fonts are bigger or smaller than their
2453nominal heights and widths would suggest.
2454@end defvar
2455
8241495d
RS
2456@node Face Functions
2457@subsection Functions for Working with Faces
2458
2459 Here are additional functions for creating and working with faces.
2460
2461@defun make-face name
2462This function defines a new face named @var{name}, initially with all
2463attributes @code{nil}. It does nothing if there is already a face named
2464@var{name}.
2465@end defun
2466
2467@defun face-list
2468This function returns a list of all defined face names.
2469@end defun
2470
2471@defun copy-face old-face new-name &optional frame new-frame
2472This function defines the face @var{new-name} as a copy of the existing
2473face named @var{old-face}. It creates the face @var{new-name} if that
2474doesn't already exist.
2475
2476If the optional argument @var{frame} is given, this function applies
2477only to that frame. Otherwise it applies to each frame individually,
2478copying attributes from @var{old-face} in each frame to @var{new-face}
2479in the same frame.
2480
2481If the optional argument @var{new-frame} is given, then @code{copy-face}
2482copies the attributes of @var{old-face} in @var{frame} to @var{new-name}
2483in @var{new-frame}.
969fe9b5
RS
2484@end defun
2485
bfe721d1 2486@defun face-id face
969fe9b5 2487This function returns the face number of face @var{face}.
42b85554
RS
2488@end defun
2489
f9f59935
RS
2490@defun face-documentation face
2491This function returns the documentation string of face @var{face}, or
2492@code{nil} if none was specified for it.
2493@end defun
2494
42b85554
RS
2495@defun face-equal face1 face2 &optional frame
2496This returns @code{t} if the faces @var{face1} and @var{face2} have the
2497same attributes for display.
2498@end defun
2499
2500@defun face-differs-from-default-p face &optional frame
7e07a66d
MB
2501This returns non-@code{nil} if the face @var{face} displays
2502differently from the default face.
1911e6e5
RS
2503@end defun
2504
8241495d
RS
2505@node Auto Faces
2506@subsection Automatic Face Assignment
2507@cindex automatic face assignment
2508@cindex faces, automatic choice
2509
2510@cindex Font-Lock mode
911a7105
RS
2511 This hook is used for automatically assigning faces to text in the
2512buffer. It is part of the implementation of Font-Lock mode.
8241495d
RS
2513
2514@tindex fontification-functions
2515@defvar fontification-functions
2516This variable holds a list of functions that are called by Emacs
2517redisplay as needed to assign faces automatically to text in the buffer.
2518
2519The functions are called in the order listed, with one argument, a
2520buffer position @var{pos}. Each function should attempt to assign faces
2521to the text in the current buffer starting at @var{pos}.
2522
2523Each function should record the faces they assign by setting the
2524@code{face} property. It should also add a non-@code{nil}
2525@code{fontified} property for all the text it has assigned faces to.
2526That property tells redisplay that faces have been assigned to that text
2527already.
2528
2529It is probably a good idea for each function to do nothing if the
2530character after @var{pos} already has a non-@code{nil} @code{fontified}
2531property, but this is not required. If one function overrides the
2532assignments made by a previous one, the properties as they are
2533after the last function finishes are the ones that really matter.
2534
2535For efficiency, we recommend writing these functions so that they
2536usually assign faces to around 400 to 600 characters at each call.
2537@end defvar
2538
2539@node Font Lookup
2540@subsection Looking Up Fonts
2541
2542@defun x-list-fonts pattern &optional face frame maximum
2543This function returns a list of available font names that match
2544@var{pattern}. If the optional arguments @var{face} and @var{frame} are
2545specified, then the list is limited to fonts that are the same size as
2546@var{face} currently is on @var{frame}.
2547
2548The argument @var{pattern} should be a string, perhaps with wildcard
2549characters: the @samp{*} character matches any substring, and the
2550@samp{?} character matches any single character. Pattern matching
2551of font names ignores case.
2552
2553If you specify @var{face} and @var{frame}, @var{face} should be a face name
2554(a symbol) and @var{frame} should be a frame.
2555
2556The optional argument @var{maximum} sets a limit on how many fonts to
2557return. If this is non-@code{nil}, then the return value is truncated
2558after the first @var{maximum} matching fonts. Specifying a small value
2559for @var{maximum} can make this function much faster, in cases where
2560many fonts match the pattern.
2561@end defun
2562
8241495d
RS
2563@defun x-family-fonts &optional family frame
2564@tindex x-family-fonts
2565This function returns a list describing the available fonts for family
2566@var{family} on @var{frame}. If @var{family} is omitted or @code{nil},
2567this list applies to all families, and therefore, it contains all
2568available fonts. Otherwise, @var{family} must be a string; it may
2569contain the wildcards @samp{?} and @samp{*}.
2570
2571The list describes the display that @var{frame} is on; if @var{frame} is
8d82c597
EZ
2572omitted or @code{nil}, it applies to the selected frame's display
2573(@pxref{Input Focus}).
8241495d
RS
2574
2575The list contains a vector of the following form for each font:
2576
2577@example
2578[@var{family} @var{width} @var{point-size} @var{weight} @var{slant}
2579 @var{fixed-p} @var{full} @var{registry-and-encoding}]
2580@end example
2581
2582The first five elements correspond to face attributes; if you
2583specify these attributes for a face, it will use this font.
2584
2585The last three elements give additional information about the font.
9a8dc0d3
RS
2586@var{fixed-p} is non-@code{nil} if the font is fixed-pitch.
2587@var{full} is the full name of the font, and
2588@var{registry-and-encoding} is a string giving the registry and
2589encoding of the font.
8241495d
RS
2590
2591The result list is sorted according to the current face font sort order.
2592@end defun
2593
2594@defun x-font-family-list &optional frame
2595@tindex x-font-family-list
2596This function returns a list of the font families available for
2597@var{frame}'s display. If @var{frame} is omitted or @code{nil}, it
8d82c597 2598describes the selected frame's display (@pxref{Input Focus}).
8241495d
RS
2599
2600The value is a list of elements of this form:
2601
2602@example
2603(@var{family} . @var{fixed-p})
2604@end example
2605
2606@noindent
2607Here @var{family} is a font family, and @var{fixed-p} is
2608non-@code{nil} if fonts of that family are fixed-pitch.
2609@end defun
2610
2611@defvar font-list-limit
2612@tindex font-list-limit
2613This variable specifies maximum number of fonts to consider in font
2614matching. The function @code{x-family-fonts} will not return more than
2615that many fonts, and font selection will consider only that many fonts
2616when searching a matching font for face attributes. The default is
2617currently 100.
2618@end defvar
2619
2620@node Fontsets
2621@subsection Fontsets
2622
2623 A @dfn{fontset} is a list of fonts, each assigned to a range of
2624character codes. An individual font cannot display the whole range of
2625characters that Emacs supports, but a fontset can. Fontsets have names,
2626just as fonts do, and you can use a fontset name in place of a font name
2627when you specify the ``font'' for a frame or a face. Here is
2628information about defining a fontset under Lisp program control.
2629
2630@defun create-fontset-from-fontset-spec fontset-spec &optional style-variant-p noerror
2631This function defines a new fontset according to the specification
2632string @var{fontset-spec}. The string should have this format:
2633
2634@smallexample
2635@var{fontpattern}, @r{[}@var{charsetname}:@var{fontname}@r{]@dots{}}
2636@end smallexample
2637
2638@noindent
2639Whitespace characters before and after the commas are ignored.
2640
2641The first part of the string, @var{fontpattern}, should have the form of
2642a standard X font name, except that the last two fields should be
2643@samp{fontset-@var{alias}}.
2644
2645The new fontset has two names, one long and one short. The long name is
2646@var{fontpattern} in its entirety. The short name is
2647@samp{fontset-@var{alias}}. You can refer to the fontset by either
2648name. If a fontset with the same name already exists, an error is
2649signaled, unless @var{noerror} is non-@code{nil}, in which case this
2650function does nothing.
2651
2652If optional argument @var{style-variant-p} is non-@code{nil}, that says
2653to create bold, italic and bold-italic variants of the fontset as well.
2654These variant fontsets do not have a short name, only a long one, which
2655is made by altering @var{fontpattern} to indicate the bold or italic
2656status.
2657
2658The specification string also says which fonts to use in the fontset.
2659See below for the details.
2660@end defun
2661
2662 The construct @samp{@var{charset}:@var{font}} specifies which font to
2663use (in this fontset) for one particular character set. Here,
2664@var{charset} is the name of a character set, and @var{font} is the font
2665to use for that character set. You can use this construct any number of
2666times in the specification string.
2667
2668 For the remaining character sets, those that you don't specify
2669explicitly, Emacs chooses a font based on @var{fontpattern}: it replaces
2670@samp{fontset-@var{alias}} with a value that names one character set.
ad800164 2671For the @acronym{ASCII} character set, @samp{fontset-@var{alias}} is replaced
8241495d
RS
2672with @samp{ISO8859-1}.
2673
2674 In addition, when several consecutive fields are wildcards, Emacs
2675collapses them into a single wildcard. This is to prevent use of
2676auto-scaled fonts. Fonts made by scaling larger fonts are not usable
2677for editing, and scaling a smaller font is not useful because it is
2678better to use the smaller font in its own size, which Emacs does.
2679
2680 Thus if @var{fontpattern} is this,
2681
2682@example
2683-*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24
2684@end example
2685
2686@noindent
ad800164 2687the font specification for @acronym{ASCII} characters would be this:
8241495d
RS
2688
2689@example
2690-*-fixed-medium-r-normal-*-24-*-ISO8859-1
2691@end example
2692
2693@noindent
2694and the font specification for Chinese GB2312 characters would be this:
2695
2696@example
2697-*-fixed-medium-r-normal-*-24-*-gb2312*-*
2698@end example
2699
2700 You may not have any Chinese font matching the above font
2701specification. Most X distributions include only Chinese fonts that
2702have @samp{song ti} or @samp{fangsong ti} in the @var{family} field. In
2703such a case, @samp{Fontset-@var{n}} can be specified as below:
2704
2705@smallexample
2706Emacs.Fontset-0: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24,\
2707 chinese-gb2312:-*-*-medium-r-normal-*-24-*-gb2312*-*
2708@end smallexample
2709
2710@noindent
2711Then, the font specifications for all but Chinese GB2312 characters have
2712@samp{fixed} in the @var{family} field, and the font specification for
2713Chinese GB2312 characters has a wild card @samp{*} in the @var{family}
2714field.
2715
885fef7c
KH
2716@defun set-fontset-font name character fontname &optional frame
2717This function modifies the existing fontset @var{name} to
2718use the font name @var{fontname} for the character @var{character}.
2719
a2296bf9 2720If @var{name} is @code{nil}, this function modifies the default
812a2341 2721fontset, whose short name is @samp{fontset-default}.
885fef7c 2722
a2296bf9
KH
2723@var{character} may be a cons; @code{(@var{from} . @var{to})}, where
2724@var{from} and @var{to} are non-generic characters. In that case, use
2725@var{fontname} for all characters in the range @var{from} and @var{to}
2726(inclusive).
885fef7c
KH
2727
2728@var{character} may be a charset. In that case, use
2729@var{fontname} for all character in the charsets.
2730
a2296bf9
KH
2731@var{fontname} may be a cons; @code{(@var{family} . @var{registry})},
2732where @var{family} is a family name of a font (possibly including a
2733foundry name at the head), @var{registry} is a registry name of a font
2734(possibly including an encoding name at the tail).
885fef7c 2735
a2296bf9
KH
2736For instance, this changes the default fontset to use a font of which
2737registry name is @samp{JISX0208.1983} for all characters belonging to
2738the charset @code{japanese-jisx0208}.
885fef7c
KH
2739
2740@example
2741(set-fontset-font nil 'japanese-jisx0208 '(nil . "JISX0208.1983"))
2742@end example
2743
2744@end defun
2745
f6cad089
RS
2746@defun char-displayable-p char
2747This function returns @code{t} if Emacs ought to be able to display
2748@var{char}. More precisely, if the selected frame's fontset has a
2749font to display the character set that @var{char} belongs to.
2750
2751Fontsets can specify a font on a per-character basis; when the fontset
2752does that, this function's value may not be accurate.
2753@end defun
2754
8a6ca431
RS
2755@node Fringes
2756@section Fringes
2757@cindex Fringes
2758
2759 The @dfn{fringes} of a window are thin vertical strips down the
2760sides that are used for displaying bitmaps that indicate truncation,
812a2341 2761continuation, horizontal scrolling, and the overlay arrow. The
8a6ca431
RS
2762fringes normally appear between the display margins and the window
2763text, but you can put them outside the display margins for a specific
2764buffer by setting @code{fringes-outside-margins} buffer-locally to a
2765non-@code{nil} value.
2766
2767@defvar fringes-outside-margins
2768If the value is non-@code{nil}, the frames appear outside
9b6e4bc3 2769the display margins.
8a6ca431
RS
2770@end defvar
2771
2772@defvar left-fringe-width
2773This variable, if non-@code{nil}, specifies the width of the left
2774fringe in pixels.
2775@end defvar
2776
2777@defvar right-fringe-width
2778This variable, if non-@code{nil}, specifies the width of the right
2779fringe in pixels.
2780@end defvar
2781
2782 The values of these variables take effect when you display the
2783buffer in a window. If you change them while the buffer is visible,
812a2341
RS
2784you can call @code{set-window-buffer} to display it once again in the
2785same window, to make the changes take effect.
8a6ca431
RS
2786
2787@defun set-window-fringes window left &optional right outside-margins
812a2341 2788This function sets the fringe widths of window @var{window}.
479dbc9d 2789If @var{window} is @code{nil}, the selected window is used.
8a6ca431
RS
2790
2791The argument @var{left} specifies the width in pixels of the left
2792fringe, and likewise @var{right} for the right fringe. A value of
2793@code{nil} for either one stands for the default width. If
2794@var{outside-margins} is non-@code{nil}, that specifies that fringes
2795should appear outside of the display margins.
2796@end defun
2797
479dbc9d 2798@defun window-fringes &optional window
8a6ca431 2799This function returns information about the fringes of a window
479dbc9d
KS
2800@var{window}. If @var{window} is omitted or @code{nil}, the selected
2801window is used. The value has the form @code{(@var{left-width}
c00d3ba4 2802@var{right-width} @var{frames-outside-margins})}.
8a6ca431
RS
2803@end defun
2804
9b6e4bc3 2805@defvar overflow-newline-into-fringe
26b76360
RS
2806If this is non-@code{nil}, lines exactly as wide as the window (not
2807counting the final newline character) are not continued. Instead,
2808when point is at the end of the line, the cursor appears in the right
2809fringe.
9b6e4bc3
KS
2810@end defvar
2811
2812@node Fringe Bitmaps
2813@section Fringe Bitmaps
26b76360
RS
2814@cindex fringe bitmaps
2815@cindex bitmaps, fringe
2816
2817 The @dfn{fringe bitmaps} are tiny icons Emacs displays in the window
2818fringe (on a graphic display) to indicate truncated or continued
2819lines, buffer boundaries, overlay arrow, etc. The fringe bitmaps are
2820shared by all frames and windows. You can redefine the built-in
90801c68 2821fringe bitmaps, and you can define new fringe bitmaps.
26b76360
RS
2822
2823 The way to display a bitmap in the left or right fringes for a given
2824line in a window is by specifying the @code{display} property for one
2825of the characters that appears in it. Use a display specification of
2826the form @code{(left-fringe @var{bitmap} [@var{face}])} or
2827@code{(right-fringe @var{bitmap} [@var{face}])} (@pxref{Display
90801c68 2828Property}). Here, @var{bitmap} is a symbol identifying the bitmap
26b76360
RS
2829you want, and @var{face} (which is optional) is the name of the face
2830whose colors should be used for displaying the bitmap.
26b76360
RS
2831
2832 These are the symbols identify the standard fringe bitmaps.
90801c68
KS
2833Evaluate @code{(require 'fringe)} to define them. Fringe bitmap
2834symbols have their own name space.
9b6e4bc3 2835
26b76360
RS
2836@table @asis
2837@item Truncation and continuation line bitmaps:
90801c68
KS
2838@code{left-truncation}, @code{right-truncation},
2839@code{continued-line}, @code{continuation-line}.
9b6e4bc3 2840
26b76360 2841@item Buffer indication bitmaps:
90801c68
KS
2842@code{up-arrow}, @code{down-arrow},
2843@code{top-left-angle}, @code{top-right-angle},
2844@code{bottom-left-angle}, @code{bottom-right-angle},
2845@code{left-bracket}, @code{right-bracket}.
9b6e4bc3 2846
26b76360 2847@item Empty line indication bitmap:
90801c68 2848@code{empty-line}.
9b6e4bc3 2849
26b76360 2850@item Overlay arrow bitmap:
90801c68 2851@code{overlay-arrow}.
9b6e4bc3 2852
26b76360 2853@item Bitmaps for displaying the cursor in right fringe:
90801c68
KS
2854@code{filled-box-cursor}, @code{hollow-box-cursor}, @code{hollow-square},
2855@code{bar-cursor}, @code{hbar-cursor}.
26b76360 2856@end table
9b6e4bc3 2857
26b76360
RS
2858@defun fringe-bitmaps-at-pos &optional pos window
2859This function returns the fringe bitmaps of the display line
2860containing position @var{pos} in window @var{window}. The return
cf6d43ae 2861value has the form @code{(@var{left} @var{right} @var{ov})}, where @var{left}
90801c68 2862is the symbol for the fringe bitmap in the left fringe (or @code{nil}
cf6d43ae
KS
2863if no bitmap), @var{right} is similar for the right fringe, and @var{ov}
2864is non-@code{nil} if there is an overlay arrow in the left fringe.
26b76360
RS
2865
2866The value is @code{nil} if @var{pos} is not visible in @var{window}.
2867If @var{window} is @code{nil}, that stands for the selected window.
2868If @var{pos} is @code{nil}, that stands for the value of point in
2869@var{window}.
2870@end defun
9b6e4bc3 2871
26b76360
RS
2872@node Customizing Bitmaps
2873@section Customizing Fringe Bitmaps
2874
90801c68
KS
2875@defun define-fringe-bitmap bitmap bits &optional height width align
2876This function defines the symbol @var{bitmap} as a new fringe bitmap,
2877or replaces an existing bitmap with that name.
9b6e4bc3 2878
26b76360
RS
2879The argument @var{bits} specifies the image to use. It should be
2880either a string or a vector of integers, where each element (an
2881integer) corresponds to one row of the bitmap. Each bit of an integer
90801c68
KS
2882corresponds to one pixel of the bitmap, where the low bit corresponds
2883to the rightmost pixel of the bitmap.
9b6e4bc3 2884
26b76360
RS
2885The height is normally the length of @var{bits}. However, you
2886can specify a different height with non-@code{nil} @var{height}. The width
2887is normally 8, but you can specify a different width with non-@code{nil}
2888@var{width}. The width must be an integer between 1 and 16.
9b6e4bc3 2889
26b76360
RS
2890The argument @var{align} specifies the positioning of the bitmap
2891relative to the range of rows where it is used; the default is to
2892center the bitmap. The allowed values are @code{top}, @code{center},
2893or @code{bottom}.
9b6e4bc3 2894
26b76360 2895The @var{align} argument may also be a list @code{(@var{align}
17234906 2896@var{periodic})} where @var{align} is interpreted as described above.
26b76360
RS
2897If @var{periodic} is non-@code{nil}, it specifies that the rows in
2898@code{bits} should be repeated enough times to reach the specified
2899height.
9b6e4bc3 2900
26b76360
RS
2901The return value on success is an integer identifying the new bitmap.
2902You should save that integer in a variable so it can be used to select
90801c68
KS
2903this bitmap.
2904
2905This function signals an error if there are no more free bitmap slots.
9b6e4bc3
KS
2906@end defun
2907
2908@defun destroy-fringe-bitmap bitmap
26b76360
RS
2909This function destroy the fringe bitmap identified by @var{bitmap}.
2910If @var{bitmap} identifies a standard fringe bitmap, it actually
2911restores the standard definition of that bitmap, instead of
2912eliminating it entirely.
9b6e4bc3
KS
2913@end defun
2914
2915@defun set-fringe-bitmap-face bitmap &optional face
26b76360
RS
2916This sets the face for the fringe bitmap @var{bitmap} to @var{face}.
2917If @var{face} is @code{nil}, it selects the @code{fringe} face. The
2918bitmap's face controls the color to draw it in.
9b6e4bc3 2919
26b76360
RS
2920The face you use here should be derived from @code{fringe}, and should
2921specify only the foreground color.
9b6e4bc3
KS
2922@end defun
2923
f6cad089
RS
2924@node Scroll Bars
2925@section Scroll Bars
2926
2927Normally the frame parameter @code{vertical-scroll-bars} controls
2928whether the windows in the frame have vertical scroll bars. A
2929non-@code{nil} parameter value means they do. The frame parameter
2930@code{scroll-bar-width} specifies how wide they are (@code{nil}
2931meaning the default). @xref{Window Frame Parameters}.
2932
93449dd1
KS
2933@vindex vertical-scroll-bar
2934 You can enable or disable scroll bars for a particular buffer,
2935by setting the variable @code{vertical-scroll-bar}. This variable
2936automatically becomes buffer-local when set. The possible values are
2937@code{left}, @code{right}, @code{t}, which means to use the
2938frame's default, and @code{nil} for no scroll bar.
2939
2940 You can also control this for individual windows. Call the function
f6cad089
RS
2941@code{set-window-scroll-bars} to specify what to do for a specific window:
2942
2943@defun set-window-scroll-bars window width &optional vertical-type horizontal-type
26b76360
RS
2944This function sets the width and type of scroll bars for window
2945@var{window}.
2946
f6cad089 2947@var{width} specifies the scroll bar width in pixels (@code{nil} means
26b76360
RS
2948use the width specified for the frame). @var{vertical-type} specifies
2949whether to have a vertical scroll bar and, if so, where. The possible
2950values are @code{left}, @code{right} and @code{nil}, just like the
2951values of the @code{vertical-scroll-bars} frame parameter.
f6cad089
RS
2952
2953The argument @var{horizontal-type} is meant to specify whether and
2954where to have horizontal scroll bars, but since they are not
26b76360
RS
2955implemented, it has no effect. If @var{window} is @code{nil}, the
2956selected window is used.
f6cad089
RS
2957@end defun
2958
2959@defun window-scroll-bars &optional window
2960Report the width and type of scroll bars specified for @var{window}.
479dbc9d
KS
2961If @var{window} is omitted or @code{nil}, the selected window is used.
2962The value is a list of the form @code{(@var{width}
f6cad089
RS
2963@var{cols} @var{vertical-type} @var{horizontal-type})}. The value
2964@var{width} is the value that was specified for the width (which may
2965be @code{nil}); @var{cols} is the number of columns that the scroll
2966bar actually occupies.
2967
2968@var{horizontal-type} is not actually meaningful.
2969@end defun
2970
2971If you don't specify these values for a window with
2972@code{set-window-scroll-bars}, the buffer-local variables
2973@code{scroll-bar-mode} and @code{scroll-bar-width} in the buffer being
2974displayed control the window's vertical scroll bars. The function
2975@code{set-window-buffer} examines these variables. If you change them
2976in a buffer that is already visible in a window, you can make the
2977window take note of the new values by calling @code{set-window-buffer}
2978specifying the same buffer that is already displayed.
2979
fe8d1469
RS
2980@defvar scroll-bar-mode
2981This variable, always local in all buffers, controls whether and where
2982to put scroll bars in windows displaying the buffer. The possible values
2983are @code{nil} for no scroll bar, @code{left} to put a scroll bar on
2984the left, and @code{right} to put a scroll bar on the right.
2985@end defvar
2986
2987@defvar scroll-bar-width
2988This variable, always local in all buffers, specifies the width of the
2989buffer's scroll bars, measured in pixels. A value of @code{nil} means
2990to use the value specified by the frame.
2991@end defvar
2992
61e74968
LT
2993@node Pointer Shape
2994@section Pointer Shape
9b6e4bc3 2995
26b76360 2996 Normally, the mouse pointer has the @code{text} shape over text and
9b6e4bc3 2997the @code{arrow} shape over window areas which do not correspond to
26b76360
RS
2998any buffer text. You can specify the mouse pointer shape over text or
2999images via the @code{pointer} text property, and for images with the
3000@code{:pointer} and @code{:map} image properties.
9b6e4bc3 3001
26b76360 3002 The available pointer shapes are: @code{text} (or @code{nil}),
9b6e4bc3
KS
3003@code{arrow}, @code{hand}, @code{vdrag}, @code{hdrag},
3004@code{modeline}, and @code{hourglass}.
3005
9b6e4bc3
KS
3006@defvar void-text-area-pointer
3007@tindex void-text-area-pointer
3008This variable specifies the mouse pointer shape in void text areas,
3009i.e. the areas after the end of a line or below the last line in the
3010buffer. The default is to use the @code{arrow} (non-text) pointer.
3011@end defvar
3012
8241495d
RS
3013@node Display Property
3014@section The @code{display} Property
3015@cindex display specification
3016@kindex display @r{(text property)}
3017
a40d4712
PR
3018 The @code{display} text property (or overlay property) is used to
3019insert images into text, and also control other aspects of how text
911a7105
RS
3020displays. The value of the @code{display} property should be a
3021display specification, or a list or vector containing several display
3022specifications. The rest of this section describes several kinds of
3023display specifications and what they mean.
8241495d
RS
3024
3025@menu
02c77ee9 3026* Specified Space:: Displaying one space with a specified width.
9b6e4bc3 3027* Pixel Specification:: Specifying space width or height in pixels.
02c77ee9 3028* Other Display Specs:: Displaying an image; magnifying text; moving it
177c0ea7 3029 up or down on the page; adjusting the width
a40d4712
PR
3030 of spaces within text.
3031* Display Margins:: Displaying text or images to the side of the main text.
02c77ee9 3032* Conditional Display:: Making any of the above features conditional
a40d4712 3033 depending on some Lisp expression.
8241495d
RS
3034@end menu
3035
3036@node Specified Space
3037@subsection Specified Spaces
3038@cindex spaces, specified height or width
3039@cindex specified spaces
3040@cindex variable-width spaces
3041
3042 To display a space of specified width and/or height, use a display
a40d4712
PR
3043specification of the form @code{(space . @var{props})}, where
3044@var{props} is a property list (a list of alternating properties and
3045values). You can put this property on one or more consecutive
3046characters; a space of the specified height and width is displayed in
3047place of @emph{all} of those characters. These are the properties you
0b0e8041 3048can use in @var{props} to specify the weight of the space:
8241495d
RS
3049
3050@table @code
3051@item :width @var{width}
9b6e4bc3
KS
3052If @var{width} is an integer or floating point number, it specifies
3053that the space width should be @var{width} times the normal character
26b76360 3054width. @var{width} can also be a @dfn{pixel width} specification
9b6e4bc3 3055(@pxref{Pixel Specification}).
8241495d
RS
3056
3057@item :relative-width @var{factor}
3058Specifies that the width of the stretch should be computed from the
3059first character in the group of consecutive characters that have the
3060same @code{display} property. The space width is the width of that
3061character, multiplied by @var{factor}.
3062
3063@item :align-to @var{hpos}
9b6e4bc3 3064Specifies that the space should be wide enough to reach @var{hpos}.
26b76360
RS
3065If @var{hpos} is a number, it is measured in units of the normal
3066character width. @var{hpos} can also be a @dfn{pixel width}
3067specification (@pxref{Pixel Specification}).
8241495d
RS
3068@end table
3069
0b0e8041 3070 You should use one and only one of the above properties. You can
26b76360 3071also specify the height of the space, with these properties:
8241495d
RS
3072
3073@table @code
3074@item :height @var{height}
9b6e4bc3
KS
3075Specifies the height of the space.
3076If @var{height} is an integer or floating point number, it specifies
3077that the space height should be @var{height} times the normal character
3078height. The @var{height} may also be a @dfn{pixel height} specification
3079(@pxref{Pixel Specification}).
8241495d
RS
3080
3081@item :relative-height @var{factor}
3082Specifies the height of the space, multiplying the ordinary height
3083of the text having this display specification by @var{factor}.
3084
3085@item :ascent @var{ascent}
9b6e4bc3
KS
3086If the value of @var{ascent} is a non-negative number no greater than
3087100, it specifies that @var{ascent} percent of the height of the space
3088should be considered as the ascent of the space---that is, the part
3089above the baseline. The ascent may also be specified in pixel units
3090with a @dfn{pixel ascent} specification (@pxref{Pixel Specification}).
3091
8241495d
RS
3092@end table
3093
0b0e8041 3094 Don't use both @code{:height} and @code{:relative-height} together.
8241495d 3095
26b76360
RS
3096 The @code{:height} and @code{:align-to} properties are supported on
3097non-graphic terminals, but the other space properties in this section
3098are not.
3099
9b6e4bc3
KS
3100@node Pixel Specification
3101@subsection Pixel Specification for Spaces
3102@cindex spaces, pixel specification
3103
3104 The value of the @code{:width}, @code{:align-to}, @code{:height},
26b76360
RS
3105and @code{:ascent} properties can be a special kind of expression that
3106is evaluated during redisplay. The result of the evaluation is used
3107as an absolute number of pixels.
9b6e4bc3
KS
3108
3109 The following expressions are supported:
3110
3111@example
3112@group
90801c68 3113 @var{expr} ::= @var{num} | (@var{num}) | @var{unit} | @var{elem} | @var{pos} | @var{image} | @var{form}
26b76360
RS
3114 @var{num} ::= @var{integer} | @var{float} | @var{symbol}
3115 @var{unit} ::= in | mm | cm | width | height
3116 @var{elem} ::= left-fringe | right-fringe | left-margin | right-margin
9b6e4bc3 3117 | scroll-bar | text
26b76360
RS
3118 @var{pos} ::= left | center | right
3119 @var{form} ::= (@var{num} . @var{expr}) | (@var{op} @var{expr} ...)
3120 @var{op} ::= + | -
9b6e4bc3
KS
3121@end group
3122@end example
3123
26b76360
RS
3124 The form @var{num} specifies a fraction of the default frame font
3125height or width. The form @code{(@var{num})} specifies an absolute
3126number of pixels. If @var{num} is a symbol, @var{symbol}, its
9b6e4bc3
KS
3127buffer-local variable binding is used.
3128
26b76360
RS
3129 The @code{in}, @code{mm}, and @code{cm} units specify the number of
3130pixels per inch, millimeter, and centimeter, respectively. The
3131@code{width} and @code{height} units correspond to the default width
90801c68 3132and height of the current face. An image specification @code{image}
9b6e4bc3
KS
3133corresponds to the width or height of the image.
3134
3135 The @code{left-fringe}, @code{right-fringe}, @code{left-margin},
3136@code{right-margin}, @code{scroll-bar}, and @code{text} elements
3137specify to the width of the corresponding area of the window.
3138
3139 The @code{left}, @code{center}, and @code{right} positions can be
3140used with @code{:align-to} to specify a position relative to the left
3141edge, center, or right edge of the text area.
3142
26b76360 3143 Any of the above window elements (except @code{text}) can also be
9b6e4bc3
KS
3144used with @code{:align-to} to specify that the position is relative to
3145the left edge of the given area. Once the base offset for a relative
3146position has been set (by the first occurrence of one of these
17234906 3147symbols), further occurrences of these symbols are interpreted as the
9b6e4bc3
KS
3148width of the specified area. For example, to align to the center of
3149the left-margin, use
3150
3151@example
3152:align-to (+ left-margin (0.5 . left-margin))
3153@end example
3154
3155 If no specific base offset is set for alignment, it is always relative
3156to the left edge of the text area. For example, @samp{:align-to 0} in a
3157header-line aligns with the first text column in the text area.
3158
26b76360
RS
3159 A value of the form @code{(@var{num} . @var{expr})} stands
3160multiplying the values of @var{num} and @var{expr}. For example,
3161@code{(2 . in)} specifies a width of 2 inches, while @code{(0.5 .
90801c68 3162@var{image})} specifies half the width (or height) of the specified image.
9b6e4bc3 3163
26b76360
RS
3164 The form @code{(+ @var{expr} ...)} adds up the value of the
3165expressions. The form @code{(- @var{expr} ...)} negates or subtracts
9b6e4bc3
KS
3166the value of the expressions.
3167
8241495d
RS
3168@node Other Display Specs
3169@subsection Other Display Specifications
3170
26b76360
RS
3171 Here are the other sorts of display specifications that you can use
3172in the @code{display} text property.
3173
8241495d
RS
3174@table @code
3175@item (image . @var{image-props})
3176This is in fact an image descriptor (@pxref{Images}). When used as a
3177display specification, it means to display the image instead of the text
3178that has the display specification.
3179
9b6e4bc3 3180@item (slice @var{x} @var{y} @var{width} @var{height})
26b76360
RS
3181This specification together with @code{image} specifies a @dfn{slice}
3182(a partial area) of the image to display. The elements @var{y} and
3183@var{x} specify the top left corner of the slice, within the image;
3184@var{width} and @var{height} specify the width and height of the
3185slice. Integer values are numbers of pixels. A floating point number
3186in the range 0.0--1.0 stands for that fraction of the width or height
3187of the entire image.
9b6e4bc3 3188
1574933b
DL
3189@item ((margin nil) @var{string})
3190@itemx @var{string}
3191A display specification of this form means to display @var{string}
3192instead of the text that has the display specification, at the same
3193position as that text. This is a special case of marginal display
3194(@pxref{Display Margins}).
3195
0b0e8041
RS
3196Recursive display specifications are not supported---string display
3197specifications must not have @code{display} properties themselves.
5143d8a4 3198
8241495d 3199@item (space-width @var{factor})
a40d4712
PR
3200This display specification affects all the space characters within the
3201text that has the specification. It displays all of these spaces
3202@var{factor} times as wide as normal. The element @var{factor} should
3203be an integer or float. Characters other than spaces are not affected
3204at all; in particular, this has no effect on tab characters.
8241495d
RS
3205
3206@item (height @var{height})
3207This display specification makes the text taller or shorter.
3208Here are the possibilities for @var{height}:
3209
3210@table @asis
3211@item @code{(+ @var{n})}
3212This means to use a font that is @var{n} steps larger. A ``step'' is
a40d4712
PR
3213defined by the set of available fonts---specifically, those that match
3214what was otherwise specified for this text, in all attributes except
3215height. Each size for which a suitable font is available counts as
3216another step. @var{n} should be an integer.
8241495d
RS
3217
3218@item @code{(- @var{n})}
3219This means to use a font that is @var{n} steps smaller.
3220
3221@item a number, @var{factor}
3222A number, @var{factor}, means to use a font that is @var{factor} times
3223as tall as the default font.
3224
3225@item a symbol, @var{function}
3226A symbol is a function to compute the height. It is called with the
3227current height as argument, and should return the new height to use.
3228
3229@item anything else, @var{form}
3230If the @var{height} value doesn't fit the previous possibilities, it is
3231a form. Emacs evaluates it to get the new height, with the symbol
3232@code{height} bound to the current specified font height.
3233@end table
3234
3235@item (raise @var{factor})
3236This kind of display specification raises or lowers the text
3237it applies to, relative to the baseline of the line.
3238
3239@var{factor} must be a number, which is interpreted as a multiple of the
3240height of the affected text. If it is positive, that means to display
3241the characters raised. If it is negative, that means to display them
3242lower down.
3243
3244If the text also has a @code{height} display specification, that does
3245not affect the amount of raising or lowering, which is based on the
3246faces used for the text.
3247@end table
3248
3249@node Display Margins
3250@subsection Displaying in the Margins
3251@cindex display margins
3252@cindex margins, display
3253
3254 A buffer can have blank areas called @dfn{display margins} on the left
3255and on the right. Ordinary text never appears in these areas, but you
3256can put things into the display margins using the @code{display}
3257property.
3258
3259 To put text in the left or right display margin of the window, use a
3260display specification of the form @code{(margin right-margin)} or
3261@code{(margin left-margin)} on it. To put an image in a display margin,
3262use that display specification along with the display specification for
a8e171ce
RS
3263the image. Unfortunately, there is currently no way to make
3264text or images in the margin mouse-sensitive.
8241495d 3265
78263139
RS
3266 If you put such a display specification directly on text in the
3267buffer, the specified margin display appears @emph{instead of} that
3268buffer text itself. To put something in the margin @emph{in
3269association with} certain buffer text without preventing or altering
3270the display of that text, put a @code{before-string} property on the
3271text and put the display specification on the contents of the
3272before-string.
3273
8241495d
RS
3274 Before the display margins can display anything, you must give
3275them a nonzero width. The usual way to do that is to set these
3276variables:
3277
3278@defvar left-margin-width
3279@tindex left-margin-width
3280This variable specifies the width of the left margin.
3281It is buffer-local in all buffers.
3282@end defvar
3283
3284@defvar right-margin-width
3285@tindex right-margin-width
3286This variable specifies the width of the right margin.
3287It is buffer-local in all buffers.
3288@end defvar
3289
3290 Setting these variables does not immediately affect the window. These
3291variables are checked when a new buffer is displayed in the window.
3292Thus, you can make changes take effect by calling
3293@code{set-window-buffer}.
3294
3295 You can also set the margin widths immediately.
3296
5143d8a4 3297@defun set-window-margins window left &optional right
8241495d
RS
3298@tindex set-window-margins
3299This function specifies the margin widths for window @var{window}.
177c0ea7 3300The argument @var{left} controls the left margin and
5143d8a4 3301@var{right} controls the right margin (default @code{0}).
8241495d
RS
3302@end defun
3303
3304@defun window-margins &optional window
3305@tindex window-margins
3306This function returns the left and right margins of @var{window}
3307as a cons cell of the form @code{(@var{left} . @var{right})}.
3308If @var{window} is @code{nil}, the selected window is used.
3309@end defun
3310
3311@node Conditional Display
3312@subsection Conditional Display Specifications
3313@cindex conditional display specifications
3314
3315 You can make any display specification conditional. To do that,
bb2337f5 3316package it in another list of the form @code{(when @var{condition} .
8241495d
RS
3317@var{spec})}. Then the specification @var{spec} applies only when
3318@var{condition} evaluates to a non-@code{nil} value. During the
5fd2dcb8
GM
3319evaluation, @code{object} is bound to the string or buffer having the
3320conditional @code{display} property. @code{position} and
3321@code{buffer-position} are bound to the position within @code{object}
3322and the buffer position where the @code{display} property was found,
3323respectively. Both positions can be different when @code{object} is a
3324string.
8241495d
RS
3325
3326@node Images
3327@section Images
3328@cindex images in buffers
3329
3330 To display an image in an Emacs buffer, you must first create an image
3331descriptor, then use it as a display specifier in the @code{display}
911a7105 3332property of text that is displayed (@pxref{Display Property}).
8241495d
RS
3333
3334 Emacs can display a number of different image formats; some of them
da4b7798
JB
3335are supported only if particular support libraries are installed on
3336your machine. In some environments, Emacs allows loading image
3337libraries on demand; if so, the variable @code{image-library-alist}
3338can be used to modify the set of known names for these dynamic
17234906 3339libraries (though it is not possible to add new image formats).
da4b7798
JB
3340
3341 The supported image formats include XBM, XPM (needing the
8241495d
RS
3342libraries @code{libXpm} version 3.4k and @code{libz}), GIF (needing
3343@code{libungif} 4.1.0), Postscript, PBM, JPEG (needing the
3344@code{libjpeg} library version v6a), TIFF (needing @code{libtiff} v3.4),
3345and PNG (needing @code{libpng} 1.0.2).
3346
3347 You specify one of these formats with an image type symbol. The image
3348type symbols are @code{xbm}, @code{xpm}, @code{gif}, @code{postscript},
3349@code{pbm}, @code{jpeg}, @code{tiff}, and @code{png}.
3350
3351@defvar image-types
3352This variable contains a list of those image type symbols that are
da4b7798
JB
3353potentially supported in the current configuration.
3354@emph{Potentially} here means that Emacs knows about the image types,
3355not necessarily that they can be loaded (they could depend on
3356unavailable dynamic libraries, for example).
3357
3358To know which image types are really available, use
3359@code{image-type-available-p}.
8241495d
RS
3360@end defvar
3361
da4b7798 3362@defvar image-library-alist
da4b7798
JB
3363This in an alist of image types vs external libraries needed to
3364display them.
3365
aa0e4da8 3366Each element is a list @code{(@var{image-type} @var{library}...)},
da4b7798
JB
3367where the car is a supported image format from @code{image-types}, and
3368the rest are strings giving alternate filenames for the corresponding
3369external libraries to load.
3370
e6263643
JB
3371Emacs tries to load the libraries in the order they appear on the
3372list; if none is loaded, the running session of Emacs won't support
3373the image type. @code{pbm} and @code{xbm} don't need to be listed;
da4b7798
JB
3374they're always supported.
3375
3376This variable is ignored if the image libraries are statically linked
3377into Emacs.
3378@end defvar
3379
3380@defun image-type-available-p type
3381@findex image-type-available-p
3382
aa0e4da8
JB
3383This function returns non-@code{nil} if image type @var{type} is
3384available, i.e., if images of this type can be loaded and displayed in
3385Emacs. @var{type} should be one of the types contained in
3386@code{image-types}.
da4b7798
JB
3387
3388For image types whose support libraries are statically linked, this
3389function always returns @code{t}; for other image types, it returns
3390@code{t} if the dynamic library could be loaded, @code{nil} otherwise.
3391@end defun
3392
8241495d 3393@menu
a40d4712
PR
3394* Image Descriptors:: How to specify an image for use in @code{:display}.
3395* XBM Images:: Special features for XBM format.
3396* XPM Images:: Special features for XPM format.
3397* GIF Images:: Special features for GIF format.
3398* Postscript Images:: Special features for Postscript format.
3399* Other Image Types:: Various other formats are supported.
3400* Defining Images:: Convenient ways to define an image for later use.
3401* Showing Images:: Convenient ways to display an image once it is defined.
3402* Image Cache:: Internal mechanisms of image display.
8241495d
RS
3403@end menu
3404
3405@node Image Descriptors
3406@subsection Image Descriptors
3407@cindex image descriptor
3408
3409 An image description is a list of the form @code{(image
3410. @var{props})}, where @var{props} is a property list containing
3411alternating keyword symbols (symbols whose names start with a colon) and
14ac7224
GM
3412their values. You can use any Lisp object as a property, but the only
3413properties that have any special meaning are certain symbols, all of
3414them keywords.
3415
3416 Every image descriptor must contain the property @code{:type
3417@var{type}} to specify the format of the image. The value of @var{type}
3418should be an image type symbol; for example, @code{xpm} for an image in
3419XPM format.
8241495d
RS
3420
3421 Here is a list of other properties that are meaningful for all image
3422types:
3423
3424@table @code
2cd8656e
RS
3425@item :file @var{file}
3426The @code{:file} property specifies to load the image from file
3427@var{file}. If @var{file} is not an absolute file name, it is expanded
3428in @code{data-directory}.
3429
3430@item :data @var{data}
3431The @code{:data} property specifies the actual contents of the image.
3432Each image must use either @code{:data} or @code{:file}, but not both.
3433For most image types, the value of the @code{:data} property should be a
3434string containing the image data; we recommend using a unibyte string.
3435
3436Before using @code{:data}, look for further information in the section
3437below describing the specific image format. For some image types,
3438@code{:data} may not be supported; for some, it allows other data types;
3439for some, @code{:data} alone is not enough, so you need to use other
3440image properties along with @code{:data}.
3441
3442@item :margin @var{margin}
3443The @code{:margin} property specifies how many pixels to add as an
9ee1638e 3444extra margin around the image. The value, @var{margin}, must be a
2cd8656e
RS
3445non-negative number, or a pair @code{(@var{x} . @var{y})} of such
3446numbers. If it is a pair, @var{x} specifies how many pixels to add
3447horizontally, and @var{y} specifies how many pixels to add vertically.
3448If @code{:margin} is not specified, the default is zero.
3449
8241495d 3450@item :ascent @var{ascent}
04545643
GM
3451The @code{:ascent} property specifies the amount of the image's
3452height to use for its ascent---that is, the part above the baseline.
3453The value, @var{ascent}, must be a number in the range 0 to 100, or
3454the symbol @code{center}.
3455
3456If @var{ascent} is a number, that percentage of the image's height is
3457used for its ascent.
3458
3459If @var{ascent} is @code{center}, the image is vertically centered
3460around a centerline which would be the vertical centerline of text drawn
3461at the position of the image, in the manner specified by the text
3462properties and overlays that apply to the image.
3463
3464If this property is omitted, it defaults to 50.
8241495d 3465
8241495d
RS
3466@item :relief @var{relief}
3467The @code{:relief} property, if non-@code{nil}, adds a shadow rectangle
3468around the image. The value, @var{relief}, specifies the width of the
3469shadow lines, in pixels. If @var{relief} is negative, shadows are drawn
3470so that the image appears as a pressed button; otherwise, it appears as
3471an unpressed button.
3472
f864120f
GM
3473@item :conversion @var{algorithm}
3474The @code{:conversion} property, if non-@code{nil}, specifies a
8241495d
RS
3475conversion algorithm that should be applied to the image before it is
3476displayed; the value, @var{algorithm}, specifies which algorithm.
3477
62fb5c66
DL
3478@table @code
3479@item laplace
3480@itemx emboss
3481Specifies the Laplace edge detection algorithm, which blurs out small
3482differences in color while highlighting larger differences. People
3483sometimes consider this useful for displaying the image for a
3484``disabled'' button.
3485
3486@item (edge-detection :matrix @var{matrix} :color-adjust @var{adjust})
3487Specifies a general edge-detection algorithm. @var{matrix} must be
3488either a nine-element list or a nine-element vector of numbers. A pixel
3489at position @math{x/y} in the transformed image is computed from
3490original pixels around that position. @var{matrix} specifies, for each
3491pixel in the neighborhood of @math{x/y}, a factor with which that pixel
3492will influence the transformed pixel; element @math{0} specifies the
3493factor for the pixel at @math{x-1/y-1}, element @math{1} the factor for
3494the pixel at @math{x/y-1} etc., as shown below:
3495@iftex
3496@tex
3497$$\pmatrix{x-1/y-1 & x/y-1 & x+1/y-1 \cr
3498 x-1/y & x/y & x+1/y \cr
3499 x-1/y+1& x/y+1 & x+1/y+1 \cr}$$
3500@end tex
3501@end iftex
3502@ifnottex
3503@display
3504 (x-1/y-1 x/y-1 x+1/y-1
3505 x-1/y x/y x+1/y
3506 x-1/y+1 x/y+1 x+1/y+1)
3507@end display
3508@end ifnottex
3509
3510The resulting pixel is computed from the color intensity of the color
3511resulting from summing up the RGB values of surrounding pixels,
3512multiplied by the specified factors, and dividing that sum by the sum
3513of the factors' absolute values.
3514
3515Laplace edge-detection currently uses a matrix of
3516@iftex
3517@tex
3518$$\pmatrix{1 & 0 & 0 \cr
3519 0& 0 & 0 \cr
3520 9 & 9 & -1 \cr}$$
3521@end tex
3522@end iftex
3523@ifnottex
3524@display
3525 (1 0 0
3526 0 0 0
3527 9 9 -1)
3528@end display
3529@end ifnottex
3530
3531Emboss edge-detection uses a matrix of
3532@iftex
3533@tex
3534$$\pmatrix{ 2 & -1 & 0 \cr
3535 -1 & 0 & 1 \cr
3536 0 & 1 & -2 \cr}$$
3537@end tex
3538@end iftex
3539@ifnottex
3540@display
3541 ( 2 -1 0
3542 -1 0 1
3543 0 1 -2)
3544@end display
3545@end ifnottex
3546
3547@item disabled
3548Specifies transforming the image so that it looks ``disabled''.
3549@end table
8241495d 3550
62fb5c66
DL
3551@item :mask @var{mask}
3552If @var{mask} is @code{heuristic} or @code{(heuristic @var{bg})}, build
3553a clipping mask for the image, so that the background of a frame is
3554visible behind the image. If @var{bg} is not specified, or if @var{bg}
3555is @code{t}, determine the background color of the image by looking at
3556the four corners of the image, assuming the most frequently occurring
3557color from the corners is the background color of the image. Otherwise,
3558@var{bg} must be a list @code{(@var{red} @var{green} @var{blue})}
3559specifying the color to assume for the background of the image.
8241495d 3560
9a8dc0d3
RS
3561If @var{mask} is @code{nil}, remove a mask from the image, if it has
3562one. Images in some formats include a mask which can be removed by
3563specifying @code{:mask nil}.
9b6e4bc3
KS
3564
3565@item :pointer @var{shape}
3566This specifies the pointer shape when the mouse pointer is over this
17234906 3567image. @xref{Pointer Shape}, for available pointer shapes.
9b6e4bc3
KS
3568
3569@item :map @var{map}
3570This associates an image map of @dfn{hot spots} with this image.
3571
3572An image map is an alist where each element has the format
3573@code{(@var{area} @var{id} @var{plist})}. An @var{area} is specified
3574as either a rectangle, a circle, or a polygon.
3575
3576A rectangle is a cons
3577@code{(rect . ((@var{x0} . @var{y0}) . (@var{x1} . @var{y1})))}
3578which specifies the pixel coordinates of the upper left and bottom right
3579corners of the rectangle area.
3580
3581A circle is a cons
3582@code{(circle . ((@var{x0} . @var{y0}) . @var{r}))}
3583which specifies the center and the radius of the circle; @var{r} may
3584be a float or integer.
3585
3586A polygon is a cons
61e74968 3587@code{(poly . [@var{x0} @var{y0} @var{x1} @var{y1} ...])}
9b6e4bc3
KS
3588where each pair in the vector describes one corner in the polygon.
3589
3590When the mouse pointer is above a hot-spot area of an image, the
3591@var{plist} of that hot-spot is consulted; if it contains a @code{help-echo}
3592property it defines a tool-tip for the hot-spot, and if it contains
3593a @code{pointer} property, it defines the shape of the mouse cursor when
3594it is over the hot-spot.
17234906 3595@xref{Pointer Shape}, for available pointer shapes.
9b6e4bc3
KS
3596
3597When you click the mouse when the mouse pointer is over a hot-spot, an
3598event is composed by combining the @var{id} of the hot-spot with the
26b76360
RS
3599mouse event; for instance, @code{[area4 mouse-1]} if the hot-spot's
3600@var{id} is @code{area4}.
8241495d
RS
3601@end table
3602
62fb5c66
DL
3603@defun image-mask-p spec &optional frame
3604@tindex image-mask-p
3605This function returns @code{t} if image @var{spec} has a mask bitmap.
3606@var{frame} is the frame on which the image will be displayed.
8d82c597
EZ
3607@var{frame} @code{nil} or omitted means to use the selected frame
3608(@pxref{Input Focus}).
62fb5c66
DL
3609@end defun
3610
8241495d
RS
3611@node XBM Images
3612@subsection XBM Images
3613@cindex XBM
3614
3615 To use XBM format, specify @code{xbm} as the image type. This image
3616format doesn't require an external library, so images of this type are
3617always supported.
3618
3619 Additional image properties supported for the @code{xbm} image type are:
3620
3621@table @code
3622@item :foreground @var{foreground}
3623The value, @var{foreground}, should be a string specifying the image
0d88b7d0
GM
3624foreground color, or @code{nil} for the default color. This color is
3625used for each pixel in the XBM that is 1. The default is the frame's
3626foreground color.
8241495d
RS
3627
3628@item :background @var{background}
3629The value, @var{background}, should be a string specifying the image
0d88b7d0
GM
3630background color, or @code{nil} for the default color. This color is
3631used for each pixel in the XBM that is 0. The default is the frame's
3632background color.
8241495d
RS
3633@end table
3634
72821190 3635 If you specify an XBM image using data within Emacs instead of an
96f66dc5 3636external file, use the following three properties:
8241495d
RS
3637
3638@table @code
96f66dc5
GM
3639@item :data @var{data}
3640The value, @var{data}, specifies the contents of the image.
3641There are three formats you can use for @var{data}:
8241495d 3642
96f66dc5
GM
3643@itemize @bullet
3644@item
3645A vector of strings or bool-vectors, each specifying one line of the
3646image. Do specify @code{:height} and @code{:width}.
8241495d 3647
96f66dc5
GM
3648@item
3649A string containing the same byte sequence as an XBM file would contain.
3650You must not specify @code{:height} and @code{:width} in this case,
3651because omitting them is what indicates the data has the format of an
3652XBM file. The file contents specify the height and width of the image.
8241495d 3653
96f66dc5
GM
3654@item
3655A string or a bool-vector containing the bits of the image (plus perhaps
3656some extra bits at the end that will not be used). It should contain at
3657least @var{width} * @code{height} bits. In this case, you must specify
3658@code{:height} and @code{:width}, both to indicate that the string
3659contains just the bits rather than a whole XBM file, and to specify the
3660size of the image.
3661@end itemize
3662
3663@item :width @var{width}
3664The value, @var{width}, specifies the width of the image, in pixels.
3665
3666@item :height @var{height}
3667The value, @var{height}, specifies the height of the image, in pixels.
8241495d
RS
3668@end table
3669
3670@node XPM Images
3671@subsection XPM Images
3672@cindex XPM
3673
72821190
RS
3674 To use XPM format, specify @code{xpm} as the image type. The
3675additional image property @code{:color-symbols} is also meaningful with
3676the @code{xpm} image type:
8241495d
RS
3677
3678@table @code
3679@item :color-symbols @var{symbols}
3680The value, @var{symbols}, should be an alist whose elements have the
3681form @code{(@var{name} . @var{color})}. In each element, @var{name} is
3682the name of a color as it appears in the image file, and @var{color}
3683specifies the actual color to use for displaying that name.
8241495d
RS
3684@end table
3685
3686@node GIF Images
3687@subsection GIF Images
3688@cindex GIF
3689
3690 For GIF images, specify image type @code{gif}. Because of the patents
3691in the US covering the LZW algorithm, the continued use of GIF format is
3692a problem for the whole Internet; to end this problem, it is a good idea
572fd5aa 3693for everyone, even outside the US, to stop using GIFs right away
8241495d
RS
3694(@uref{http://www.burnallgifs.org/}). But if you still want to use
3695them, Emacs can display them.
3696
3697@table @code
3698@item :index @var{index}
3699You can use @code{:index} to specify one image from a GIF file that
3700contains more than one image. This property specifies use of image
00b3c1cd
RS
3701number @var{index} from the file. If the GIF file doesn't contain an
3702image with index @var{index}, the image displays as a hollow box.
8241495d
RS
3703@end table
3704
3705@ignore
3706This could be used to implement limited support for animated GIFs.
3707For example, the following function displays a multi-image GIF file
3708at point-min in the current buffer, switching between sub-images
3709every 0.1 seconds.
3710
3711(defun show-anim (file max)
3712 "Display multi-image GIF file FILE which contains MAX subimages."
3713 (display-anim (current-buffer) file 0 max t))
3714
3715(defun display-anim (buffer file idx max first-time)
3716 (when (= idx max)
3717 (setq idx 0))
3718 (let ((img (create-image file nil :image idx)))
3719 (save-excursion
3720 (set-buffer buffer)
3721 (goto-char (point-min))
3722 (unless first-time (delete-char 1))
3723 (insert-image img))
3724 (run-with-timer 0.1 nil 'display-anim buffer file (1+ idx) max nil)))
3725@end ignore
3726
3727@node Postscript Images
3728@subsection Postscript Images
3729@cindex Postscript images
3730
3731 To use Postscript for an image, specify image type @code{postscript}.
3732This works only if you have Ghostscript installed. You must always use
3733these three properties:
3734
3735@table @code
3736@item :pt-width @var{width}
3737The value, @var{width}, specifies the width of the image measured in
3738points (1/72 inch). @var{width} must be an integer.
3739
3740@item :pt-height @var{height}
3741The value, @var{height}, specifies the height of the image in points
3742(1/72 inch). @var{height} must be an integer.
3743
3744@item :bounding-box @var{box}
3745The value, @var{box}, must be a list or vector of four integers, which
3746specifying the bounding box of the Postscript image, analogous to the
3747@samp{BoundingBox} comment found in Postscript files.
3748
3749@example
3750%%BoundingBox: 22 171 567 738
3751@end example
3752@end table
3753
72821190
RS
3754 Displaying Postscript images from Lisp data is not currently
3755implemented, but it may be implemented by the time you read this.
3756See the @file{etc/NEWS} file to make sure.
3757
8241495d
RS
3758@node Other Image Types
3759@subsection Other Image Types
3760@cindex PBM
3761
3762 For PBM images, specify image type @code{pbm}. Color, gray-scale and
7ccd82bd
GM
3763monochromatic images are supported. For mono PBM images, two additional
3764image properties are supported.
3765
3766@table @code
3767@item :foreground @var{foreground}
3768The value, @var{foreground}, should be a string specifying the image
0d88b7d0
GM
3769foreground color, or @code{nil} for the default color. This color is
3770used for each pixel in the XBM that is 1. The default is the frame's
3771foreground color.
7ccd82bd
GM
3772
3773@item :background @var{background}
3774The value, @var{background}, should be a string specifying the image
0d88b7d0
GM
3775background color, or @code{nil} for the default color. This color is
3776used for each pixel in the XBM that is 0. The default is the frame's
3777background color.
7ccd82bd 3778@end table
8241495d 3779
72821190 3780 For JPEG images, specify image type @code{jpeg}.
8241495d
RS
3781
3782 For TIFF images, specify image type @code{tiff}.
3783
3784 For PNG images, specify image type @code{png}.
3785
3786@node Defining Images
3787@subsection Defining Images
3788
e3b9fc91
DL
3789 The functions @code{create-image}, @code{defimage} and
3790@code{find-image} provide convenient ways to create image descriptors.
8241495d 3791
5092b644 3792@defun create-image file-or-data &optional type data-p &rest props
8241495d
RS
3793@tindex create-image
3794This function creates and returns an image descriptor which uses the
5092b644
RS
3795data in @var{file-or-data}. @var{file-or-data} can be a file name or
3796a string containing the image data; @var{data-p} should be @code{nil}
3797for the former case, non-@code{nil} for the latter case.
8241495d
RS
3798
3799The optional argument @var{type} is a symbol specifying the image type.
3800If @var{type} is omitted or @code{nil}, @code{create-image} tries to
3801determine the image type from the file's first few bytes, or else
3802from the file's name.
3803
3804The remaining arguments, @var{props}, specify additional image
3805properties---for example,
3806
3807@example
5092b644 3808(create-image "foo.xpm" 'xpm nil :heuristic-mask t)
8241495d
RS
3809@end example
3810
3811The function returns @code{nil} if images of this type are not
3812supported. Otherwise it returns an image descriptor.
3813@end defun
3814
11519a5e 3815@defmac defimage symbol specs &optional doc
8241495d 3816@tindex defimage
11519a5e
EZ
3817This macro defines @var{symbol} as an image name. The arguments
3818@var{specs} is a list which specifies how to display the image.
3819The third argument, @var{doc}, is an optional documentation string.
8241495d
RS
3820
3821Each argument in @var{specs} has the form of a property list, and each
11519a5e
EZ
3822one should specify at least the @code{:type} property and either the
3823@code{:file} or the @code{:data} property. The value of @code{:type}
3824should be a symbol specifying the image type, the value of
3825@code{:file} is the file to load the image from, and the value of
3826@code{:data} is a string containing the actual image data. Here is an
3827example:
8241495d 3828
a40d4712
PR
3829@example
3830(defimage test-image
f43c34a0
RS
3831 ((:type xpm :file "~/test1.xpm")
3832 (:type xbm :file "~/test1.xbm")))
a40d4712 3833@end example
8241495d
RS
3834
3835@code{defimage} tests each argument, one by one, to see if it is
3836usable---that is, if the type is supported and the file exists. The
3837first usable argument is used to make an image descriptor which is
11519a5e 3838stored in @var{symbol}.
8241495d 3839
11519a5e 3840If none of the alternatives will work, then @var{symbol} is defined
8241495d
RS
3841as @code{nil}.
3842@end defmac
3843
e3b9fc91
DL
3844@defun find-image specs
3845@tindex find-image
3846This function provides a convenient way to find an image satisfying one
3847of a list of image specifications @var{specs}.
3848
3849Each specification in @var{specs} is a property list with contents
3850depending on image type. All specifications must at least contain the
3851properties @code{:type @var{type}} and either @w{@code{:file @var{file}}}
3852or @w{@code{:data @var{DATA}}}, where @var{type} is a symbol specifying
3853the image type, e.g.@: @code{xbm}, @var{file} is the file to load the
3854image from, and @var{data} is a string containing the actual image data.
3855The first specification in the list whose @var{type} is supported, and
3856@var{file} exists, is used to construct the image specification to be
3857returned. If no specification is satisfied, @code{nil} is returned.
3858
3859The image is looked for first on @code{load-path} and then in
3860@code{data-directory}.
3861@end defun
3862
8241495d
RS
3863@node Showing Images
3864@subsection Showing Images
3865
3866 You can use an image descriptor by setting up the @code{display}
3867property yourself, but it is easier to use the functions in this
3868section.
3869
9b6e4bc3 3870@defun insert-image image &optional string area slice
8241495d
RS
3871This function inserts @var{image} in the current buffer at point. The
3872value @var{image} should be an image descriptor; it could be a value
3873returned by @code{create-image}, or the value of a symbol defined with
a40d4712
PR
3874@code{defimage}. The argument @var{string} specifies the text to put in
3875the buffer to hold the image.
8241495d
RS
3876
3877The argument @var{area} specifies whether to put the image in a margin.
3878If it is @code{left-margin}, the image appears in the left margin;
3879@code{right-margin} specifies the right margin. If @var{area} is
3880@code{nil} or omitted, the image is displayed at point within the
3881buffer's text.
3882
9b6e4bc3
KS
3883The argument @var{slice} specifies a slice of the image to insert. If
3884@var{slice} is @code{nil} or omitted the whole image is inserted.
26b76360
RS
3885Otherwise, @var{slice} is a list @code{(@var{x} @var{y} @var{width}
3886@var{height})} which specifies the @var{x} and @var{y} positions and
9b6e4bc3 3887@var{width} and @var{height} of the image area to insert. Integer
26b76360
RS
3888values are in units of pixels. A floating point number in the range
38890.0--1.0 stands for that fraction of the width or height of the entire
3890image.
9b6e4bc3 3891
a40d4712
PR
3892Internally, this function inserts @var{string} in the buffer, and gives
3893it a @code{display} property which specifies @var{image}. @xref{Display
8241495d
RS
3894Property}.
3895@end defun
3896
9b6e4bc3 3897@defun insert-sliced-image image &optional string area rows cols
26b76360
RS
3898This function inserts @var{image} in the current buffer at point, like
3899@code{insert-image}, but splits the image into @var{rows}x@var{cols}
3900equally sized slices.
9b6e4bc3
KS
3901@end defun
3902
bb2337f5 3903@defun put-image image pos &optional string area
8241495d
RS
3904This function puts image @var{image} in front of @var{pos} in the
3905current buffer. The argument @var{pos} should be an integer or a
3906marker. It specifies the buffer position where the image should appear.
bb2337f5
DL
3907The argument @var{string} specifies the text that should hold the image
3908as an alternative to the default.
8241495d
RS
3909
3910The argument @var{image} must be an image descriptor, perhaps returned
3911by @code{create-image} or stored by @code{defimage}.
3912
3913The argument @var{area} specifies whether to put the image in a margin.
3914If it is @code{left-margin}, the image appears in the left margin;
3915@code{right-margin} specifies the right margin. If @var{area} is
3916@code{nil} or omitted, the image is displayed at point within the
3917buffer's text.
3918
3919Internally, this function creates an overlay, and gives it a
3920@code{before-string} property containing text that has a @code{display}
3921property whose value is the image. (Whew!)
3922@end defun
3923
3924@defun remove-images start end &optional buffer
3925This function removes images in @var{buffer} between positions
3926@var{start} and @var{end}. If @var{buffer} is omitted or @code{nil},
3927images are removed from the current buffer.
3928
05aea714 3929This removes only images that were put into @var{buffer} the way
8241495d
RS
3930@code{put-image} does it, not images that were inserted with
3931@code{insert-image} or in other ways.
3932@end defun
3933
e3b9fc91
DL
3934@defun image-size spec &optional pixels frame
3935@tindex image-size
3936This function returns the size of an image as a pair
3937@w{@code{(@var{width} . @var{height})}}. @var{spec} is an image
9a8dc0d3
RS
3938specification. @var{pixels} non-@code{nil} means return sizes
3939measured in pixels, otherwise return sizes measured in canonical
3940character units (fractions of the width/height of the frame's default
3941font). @var{frame} is the frame on which the image will be displayed.
8d82c597
EZ
3942@var{frame} null or omitted means use the selected frame (@pxref{Input
3943Focus}).
e3b9fc91
DL
3944@end defun
3945
8241495d
RS
3946@node Image Cache
3947@subsection Image Cache
3948
3949 Emacs stores images in an image cache when it displays them, so it can
3950display them again more efficiently. It removes an image from the cache
3951when it hasn't been displayed for a specified period of time.
3952
3e8b2a01
GM
3953When an image is looked up in the cache, its specification is compared
3954with cached image specifications using @code{equal}. This means that
3955all images with equal specifications share the same image in the cache.
3956
8241495d
RS
3957@defvar image-cache-eviction-delay
3958@tindex image-cache-eviction-delay
3959This variable specifies the number of seconds an image can remain in the
3960cache without being displayed. When an image is not displayed for this
3961length of time, Emacs removes it from the image cache.
3962
3963If the value is @code{nil}, Emacs does not remove images from the cache
3964except when you explicitly clear it. This mode can be useful for
3965debugging.
3966@end defvar
3967
3968@defun clear-image-cache &optional frame
3969@tindex clear-image-cache
3970This function clears the image cache. If @var{frame} is non-@code{nil},
3971only the cache for that frame is cleared. Otherwise all frames' caches
3972are cleared.
3973@end defun
a065c889 3974
02c77ee9
MB
3975@node Buttons
3976@section Buttons
a3cb3b2e 3977@cindex buttons
02c77ee9
MB
3978@cindex buttons in buffers
3979@cindex clickable buttons in buffers
3980
3981 The @emph{button} package defines functions for inserting and
3982manipulating clickable (with the mouse, or via keyboard commands)
a3cb3b2e
MB
3983buttons in Emacs buffers, such as might be used for help hyper-links,
3984etc. Emacs uses buttons for the hyper-links in help text and the like.
02c77ee9
MB
3985
3986A button is essentially a set of properties attached (via text
058296d3 3987properties or overlays) to a region of text in an Emacs buffer, which
02c77ee9
MB
3988are called its button properties. @xref{Button Properties}.
3989
3990One of the these properties (@code{action}) is a function, which will
3991be called when the user invokes it using the keyboard or the mouse.
3992The invoked function may then examine the button and use its other
3993properties as desired.
3994
058296d3 3995In some ways the Emacs button package duplicates functionality offered
02c77ee9
MB
3996by the widget package (@pxref{Top, , Introduction, widget, The Emacs
3997Widget Library}), but the button package has the advantage that it is
3998much faster, much smaller, and much simpler to use (for elisp
3999programmers---for users, the result is about the same). The extra
4000speed and space savings are useful mainly if you need to create many
4001buttons in a buffer (for instance an @code{*Apropos*} buffer uses
4002buttons to make entries clickable, and may contain many thousands of
4003entries).
4004
4005@menu
4006* Button Properties:: Button properties with special meanings.
4007* Button Types:: Defining common properties for classes of buttons.
058296d3 4008* Making Buttons:: Adding buttons to Emacs buffers.
02c77ee9
MB
4009* Manipulating Buttons:: Getting and setting properties of buttons.
4010* Button Buffer Commands:: Buffer-wide commands and bindings for buttons.
9b6e4bc3 4011* Manipulating Button Types::
02c77ee9
MB
4012@end menu
4013
4014@node Button Properties
4015@subsection Button Properties
4016@cindex button properties
4017
4018 Buttons have an associated list of properties defining their
4019appearance and behavior, and other arbitrary properties may be used
4020for application specific purposes.
4021
4022Some properties that have special meaning to the button package
4023include:
4024
4025@table @code
4026
4027@item action
a3cb3b2e 4028@kindex action @r{(button property)}
02c77ee9
MB
4029The function to call when the user invokes the button, which is passed
4030the single argument @var{button}. By default this is @code{ignore},
4031which does nothing.
4032
4033@item mouse-action
a3cb3b2e 4034@kindex mouse-action @r{(button property)}
02c77ee9
MB
4035This is similar to @code{action}, and when present, will be used
4036instead of @code{action} for button invocations resulting from
4037mouse-clicks (instead of the user hitting @key{RET}). If not
4038present, mouse-clicks use @code{action} instead.
4039
4040@item face
a3cb3b2e 4041@kindex face @r{(button property)}
058296d3 4042This is an Emacs face controlling how buttons of this type are
02c77ee9
MB
4043displayed; by default this is the @code{button} face.
4044
4045@item mouse-face
a3cb3b2e 4046@kindex mouse-face @r{(button property)}
02c77ee9
MB
4047This is an additional face which controls appearance during
4048mouse-overs (merged with the usual button face); by default this is
058296d3 4049the usual Emacs @code{highlight} face.
02c77ee9
MB
4050
4051@item keymap
a3cb3b2e 4052@kindex keymap @r{(button property)}
02c77ee9
MB
4053The button's keymap, defining bindings active within the button
4054region. By default this is the usual button region keymap, stored
51d40dab
KS
4055in the variable @code{button-map}, which defines @key{RET} and
4056@key{mouse-2} to invoke the button.
02c77ee9
MB
4057
4058@item type
a3cb3b2e 4059@kindex type @r{(button property)}
02c77ee9
MB
4060The button-type of the button. When creating a button, this is
4061usually specified using the @code{:type} keyword argument.
4062@xref{Button Types}.
4063
4064@item help-echo
a3cb3b2e 4065@kindex help-index @r{(button property)}
058296d3 4066A string displayed by the Emacs tool-tip help system; by default,
02c77ee9
MB
4067@code{"mouse-2, RET: Push this button"}.
4068
91106113
KS
4069@item follow-link
4070@kindex follow-link @r{(button property)}
51d40dab
KS
4071The follow-link property, defining how a @key{Mouse-1} click behaves
4072on this button, @xref{Links and Mouse-1}.
4073
02c77ee9 4074@item button
a3cb3b2e 4075@kindex button @r{(button property)}
02c77ee9
MB
4076All buttons have a non-@code{nil} @code{button} property, which may be useful
4077in finding regions of text that comprise buttons (which is what the
4078standard button functions do).
4079@end table
4080
4081There are other properties defined for the regions of text in a
4082button, but these are not generally interesting for typical uses.
4083
4084@node Button Types
4085@subsection Button Types
4086@cindex button types
4087
4088 Every button has a button @emph{type}, which defines default values
a3cb3b2e
MB
4089for the button's properties. Button types are arranged in a
4090hierarchy, with specialized types inheriting from more general types,
4091so that it's easy to define special-purpose types of buttons for
4092specific tasks.
02c77ee9
MB
4093
4094@defun define-button-type name &rest properties
4095@tindex define-button-type
4096Define a `button type' called @var{name}. The remaining arguments
4097form a sequence of @var{property value} pairs, specifying default
4098property values for buttons with this type (a button's type may be set
4099by giving it a @code{type} property when creating the button, using
4100the @code{:type} keyword argument).
4101
4102In addition, the keyword argument @code{:supertype} may be used to
4103specify a button-type from which @var{name} inherits its default
4104property values. Note that this inheritance happens only when
4105@var{name} is defined; subsequent changes to a supertype are not
4106reflected in its subtypes.
4107@end defun
4108
4109Using @code{define-button-type} to define default properties for
a3cb3b2e
MB
4110buttons is not necessary---buttons without any specified type use the
4111built-in button-type @code{button}---but it is is encouraged, since
4112doing so usually makes the resulting code clearer and more efficient.
02c77ee9 4113
a3cb3b2e
MB
4114@node Making Buttons
4115@subsection Making Buttons
02c77ee9
MB
4116@cindex making buttons
4117
4118 Buttons are associated with a region of text, using an overlay or
4119text-properties to hold button-specific information, all of which are
4120initialized from the button's type (which defaults to the built-in
058296d3 4121button type @code{button}). Like all Emacs text, the appearance of
02c77ee9
MB
4122the button is governed by the @code{face} property; by default (via
4123the @code{face} property inherited from the @code{button} button-type)
4124this is a simple underline, like a typical web-page link.
4125
4126For convenience, there are two sorts of button-creation functions,
4127those that add button properties to an existing region of a buffer,
4128called @code{make-...button}, and those also insert the button text,
4129called @code{insert-...button}.
4130
4131The button-creation functions all take the @code{&rest} argument
4132@var{properties}, which should be a sequence of @var{property value}
4133pairs, specifying properties to add to the button; see @ref{Button
4134Properties}. In addition, the keyword argument @code{:type} may be
4135used to specify a button-type from which to inherit other properties;
4136see @ref{Button Types}. Any properties not explicitly specified
4137during creation will be inherited from the button's type (if the type
4138defines such a property).
4139
4140The following functions add a button using an overlay
4141(@pxref{Overlays}) to hold the button properties:
4142
4143@defun make-button beg end &rest properties
4144@tindex make-button
4145Make a button from @var{beg} to @var{end} in the current buffer.
4146@end defun
4147
4148@defun insert-button label &rest properties
4149@tindex insert-button
4150Insert a button with the label @var{label}.
4151@end defun
4152
058296d3 4153The following functions are similar, but use Emacs text-properties
02c77ee9
MB
4154(@pxref{Text Properties}) to hold the button properties, making the
4155button actually part of the text instead of being a property of the
4156buffer (using text-properties is usually faster than using overlays,
4157so this may be preferable when creating large numbers of buttons):
4158
4159@defun make-text-button beg end &rest properties
4160@tindex make-text-button
4161Make a button from @var{beg} to @var{end} in the current buffer, using
4162text-properties.
4163@end defun
4164
4165@defun insert-text-button label &rest properties
4166@tindex insert-text-button
4167Insert a button with the label @var{label}, using text-properties.
4168@end defun
4169
4170Buttons using text-properties retain no markers into the buffer are
4171retained, which is important for speed in cases where there are
4172extremely large numbers of buttons.
4173
4174@node Manipulating Buttons
4175@subsection Manipulating Buttons
4176@cindex manipulating buttons
4177
4178These are functions for getting and setting properties of buttons.
4179Often these are used by a button's invocation function to determine
4180what to do.
4181
4182Where a @var{button} parameter is specified, it means an object
4183referring to a specific button, either an overlay (for overlay
4184buttons), or a buffer-position or marker (for text property buttons).
4185Such an object is passed as the first argument to a button's
4186invocation function when it is invoked.
4187
4188@defun button-start button
4189@tindex button-start
4190Return the position at which @var{button} starts.
4191@end defun
4192
4193@defun button-end button
4194@tindex button-end
4195Return the position at which @var{button} ends.
4196@end defun
4197
4198@defun button-get button prop
4199@tindex button-get
4200Get the property of button @var{button} named @var{prop}.
4201@end defun
4202
4203@defun button-put button prop val
4204@tindex button-put
4205Set @var{button}'s @var{prop} property to @var{val}.
4206@end defun
4207
4208@defun button-activate button &optional use-mouse-action
4209@tindex button-activate
4210Call @var{button}'s @code{action} property (i.e., invoke it). If
4211@var{use-mouse-action} is non-@code{nil}, try to invoke the button's
a3cb3b2e
MB
4212@code{mouse-action} property instead of @code{action}; if the button
4213has no @code{mouse-action} property, use @code{action} as normal.
02c77ee9
MB
4214@end defun
4215
4216@defun button-label button
4217@tindex button-label
4218Return @var{button}'s text label.
4219@end defun
4220
4221@defun button-type button
4222@tindex button-type
4223Return @var{button}'s button-type.
4224@end defun
4225
4226@defun button-has-type-p button type
4227@tindex button-has-type-p
4228Return @code{t} if @var{button} has button-type @var{type}, or one of
4229@var{type}'s subtypes.
4230@end defun
4231
4232@defun button-at pos
4233@tindex button-at
4234Return the button at position @var{pos} in the current buffer, or @code{nil}.
4235@end defun
4236
4237@node Button Buffer Commands
4238@subsection Button Buffer Commands
4239@cindex button buffer commands
4240
4241These are commands and functions for locating and operating on
058296d3 4242buttons in an Emacs buffer.
02c77ee9
MB
4243
4244@code{push-button} is the command that a user uses to actually `push'
51d40dab 4245a button, and is bound by default in the button itself to @key{RET}
eb3c144c 4246and to @key{mouse-2} using a region-specific keymap. Commands
02c77ee9
MB
4247that are useful outside the buttons itself, such as
4248@code{forward-button} and @code{backward-button} are additionally
4249available in the keymap stored in @code{button-buffer-map}; a mode
4250which uses buttons may want to use @code{button-buffer-map} as a
4251parent keymap for its keymap.
4252
51d40dab
KS
4253If the button has a non-@code{nil} @code{follow-link} property, and
4254@var{mouse-1-click-follows-link} is set, a @key{Mouse-1} click will
4255also activate the @code{push-button} command.
4256
02c77ee9
MB
4257@deffn Command push-button &optional pos use-mouse-action
4258@tindex push-button
4259Perform the action specified by a button at location @var{pos}.
4260@var{pos} may be either a buffer position or a mouse-event. If
a3cb3b2e
MB
4261@var{use-mouse-action} is non-@code{nil}, or @var{pos} is a
4262mouse-event (@pxref{Mouse Events}), try to invoke the button's
4263@code{mouse-action} property instead of @code{action}; if the button
4264has no @code{mouse-action} property, use @code{action} as normal.
4265@var{pos} defaults to point, except when @code{push-button} is invoked
4266interactively as the result of a mouse-event, in which case, the mouse
4267event's position is used. If there's no button at @var{pos}, do
02c77ee9
MB
4268nothing and return @code{nil}, otherwise return @code{t}.
4269@end deffn
4270
4271@deffn Command forward-button n &optional wrap display-message
4272@tindex forward-button
4273Move to the @var{n}th next button, or @var{n}th previous button if
4274@var{n} is negative. If @var{n} is zero, move to the start of any
4275button at point. If @var{wrap} is non-@code{nil}, moving past either
4276end of the buffer continues from the other end. If
4277@var{display-message} is non-@code{nil}, the button's help-echo string
a3cb3b2e
MB
4278is displayed. Any button with a non-@code{nil} @code{skip} property
4279is skipped over. Returns the button found.
02c77ee9
MB
4280@end deffn
4281
4282@deffn Command backward-button n &optional wrap display-message
4283@tindex backward-button
4284Move to the @var{n}th previous button, or @var{n}th next button if
4285@var{n} is negative. If @var{n} is zero, move to the start of any
4286button at point. If @var{wrap} is non-@code{nil}, moving past either
4287end of the buffer continues from the other end. If
4288@var{display-message} is non-@code{nil}, the button's help-echo string
a3cb3b2e
MB
4289is displayed. Any button with a non-@code{nil} @code{skip} property
4290is skipped over. Returns the button found.
02c77ee9
MB
4291@end deffn
4292
4293@defun next-button pos &optional count-current
4294@tindex next-button
4295Return the next button after position @var{pos} in the current buffer.
4296If @var{count-current} is non-@code{nil}, count any button at
4297@var{pos} in the search, instead of starting at the next button.
4298@end defun
4299
4300@defun previous-button pos &optional count-current
4301@tindex previous-button
4302Return the @var{n}th button before position @var{pos} in the current
4303buffer. If @var{count-current} is non-@code{nil}, count any button at
4304@var{pos} in the search, instead of starting at the next button.
4305@end defun
4306
4307@node Manipulating Button Types
4308@subsection Manipulating Button Types
4309@cindex manipulating button types
4310
4311@defun button-type-put type prop val
4312@tindex button-type-put
4313Set the button-type @var{type}'s @var{prop} property to @var{val}.
4314@end defun
4315
4316@defun button-type-get type prop
4317@tindex button-type-get
4318Get the property of button-type @var{type} named @var{prop}.
4319@end defun
4320
4321@defun button-type-subtype-p type supertype
4322@tindex button-type-subtype-p
4323Return @code{t} if button-type @var{type} is a subtype of @var{supertype}.
4324@end defun
4325
42b85554
RS
4326@node Blinking
4327@section Blinking Parentheses
4328@cindex parenthesis matching
4329@cindex blinking
4330@cindex balancing parentheses
4331@cindex close parenthesis
4332
4333 This section describes the mechanism by which Emacs shows a matching
4334open parenthesis when the user inserts a close parenthesis.
4335
42b85554
RS
4336@defvar blink-paren-function
4337The value of this variable should be a function (of no arguments) to
4338be called whenever a character with close parenthesis syntax is inserted.
4339The value of @code{blink-paren-function} may be @code{nil}, in which
4340case nothing is done.
42b85554
RS
4341@end defvar
4342
1911e6e5 4343@defopt blink-matching-paren
42b85554
RS
4344If this variable is @code{nil}, then @code{blink-matching-open} does
4345nothing.
1911e6e5 4346@end defopt
42b85554 4347
1911e6e5 4348@defopt blink-matching-paren-distance
42b85554
RS
4349This variable specifies the maximum distance to scan for a matching
4350parenthesis before giving up.
1911e6e5 4351@end defopt
42b85554 4352
1911e6e5 4353@defopt blink-matching-delay
bfe721d1
KH
4354This variable specifies the number of seconds for the cursor to remain
4355at the matching parenthesis. A fraction of a second often gives
4356good results, but the default is 1, which works on all systems.
1911e6e5 4357@end defopt
bfe721d1 4358
1911e6e5 4359@deffn Command blink-matching-open
42b85554
RS
4360This function is the default value of @code{blink-paren-function}. It
4361assumes that point follows a character with close parenthesis syntax and
4362moves the cursor momentarily to the matching opening character. If that
4363character is not already on the screen, it displays the character's
4364context in the echo area. To avoid long delays, this function does not
4365search farther than @code{blink-matching-paren-distance} characters.
4366
4367Here is an example of calling this function explicitly.
4368
4369@smallexample
4370@group
4371(defun interactive-blink-matching-open ()
4372@c Do not break this line! -- rms.
4373@c The first line of a doc string
4374@c must stand alone.
4375 "Indicate momentarily the start of sexp before point."
4376 (interactive)
4377@end group
4378@group
4379 (let ((blink-matching-paren-distance
4380 (buffer-size))
4381 (blink-matching-paren t))
4382 (blink-matching-open)))
4383@end group
4384@end smallexample
1911e6e5 4385@end deffn
42b85554
RS
4386
4387@node Inverse Video
4388@section Inverse Video
4389@cindex Inverse Video
4390
4391@defopt inverse-video
4392@cindex highlighting
4393This variable controls whether Emacs uses inverse video for all text
4394on the screen. Non-@code{nil} means yes, @code{nil} means no. The
4395default is @code{nil}.
4396@end defopt
4397
4398@defopt mode-line-inverse-video
a40d4712
PR
4399This variable controls the use of inverse video for mode lines and menu
4400bars. If it is non-@code{nil}, then these lines are displayed in
05aea714 4401inverse video. Otherwise, these lines are displayed normally, just like
a40d4712
PR
4402other text. The default is @code{t}.
4403
4404For window frames, this feature actually applies the face named
4405@code{mode-line}; that face is normally set up as the inverse of the
4406default face, unless you change it.
42b85554
RS
4407@end defopt
4408
4409@node Usual Display
4410@section Usual Display Conventions
4411
4412 The usual display conventions define how to display each character
4413code. You can override these conventions by setting up a display table
4414(@pxref{Display Tables}). Here are the usual display conventions:
4415
4416@itemize @bullet
4417@item
4418Character codes 32 through 126 map to glyph codes 32 through 126.
4419Normally this means they display as themselves.
4420
4421@item
4422Character code 9 is a horizontal tab. It displays as whitespace
4423up to a position determined by @code{tab-width}.
4424
4425@item
4426Character code 10 is a newline.
4427
4428@item
4429All other codes in the range 0 through 31, and code 127, display in one
78608595 4430of two ways according to the value of @code{ctl-arrow}. If it is
42b85554 4431non-@code{nil}, these codes map to sequences of two glyphs, where the
ad800164 4432first glyph is the @acronym{ASCII} code for @samp{^}. (A display table can
42b85554
RS
4433specify a glyph to use instead of @samp{^}.) Otherwise, these codes map
4434just like the codes in the range 128 to 255.
4435
8241495d
RS
4436On MS-DOS terminals, Emacs arranges by default for the character code
4437127 to be mapped to the glyph code 127, which normally displays as an
ad800164 4438empty polygon. This glyph is used to display non-@acronym{ASCII} characters
8241495d
RS
4439that the MS-DOS terminal doesn't support. @xref{MS-DOS and MULE,,,
4440emacs, The GNU Emacs Manual}.
4441
42b85554
RS
4442@item
4443Character codes 128 through 255 map to sequences of four glyphs, where
ad800164 4444the first glyph is the @acronym{ASCII} code for @samp{\}, and the others are
a9f0a989 4445digit characters representing the character code in octal. (A display
969fe9b5
RS
4446table can specify a glyph to use instead of @samp{\}.)
4447
4448@item
4449Multibyte character codes above 256 are displayed as themselves, or as a
4450question mark or empty box if the terminal cannot display that
4451character.
42b85554
RS
4452@end itemize
4453
4454 The usual display conventions apply even when there is a display
4455table, for any character whose entry in the active display table is
4456@code{nil}. Thus, when you set up a display table, you need only
969fe9b5 4457specify the characters for which you want special behavior.
42b85554 4458
b6954afd
RS
4459 These display rules apply to carriage return (character code 13), when
4460it appears in the buffer. But that character may not appear in the
4461buffer where you expect it, if it was eliminated as part of end-of-line
15da7853 4462conversion (@pxref{Coding System Basics}).
b6954afd 4463
42b85554
RS
4464 These variables affect the way certain characters are displayed on the
4465screen. Since they change the number of columns the characters occupy,
f9f59935
RS
4466they also affect the indentation functions. These variables also affect
4467how the mode line is displayed; if you want to force redisplay of the
4468mode line using the new values, call the function
4469@code{force-mode-line-update} (@pxref{Mode Line Format}).
42b85554
RS
4470
4471@defopt ctl-arrow
4472@cindex control characters in display
4473This buffer-local variable controls how control characters are
4474displayed. If it is non-@code{nil}, they are displayed as a caret
4475followed by the character: @samp{^A}. If it is @code{nil}, they are
4476displayed as a backslash followed by three octal digits: @samp{\001}.
4477@end defopt
4478
4479@c Following may have overfull hbox.
4480@defvar default-ctl-arrow
4481The value of this variable is the default value for @code{ctl-arrow} in
4482buffers that do not override it. @xref{Default Value}.
4483@end defvar
4484
fe8d1469
RS
4485@defopt tab-width
4486The value of this variable is the spacing between tab stops used for
4487displaying tab characters in Emacs buffers. The value is in units of
4488columns, and the default is 8. Note that this feature is completely
4489independent of the user-settable tab stops used by the command
4490@code{tab-to-tab-stop}. @xref{Indent Tabs}.
4491@end defopt
4492
2468d0c0
DL
4493@defopt indicate-empty-lines
4494@tindex indicate-empty-lines
6e2391a8 4495@cindex fringes, and empty line indication
8a6ca431
RS
4496When this is non-@code{nil}, Emacs displays a special glyph in the
4497fringe of each empty line at the end of the buffer, on terminals that
4498support it (window systems). @xref{Fringes}.
2468d0c0
DL
4499@end defopt
4500
fe8d1469
RS
4501@defvar indicate-buffer-boundaries
4502This buffer-local variable controls how the buffer boundaries and
4503window scrolling are indicated in the window fringes.
4504
4505Emacs can indicate the buffer boundaries---that is, the first and last
4506line in the buffer---with angle icons when they appear on the screen.
4507In addition, Emacs can display an up-arrow in the fringe to show
4508that there is text above the screen, and a down-arrow to show
4509there is text below the screen.
4510
4511There are four kinds of basic values:
4512
4513@table @asis
4514@item @code{nil}
4515Don't display the icons.
4516@item @code{left}
4517Display them in the left fringe.
4518@item @code{right}
4519Display them in the right fringe.
4520@item @var{anything-else}
4521Display the icon at the top of the window top in the left fringe, and other
4522in the right fringe.
4523@end table
4524
4525If value is a cons @code{(@var{angles} . @var{arrows})}, @var{angles}
4526controls the angle icons, and @var{arrows} controls the arrows. Both
4527@var{angles} and @var{arrows} work according to the table above.
4528Thus, @code{(t . right)} places the top angle icon in the left
4529fringe, the bottom angle icon in the right fringe, and both arrows in
4530the right fringe.
4531@end defvar
4532
4533@defvar default-indicate-buffer-boundaries
4534The value of this variable is the default value for
4535@code{indicate-buffer-boundaries} in buffers that do not override it.
4536@end defvar
42b85554
RS
4537
4538@node Display Tables
4539@section Display Tables
4540
4541@cindex display table
969fe9b5
RS
4542You can use the @dfn{display table} feature to control how all possible
4543character codes display on the screen. This is useful for displaying
ad800164 4544European languages that have letters not in the @acronym{ASCII} character
969fe9b5 4545set.
42b85554
RS
4546
4547The display table maps each character code into a sequence of
8241495d 4548@dfn{glyphs}, each glyph being a graphic that takes up one character
42b85554
RS
4549position on the screen. You can also define how to display each glyph
4550on your terminal, using the @dfn{glyph table}.
4551
f9f59935
RS
4552Display tables affect how the mode line is displayed; if you want to
4553force redisplay of the mode line using a new display table, call
4554@code{force-mode-line-update} (@pxref{Mode Line Format}).
4555
42b85554 4556@menu
02c77ee9
MB
4557* Display Table Format:: What a display table consists of.
4558* Active Display Table:: How Emacs selects a display table to use.
4559* Glyphs:: How to define a glyph, and what glyphs mean.
42b85554
RS
4560@end menu
4561
4562@node Display Table Format
4563@subsection Display Table Format
4564
a9f0a989
RS
4565 A display table is actually a char-table (@pxref{Char-Tables}) with
4566@code{display-table} as its subtype.
42b85554
RS
4567
4568@defun make-display-table
4569This creates and returns a display table. The table initially has
4570@code{nil} in all elements.
4571@end defun
4572
f9f59935
RS
4573 The ordinary elements of the display table are indexed by character
4574codes; the element at index @var{c} says how to display the character
4575code @var{c}. The value should be @code{nil} or a vector of glyph
4576values (@pxref{Glyphs}). If an element is @code{nil}, it says to
4577display that character according to the usual display conventions
4578(@pxref{Usual Display}).
22697dac
KH
4579
4580 If you use the display table to change the display of newline
4581characters, the whole buffer will be displayed as one long ``line.''
42b85554 4582
f9f59935 4583 The display table also has six ``extra slots'' which serve special
969fe9b5
RS
4584purposes. Here is a table of their meanings; @code{nil} in any slot
4585means to use the default for that slot, as stated below.
42b85554
RS
4586
4587@table @asis
f9f59935 4588@item 0
42b85554 4589The glyph for the end of a truncated screen line (the default for this
8241495d
RS
4590is @samp{$}). @xref{Glyphs}. Newer Emacs versions, on some platforms,
4591display arrows to indicate truncation---the display table has no effect
4592in these situations.
f9f59935 4593@item 1
42b85554 4594The glyph for the end of a continued line (the default is @samp{\}).
8241495d 4595Newer Emacs versions, on some platforms, display curved arrows to
c2efe6c0 4596indicate continuation---the display table has no effect in these
8241495d 4597situations.
f9f59935 4598@item 2
42b85554
RS
4599The glyph for indicating a character displayed as an octal character
4600code (the default is @samp{\}).
f9f59935 4601@item 3
42b85554 4602The glyph for indicating a control character (the default is @samp{^}).
f9f59935 4603@item 4
42b85554
RS
4604A vector of glyphs for indicating the presence of invisible lines (the
4605default is @samp{...}). @xref{Selective Display}.
f9f59935 4606@item 5
50b04c36 4607The glyph used to draw the border between side-by-side windows (the
8241495d
RS
4608default is @samp{|}). @xref{Splitting Windows}. This takes effect only
4609when there are no scroll bars; if scroll bars are supported and in use,
4610a scroll bar separates the two windows.
42b85554
RS
4611@end table
4612
4613 For example, here is how to construct a display table that mimics the
4614effect of setting @code{ctl-arrow} to a non-@code{nil} value:
4615
4616@example
4617(setq disptab (make-display-table))
4618(let ((i 0))
4619 (while (< i 32)
4620 (or (= i ?\t) (= i ?\n)
4621 (aset disptab i (vector ?^ (+ i 64))))
4622 (setq i (1+ i)))
4623 (aset disptab 127 (vector ?^ ??)))
4624@end example
4625
f9f59935
RS
4626@defun display-table-slot display-table slot
4627This function returns the value of the extra slot @var{slot} of
4628@var{display-table}. The argument @var{slot} may be a number from 0 to
46295 inclusive, or a slot name (symbol). Valid symbols are
4630@code{truncation}, @code{wrap}, @code{escape}, @code{control},
4631@code{selective-display}, and @code{vertical-border}.
4632@end defun
4633
f9f59935
RS
4634@defun set-display-table-slot display-table slot value
4635This function stores @var{value} in the extra slot @var{slot} of
4636@var{display-table}. The argument @var{slot} may be a number from 0 to
46375 inclusive, or a slot name (symbol). Valid symbols are
4638@code{truncation}, @code{wrap}, @code{escape}, @code{control},
4639@code{selective-display}, and @code{vertical-border}.
4640@end defun
4641
8241495d
RS
4642@defun describe-display-table display-table
4643@tindex describe-display-table
4644This function displays a description of the display table
4645@var{display-table} in a help buffer.
4646@end defun
4647
4648@deffn Command describe-current-display-table
4649@tindex describe-current-display-table
4650This command displays a description of the current display table in a
4651help buffer.
4652@end deffn
4653
42b85554
RS
4654@node Active Display Table
4655@subsection Active Display Table
4656@cindex active display table
4657
4658 Each window can specify a display table, and so can each buffer. When
4659a buffer @var{b} is displayed in window @var{w}, display uses the
4660display table for window @var{w} if it has one; otherwise, the display
4661table for buffer @var{b} if it has one; otherwise, the standard display
4662table if any. The display table chosen is called the @dfn{active}
4663display table.
4664
4665@defun window-display-table window
4666This function returns @var{window}'s display table, or @code{nil}
4667if @var{window} does not have an assigned display table.
4668@end defun
4669
4670@defun set-window-display-table window table
4671This function sets the display table of @var{window} to @var{table}.
4672The argument @var{table} should be either a display table or
4673@code{nil}.
4674@end defun
4675
4676@defvar buffer-display-table
969fe9b5
RS
4677This variable is automatically buffer-local in all buffers; its value in
4678a particular buffer specifies the display table for that buffer. If it
4679is @code{nil}, that means the buffer does not have an assigned display
4680table.
42b85554
RS
4681@end defvar
4682
4683@defvar standard-display-table
4684This variable's value is the default display table, used whenever a
4685window has no display table and neither does the buffer displayed in
4686that window. This variable is @code{nil} by default.
4687@end defvar
4688
4689 If there is no display table to use for a particular window---that is,
f9f59935
RS
4690if the window specifies none, its buffer specifies none, and
4691@code{standard-display-table} is @code{nil}---then Emacs uses the usual
42b85554
RS
4692display conventions for all character codes in that window. @xref{Usual
4693Display}.
4694
8241495d
RS
4695A number of functions for changing the standard display table
4696are defined in the library @file{disp-table}.
4697
42b85554
RS
4698@node Glyphs
4699@subsection Glyphs
4700
4701@cindex glyph
4702 A @dfn{glyph} is a generalization of a character; it stands for an
4703image that takes up a single character position on the screen. Glyphs
bbf77fe8
RS
4704are represented in Lisp as integers, just as characters are. Normally
4705Emacs finds glyphs in the display table (@pxref{Display Tables}).
4706
4707 A glyph can be @dfn{simple} or it can be defined by the @dfn{glyph
4708table}. A simple glyph is just a way of specifying a character and a
4709face to output it in. The glyph code for a simple glyph, mod 524288,
4710is the character to output, and the glyph code divided by 524288
4711specifies the face number (@pxref{Face Functions}) to use while
4712outputting it. (524288 is
4713@ifnottex
47142**19.)
4715@end ifnottex
4716@tex
4717$2^{19}$.)
4718@end tex
4719@xref{Faces}.
42b85554 4720
bbf77fe8
RS
4721 On character terminals, you can set up a @dfn{glyph table} to define
4722the meaning of glyph codes. The glyph codes is the value of the
4723variable @code{glyph-table}.
42b85554
RS
4724
4725@defvar glyph-table
4726The value of this variable is the current glyph table. It should be a
177c0ea7 4727vector; the @var{g}th element defines glyph code @var{g}.
bbf77fe8
RS
4728
4729If a glyph code is greater than or equal to the length of the glyph
4730table, that code is automatically simple. If the value of
4731@code{glyph-table} is @code{nil} instead of a vector, then all glyphs
4732are simple. The glyph table is not used on graphical displays, only
4733on character terminals. On graphical displays, all glyphs are simple.
42b85554
RS
4734@end defvar
4735
4736 Here are the possible types of elements in the glyph table:
4737
1911e6e5
RS
4738@table @asis
4739@item @var{string}
42b85554
RS
4740Send the characters in @var{string} to the terminal to output
4741this glyph. This alternative is available on character terminals,
969fe9b5 4742but not under a window system.
42b85554 4743
1911e6e5 4744@item @var{integer}
969fe9b5 4745Define this glyph code as an alias for glyph code @var{integer}. You
bbf77fe8
RS
4746can use an alias to specify a face code for the glyph and use a small
4747number as its code.
42b85554
RS
4748
4749@item @code{nil}
bbf77fe8 4750This glyph is simple.
42b85554
RS
4751@end table
4752
8241495d
RS
4753@defun create-glyph string
4754@tindex create-glyph
4755This function returns a newly-allocated glyph code which is set up to
4756display by sending @var{string} to the terminal.
4757@end defun
4758
42b85554
RS
4759@node Beeping
4760@section Beeping
4761@cindex beeping
4762@cindex bell
4763
f9f59935
RS
4764 This section describes how to make Emacs ring the bell (or blink the
4765screen) to attract the user's attention. Be conservative about how
4766often you do this; frequent bells can become irritating. Also be
4767careful not to use just beeping when signaling an error is more
cf6e4adc 4768appropriate. (@xref{Errors}.)
42b85554 4769
a9f0a989 4770@defun ding &optional do-not-terminate
42b85554
RS
4771@cindex keyboard macro termination
4772This function beeps, or flashes the screen (see @code{visible-bell} below).
4773It also terminates any keyboard macro currently executing unless
a9f0a989 4774@var{do-not-terminate} is non-@code{nil}.
42b85554
RS
4775@end defun
4776
a9f0a989 4777@defun beep &optional do-not-terminate
42b85554
RS
4778This is a synonym for @code{ding}.
4779@end defun
4780
1911e6e5 4781@defopt visible-bell
42b85554
RS
4782This variable determines whether Emacs should flash the screen to
4783represent a bell. Non-@code{nil} means yes, @code{nil} means no. This
969fe9b5
RS
4784is effective on a window system, and on a character-only terminal
4785provided the terminal's Termcap entry defines the visible bell
4786capability (@samp{vb}).
1911e6e5 4787@end defopt
42b85554 4788
f9f59935
RS
4789@defvar ring-bell-function
4790If this is non-@code{nil}, it specifies how Emacs should ``ring the
a40d4712
PR
4791bell.'' Its value should be a function of no arguments. If this is
4792non-@code{nil}, it takes precedence over the @code{visible-bell}
4793variable.
f9f59935
RS
4794@end defvar
4795
42b85554
RS
4796@node Window Systems
4797@section Window Systems
4798
4799 Emacs works with several window systems, most notably the X Window
4800System. Both Emacs and X use the term ``window'', but use it
4801differently. An Emacs frame is a single window as far as X is
4802concerned; the individual Emacs windows are not known to X at all.
4803
4804@defvar window-system
42b85554 4805This variable tells Lisp programs what window system Emacs is running
1911e6e5
RS
4806under. The possible values are
4807
4808@table @code
4809@item x
4810@cindex X Window System
4811Emacs is displaying using X.
4812@item pc
8241495d 4813Emacs is displaying using MS-DOS.
1911e6e5 4814@item w32
05aea714 4815Emacs is displaying using Windows.
8241495d
RS
4816@item mac
4817Emacs is displaying using a Macintosh.
1911e6e5
RS
4818@item nil
4819Emacs is using a character-based terminal.
4820@end table
42b85554
RS
4821@end defvar
4822
42b85554 4823@defvar window-setup-hook
f9f59935
RS
4824This variable is a normal hook which Emacs runs after handling the
4825initialization files. Emacs runs this hook after it has completed
a40d4712 4826loading your init file, the default initialization file (if
a9f0a989 4827any), and the terminal-specific Lisp code, and running the hook
42b85554
RS
4828@code{term-setup-hook}.
4829
4830This hook is used for internal purposes: setting up communication with
4831the window system, and creating the initial window. Users should not
4832interfere with it.
4833@end defvar
ab5796a9
MB
4834
4835@ignore
4836 arch-tag: ffdf5714-7ecf-415b-9023-fbc6b409c2c6
4837@end ignore