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