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