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