(Warning Basics): Fix typo.
[emacs.git] / lispref / display.texi
blob9262be658943903a680391f0b001cfe397350b59
1 @c -*-texinfo-*-
2 @c This is part of the GNU Emacs Lisp Reference Manual.
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002
4 @c   Free Software Foundation, Inc.
5 @c See the file elisp.texi for copying conditions.
6 @setfilename ../info/display
7 @node Display, Calendar, Processes, Top
8 @chapter Emacs Display
10   This chapter describes a number of features related to the display
11 that Emacs presents to the user.
13 @menu
14 * Refresh Screen::      Clearing the screen and redrawing everything on it.
15 * Forcing Redisplay::   Forcing redisplay.
16 * Truncation::          Folding or wrapping long text lines.
17 * The Echo Area::       Where messages are displayed.
18 * Warnings::            Displaying warning messages for the user.
19 * Invisible Text::      Hiding part of the buffer text.
20 * Selective Display::   Hiding part of the buffer text (the old way).
21 * Overlay Arrow::       Display of an arrow to indicate position.
22 * Temporary Displays::  Displays that go away automatically.
23 * Overlays::            Use overlays to highlight parts of the buffer.
24 * Width::               How wide a character or string is on the screen.
25 * Faces::               A face defines a graphics style for text characters:
26                           font, colors, etc.
27 * Fringes::             Controlling window fringes.
28 * Display Property::    Enabling special display features.
29 * Images::              Displaying images in Emacs buffers.
30 * Blinking::            How Emacs shows the matching open parenthesis.
31 * Inverse Video::       Specifying how the screen looks.
32 * Usual Display::       The usual conventions for displaying nonprinting chars.
33 * Display Tables::      How to specify other conventions.
34 * Beeping::             Audible signal to the user.
35 * Window Systems::      Which window system is being used.
36 @end menu
38 @node Refresh Screen
39 @section Refreshing the Screen
41 The function @code{redraw-frame} redisplays the entire contents of a
42 given frame (@pxref{Frames}).
44 @c Emacs 19 feature
45 @defun redraw-frame frame
46 This function clears and redisplays frame @var{frame}.
47 @end defun
49 Even more powerful is @code{redraw-display}:
51 @deffn Command redraw-display
52 This function clears and redisplays all visible frames.
53 @end deffn
55   Processing user input takes absolute priority over redisplay.  If you
56 call these functions when input is available, they do nothing
57 immediately, but a full redisplay does happen eventually---after all the
58 input has been processed.
60   Normally, suspending and resuming Emacs also refreshes the screen.
61 Some terminal emulators record separate contents for display-oriented
62 programs such as Emacs and for ordinary sequential display.  If you are
63 using such a terminal, you might want to inhibit the redisplay on
64 resumption.
66 @defvar no-redraw-on-reenter
67 @cindex suspend (cf. @code{no-redraw-on-reenter})
68 @cindex resume (cf. @code{no-redraw-on-reenter})
69 This variable controls whether Emacs redraws the entire screen after it
70 has been suspended and resumed.  Non-@code{nil} means there is no need
71 to redraw, @code{nil} means redrawing is needed.  The default is @code{nil}.
72 @end defvar
74 @node Forcing Redisplay
75 @section Forcing Redisplay
76 @cindex forcing redisplay
78   Emacs redisplay normally stops if input arrives, and does not happen
79 at all if input is available before it starts.  Most of the time, this
80 is exactly what you want.  However, you can prevent preemption by
81 binding @code{redisplay-dont-pause} to a non-@code{nil} value.
83 @tindex redisplay-dont-pause
84 @defvar redisplay-dont-pause
85 If this variable is non-@code{nil}, pending input does not
86 prevent or halt redisplay; redisplay occurs, and finishes,
87 regardless of whether input is available.  This feature is available
88 as of Emacs 21.
89 @end defvar
91   You can request a display update, but only if no input is pending,
92 with @code{(sit-for 0)}.  To force a display update even when input is
93 pending, do this:
95 @example
96 (let ((redisplay-dont-pause t))
97   (sit-for 0))
98 @end example
100 @node Truncation
101 @section Truncation
102 @cindex line wrapping
103 @cindex continuation lines
104 @cindex @samp{$} in display
105 @cindex @samp{\} in display
107   When a line of text extends beyond the right edge of a window, the
108 line can either be continued on the next screen line, or truncated to
109 one screen line.  The additional screen lines used to display a long
110 text line are called @dfn{continuation} lines.  Normally, a @samp{$} in
111 the rightmost column of the window indicates truncation; a @samp{\} on
112 the rightmost column indicates a line that ``wraps'' onto the next line,
113 which is also called @dfn{continuing} the line.  (The display table can
114 specify alternative indicators; see @ref{Display Tables}.)
116   On a windowed display, the @samp{$} and @samp{\} indicators are
117 replaced with graphics bitmaps displayed in the window fringes
118 (@pxref{Fringes}).
120   Note that continuation is different from filling; continuation happens
121 on the screen only, not in the buffer contents, and it breaks a line
122 precisely at the right margin, not at a word boundary.  @xref{Filling}.
124 @defopt truncate-lines
125 This buffer-local variable controls how Emacs displays lines that extend
126 beyond the right edge of the window.  The default is @code{nil}, which
127 specifies continuation.  If the value is non-@code{nil}, then these
128 lines are truncated.
130 If the variable @code{truncate-partial-width-windows} is non-@code{nil},
131 then truncation is always used for side-by-side windows (within one
132 frame) regardless of the value of @code{truncate-lines}.
133 @end defopt
135 @defopt default-truncate-lines
136 This variable is the default value for @code{truncate-lines}, for
137 buffers that do not have buffer-local values for it.
138 @end defopt
140 @defopt truncate-partial-width-windows
141 This variable controls display of lines that extend beyond the right
142 edge of the window, in side-by-side windows (@pxref{Splitting Windows}).
143 If it is non-@code{nil}, these lines are truncated; otherwise,
144 @code{truncate-lines} says what to do with them.
145 @end defopt
147   When horizontal scrolling (@pxref{Horizontal Scrolling}) is in use in
148 a window, that forces truncation.
150   You can override the glyphs that indicate continuation or truncation
151 using the display table; see @ref{Display Tables}.
153   If your buffer contains @emph{very} long lines, and you use
154 continuation to display them, just thinking about them can make Emacs
155 redisplay slow.  The column computation and indentation functions also
156 become slow.  Then you might find it advisable to set
157 @code{cache-long-line-scans} to @code{t}.
159 @defvar cache-long-line-scans
160 If this variable is non-@code{nil}, various indentation and motion
161 functions, and Emacs redisplay, cache the results of scanning the
162 buffer, and consult the cache to avoid rescanning regions of the buffer
163 unless they are modified.
165 Turning on the cache slows down processing of short lines somewhat.
167 This variable is automatically buffer-local in every buffer.
168 @end defvar
170 @node The Echo Area
171 @section The Echo Area
172 @cindex error display
173 @cindex echo area
175 The @dfn{echo area} is used for displaying messages made with the
176 @code{message} primitive, and for echoing keystrokes.  It is not the
177 same as the minibuffer, despite the fact that the minibuffer appears
178 (when active) in the same place on the screen as the echo area.  The
179 @cite{GNU Emacs Manual} specifies the rules for resolving conflicts
180 between the echo area and the minibuffer for use of that screen space
181 (@pxref{Minibuffer,, The Minibuffer, emacs, The GNU Emacs Manual}).
182 Error messages appear in the echo area; see @ref{Errors}.
184 You can write output in the echo area by using the Lisp printing
185 functions with @code{t} as the stream (@pxref{Output Functions}), or as
186 follows:
188 @defun message string &rest arguments
189 This function displays a message in the echo area.  The
190 argument @var{string} is similar to a C language @code{printf} control
191 string.  See @code{format} in @ref{String Conversion}, for the details
192 on the conversion specifications.  @code{message} returns the
193 constructed string.
195 In batch mode, @code{message} prints the message text on the standard
196 error stream, followed by a newline.
198 If @var{string}, or strings among the @var{arguments}, have @code{face}
199 text properties, these affect the way the message is displayed.
201 @c Emacs 19 feature
202 If @var{string} is @code{nil}, @code{message} clears the echo area; if
203 the echo area has been expanded automatically, this brings it back to
204 its normal size.  If the minibuffer is active, this brings the
205 minibuffer contents back onto the screen immediately.
207 @vindex message-truncate-lines
208 Normally, displaying a long message resizes the echo area to display
209 the entire message.  But if the variable @code{message-truncate-lines}
210 is non-@code{nil}, the echo area does not resize, and the message is
211 truncated to fit it, as in Emacs 20 and before.
213 @example
214 @group
215 (message "Minibuffer depth is %d."
216          (minibuffer-depth))
217  @print{} Minibuffer depth is 0.
218 @result{} "Minibuffer depth is 0."
219 @end group
221 @group
222 ---------- Echo Area ----------
223 Minibuffer depth is 0.
224 ---------- Echo Area ----------
225 @end group
226 @end example
228 To automatically display a message in the echo area or in a pop-buffer,
229 depending on its size, use @code{display-message-or-buffer}.
230 @end defun
232 @tindex with-temp-message
233 @defmac with-temp-message message &rest body
234 This construct displays a message in the echo area temporarily, during
235 the execution of @var{body}.  It displays @var{message}, executes
236 @var{body}, then returns the value of the last body form while restoring
237 the previous echo area contents.
238 @end defmac
240 @defun message-or-box string &rest arguments
241 This function displays a message like @code{message}, but may display it
242 in a dialog box instead of the echo area.  If this function is called in
243 a command that was invoked using the mouse---more precisely, if
244 @code{last-nonmenu-event} (@pxref{Command Loop Info}) is either
245 @code{nil} or a list---then it uses a dialog box or pop-up menu to
246 display the message.  Otherwise, it uses the echo area.  (This is the
247 same criterion that @code{y-or-n-p} uses to make a similar decision; see
248 @ref{Yes-or-No Queries}.)
250 You can force use of the mouse or of the echo area by binding
251 @code{last-nonmenu-event} to a suitable value around the call.
252 @end defun
254 @defun message-box string &rest arguments
255 This function displays a message like @code{message}, but uses a dialog
256 box (or a pop-up menu) whenever that is possible.  If it is impossible
257 to use a dialog box or pop-up menu, because the terminal does not
258 support them, then @code{message-box} uses the echo area, like
259 @code{message}.
260 @end defun
262 @defun display-message-or-buffer message &optional buffer-name not-this-window frame
263 @tindex display-message-or-buffer
264 This function displays the message @var{message}, which may be either a
265 string or a buffer.  If it is shorter than the maximum height of the
266 echo area, as defined by @code{max-mini-window-height}, it is displayed
267 in the echo area, using @code{message}.  Otherwise,
268 @code{display-buffer} is used to show it in a pop-up buffer.
270 Returns either the string shown in the echo area, or when a pop-up
271 buffer is used, the window used to display it.
273 If @var{message} is a string, then the optional argument
274 @var{buffer-name} is the name of the buffer used to display it when a
275 pop-up buffer is used, defaulting to @samp{*Message*}.  In the case
276 where @var{message} is a string and displayed in the echo area, it is
277 not specified whether the contents are inserted into the buffer anyway.
279 The optional arguments @var{not-this-window} and @var{frame} are as for
280 @code{display-buffer}, and only used if a buffer is displayed.
281 @end defun
283 @defun current-message
284 This function returns the message currently being displayed in the
285 echo area, or @code{nil} if there is none.
286 @end defun
288 @defvar cursor-in-echo-area
289 This variable controls where the cursor appears when a message is
290 displayed in the echo area.  If it is non-@code{nil}, then the cursor
291 appears at the end of the message.  Otherwise, the cursor appears at
292 point---not in the echo area at all.
294 The value is normally @code{nil}; Lisp programs bind it to @code{t}
295 for brief periods of time.
296 @end defvar
298 @defvar echo-area-clear-hook
299 This normal hook is run whenever the echo area is cleared---either by
300 @code{(message nil)} or for any other reason.
301 @end defvar
303 Almost all the messages displayed in the echo area are also recorded
304 in the @samp{*Messages*} buffer.
306 @defopt message-log-max
307 This variable specifies how many lines to keep in the @samp{*Messages*}
308 buffer.  The value @code{t} means there is no limit on how many lines to
309 keep.  The value @code{nil} disables message logging entirely.  Here's
310 how to display a message and prevent it from being logged:
312 @example
313 (let (message-log-max)
314   (message @dots{}))
315 @end example
316 @end defopt
318 @defvar echo-keystrokes
319 This variable determines how much time should elapse before command
320 characters echo.  Its value must be an integer or floating point number,
321 which specifies the
322 number of seconds to wait before echoing.  If the user types a prefix
323 key (such as @kbd{C-x}) and then delays this many seconds before
324 continuing, the prefix key is echoed in the echo area.  (Once echoing
325 begins in a key sequence, all subsequent characters in the same key
326 sequence are echoed immediately.)
328 If the value is zero, then command input is not echoed.
329 @end defvar
331 @node Warnings
332 @section Reporting Warnings
333 @cindex warnings
335   @dfn{Warnings} are a facility for a program to inform the user of a
336 possible problem, but continue running.
338 @menu
339 * Warning Basics::      Warnings concepts and functions to report them.
340 * Warning Variables::   Variables programs bind to customize their warnings.
341 * Warning Options::     Variables users set to control display of warnings.
342 @end menu
344 @node Warning Basics
345 @subsection Warning Basics
346 @cindex severity level
348   Every warning has a textual message, which explains the problem for
349 the user, and a @dfn{severity level} which is a symbol.  Here are the
350 possible severity levels, in order of decreasing severity, and their
351 meanings:
353 @table @code
354 @item :emergency
355 A problem that will seriously impair Emacs operation soon
356 if you do not attend to it promptly.
357 @item :error
358 A report of data or circumstances that are inherently wrong.
359 @item :warning
360 A report of data or circumstances that are not inherently wrong, but
361 raise suspicion of a possible problem.
362 @item :debug
363 A report of information that may be useful if you are debugging.
364 @end table
366   When your program encounters invalid input data, it can either
367 signal a Lisp error by calling @code{error} or @code{signal} or report
368 a warning with severity @code{:error}.  Signaling a Lisp error is the
369 easiest thing to do, but it means the program cannot continue
370 processing.  If you want to take the trouble to implement a way to
371 continue processing despite the bad data, then reporting a warning of
372 severity @code{:error} is the right way to inform the user of the
373 problem.  For instance, the Emacs Lisp byte compiler can report an
374 error that way and continue compiling other functions.  (If the
375 program signals a Lisp error and then handles it with
376 @code{condition-case}, the user won't see the error message; it could
377 show the message to the user by reporting it as a warning.)
379 @cindex warning type
380   Each warning has a @dfn{warning type} to classify it.  The type is a
381 list of symbols.  The first symbol should be the custom group that you
382 use for the program's user options.  For example, byte compiler
383 warnings use the warning type @code{(bytecomp)}.  You can also
384 subcategorize the warnings, if you wish, by using more symbols in the
385 list.
387 @defun display-warning type message &optional level buffer-name
388 This function reports a warning, using @var{message} as the message
389 and @var{type} as the warning type.  @var{level} should be the
390 severity level, with @code{:warning} being the default.
392 @var{buffer-name}, if non-@code{nil}, specifies the name of the buffer
393 for logging the warning.  By default, it is @samp{*Warnings*}.
394 @end defun
396 @defun lwarn type level message &rest args
397 This function reports a warning using the value of @code{(format
398 @var{message} @var{args}...)} as the message.  In other respects it is
399 equivalent to @code{display-warning}.
400 @end defun
402 @defun warn message &rest args
403 This function reports a warning using the value of @code{(format
404 @var{message} @var{args}...)} as the message, @code{(emacs)} as the
405 type, and @code{:warning} as the severity level.  It exists for
406 compatibility only; we recommend not using it, because you should
407 specify a specific warning type.
408 @end defun
410 @node Warning Variables
411 @subsection Warning Variables
413   Programs can customize how their warnings appear by binding
414 the variables described in this section.
416 @defvar warning-levels
417 This list defines the meaning and severity order of the warning
418 severity levels.  Each element defines one severity level,
419 and they are arranged in order of decreasing severity.
421 Each element has the form @code{(@var{level} @var{string}
422 @var{function})}, where @var{level} is the severity level it defines.
423 @var{string} specifies the textual description of this level.
424 @var{string} should use @samp{%s} to specify where to put the warning
425 type information, or it can omit the @samp{%s} so as not to include
426 that information.
428 The optional @var{function}, if non-@code{nil}, is a function to call
429 with no arguments, to get the user's attention.
431 Normally you should not change the value of this variable.
432 @end defvar
434 @defvar warning-prefix-function
435 If non-@code{nil}, te value is a function to generate prefix text for
436 warnings.  Programs can bind the variable to a suitable function.
437 @code{display-warning} calls this function with the warnings buffer
438 current, and the function can insert text in it.  That text becomes
439 the beginning of the warning message.
441 The function is called with two arguments, the severity level and its
442 entry in @code{warning-levels}.  It should return a list to use as the
443 entry (this value need not be an actual member of
444 @code{warning-levels}).  By constructing this value, the function to
445 change the severity of the warning, or specify different handling for
446 a given severity level.
448 If the variable's value is @code{nil} then there is no function
449 to call.
450 @end defvar
452 @defvar warning-series
453 Programs can bind this variable to @code{t} to say that the next
454 warning should begin a series.  When several warnings form a series,
455 that means to leave point on the first warning of the series, rather
456 than keep move it for each warning so that it appears on the last one.
457 The series ends when the local binding is unbound and
458 @code{warning-series} becomes @code{nil} again.
460 The value can also be a symbol with a function definition.  That is
461 equivalent to @code{t}, except that the next warning will also call
462 the function with no arguments with the warnings buffer current.  The
463 function can insert text which will serve as a header for the series
464 of warnings.
466 Once a series has begun, the value is a marker which points to the
467 buffer position in the warnings buffer of the start of the series.
469 The variable's normal value is @code{nil}, which means to handle
470 each warning separately.
471 @end defvar
473 @defvar warning-fill-prefix
474 When this variable is non-@code{nil}, it specifies a fill prefix to
475 use for filling each warning's text.
476 @end defvar
478 @defvar warning-type-format
479 This variable specifies the format for displaying the warning type
480 in the warning message.  The result of formatting the type this way
481 gets included in the message under the control of the string in the
482 entry in @code{warning-levels}.  The default value is @code{" (%s)"}.
483 If you bind it to @code{""} then the warning type won't appear at
484 all.
485 @end defvar
487 @node Warning Options
488 @subsection Warning Options
490   These variables are used by users to control what happens
491 when a Lisp program reports a warning.
493 @defopt warning-minimum-level
494 This user option specifies the minimum severity level that should be
495 shown immediately to the user.  The default is @code{:warning}, which
496 means to immediately display all warnings except @code{:debug}
497 warnings.
498 @end defopt
500 @defopt warning-minimum-log-level
501 This user option specifies the minimum severity level that should be
502 logged in the warnings buffer.  The default is @code{:warning}, which
503 means to log all warnings except @code{:debug} warnings.
504 @end defopt
506 @defopt warning-suppress-types
507 This list specifies which warning types should not be displayed
508 immediately for the user.  Each element of the list should be a list
509 of symbols.  If its elements match the first elements in a warning
510 type, then that warning is not displayed immediately.
511 @end defopt
513 @defopt warning-suppress-log-types
514 This list specifies which warning types should not be logged in the
515 warnings buffer.  Each element of the list should be a list of
516 symbols.  If it matches the first few elements in a warning type, then
517 that warning is not logged.
518 @end defopt
519 @node Invisible Text
520 @section Invisible Text
522 @cindex invisible text
523 You can make characters @dfn{invisible}, so that they do not appear on
524 the screen, with the @code{invisible} property.  This can be either a
525 text property (@pxref{Text Properties}) or a property of an overlay
526 (@pxref{Overlays}).
528 In the simplest case, any non-@code{nil} @code{invisible} property makes
529 a character invisible.  This is the default case---if you don't alter
530 the default value of @code{buffer-invisibility-spec}, this is how the
531 @code{invisible} property works.  You should normally use @code{t}
532 as the value of the @code{invisible} property if you don't plan
533 to set @code{buffer-invisibility-spec} yourself.
535 More generally, you can use the variable @code{buffer-invisibility-spec}
536 to control which values of the @code{invisible} property make text
537 invisible.  This permits you to classify the text into different subsets
538 in advance, by giving them different @code{invisible} values, and
539 subsequently make various subsets visible or invisible by changing the
540 value of @code{buffer-invisibility-spec}.
542 Controlling visibility with @code{buffer-invisibility-spec} is
543 especially useful in a program to display the list of entries in a
544 database.  It permits the implementation of convenient filtering
545 commands to view just a part of the entries in the database.  Setting
546 this variable is very fast, much faster than scanning all the text in
547 the buffer looking for properties to change.
549 @defvar buffer-invisibility-spec
550 This variable specifies which kinds of @code{invisible} properties
551 actually make a character invisible.
553 @table @asis
554 @item @code{t}
555 A character is invisible if its @code{invisible} property is
556 non-@code{nil}.  This is the default.
558 @item a list
559 Each element of the list specifies a criterion for invisibility; if a
560 character's @code{invisible} property fits any one of these criteria,
561 the character is invisible.  The list can have two kinds of elements:
563 @table @code
564 @item @var{atom}
565 A character is invisible if its @code{invisible} property value
566 is @var{atom} or if it is a list with @var{atom} as a member.
568 @item (@var{atom} . t)
569 A character is invisible if its @code{invisible} property value
570 is @var{atom} or if it is a list with @var{atom} as a member.
571 Moreover, if this character is at the end of a line and is followed
572 by a visible newline, it displays an ellipsis.
573 @end table
574 @end table
575 @end defvar
577   Two functions are specifically provided for adding elements to
578 @code{buffer-invisibility-spec} and removing elements from it.
580 @defun add-to-invisibility-spec element
581 This function adds the element @var{element} to
582 @code{buffer-invisibility-spec} (if it is not already present in that
583 list).  If @code{buffer-invisibility-spec} was @code{t}, it changes to
584 a list, @code{(t)}, so that text whose @code{invisible} property
585 is @code{t} remains invisible.
586 @end defun
588 @defun remove-from-invisibility-spec element
589 This removeds the element @var{element} from
590 @code{buffer-invisibility-spec}.  This does nothing if @var{element}
591 is not in the list.
592 @end defun
594   A convention for use of @code{buffer-invisibility-spec} is that a
595 major mode should use the mode's own name as an element of
596 @code{buffer-invisibility-spec} and as the value of the
597 @code{invisible} property:
599 @example
600 ;; @r{If you want to display an ellipsis:}
601 (add-to-invisibility-spec '(my-symbol . t))
602 ;; @r{If you don't want ellipsis:}
603 (add-to-invisibility-spec 'my-symbol)
605 (overlay-put (make-overlay beginning end)
606              'invisible 'my-symbol)
608 ;; @r{When done with the overlays:}
609 (remove-from-invisibility-spec '(my-symbol . t))
610 ;; @r{Or respectively:}
611 (remove-from-invisibility-spec 'my-symbol)
612 @end example
614 @vindex line-move-ignore-invisible
615   Ordinarily, commands that operate on text or move point do not care
616 whether the text is invisible.  The user-level line motion commands
617 explicitly ignore invisible newlines if
618 @code{line-move-ignore-invisible} is non-@code{nil}, but only because
619 they are explicitly programmed to do so.
621   Incremental search can make invisible overlays visible temporarily
622 and/or permanently when a match includes invisible text.  To enable
623 this, the overlay should have a non-@code{nil}
624 @code{isearch-open-invisible} property.  The property value should be a
625 function to be called with the overlay as an argument.  This function
626 should make the overlay visible permanently; it is used when the match
627 overlaps the overlay on exit from the search.
629   During the search, such overlays are made temporarily visible by
630 temporarily modifying their invisible and intangible properties.  If you
631 want this to be done differently for a certain overlay, give it an
632 @code{isearch-open-invisible-temporary} property which is a function.
633 The function is called with two arguments: the first is the overlay, and
634 the second is @code{nil} to make the overlay visible, or @code{t} to
635 make it invisible again.
637 @node Selective Display
638 @section Selective Display
639 @cindex selective display
641   @dfn{Selective display} refers to a pair of related features for
642 hiding certain lines on the screen.
644   The first variant, explicit selective display, is designed for use in
645 a Lisp program: it controls which lines are hidden by altering the text.
646 The invisible text feature (@pxref{Invisible Text}) has partially
647 replaced this feature.
649   In the second variant, the choice of lines to hide is made
650 automatically based on indentation.  This variant is designed to be a
651 user-level feature.
653   The way you control explicit selective display is by replacing a
654 newline (control-j) with a carriage return (control-m).  The text that
655 was formerly a line following that newline is now invisible.  Strictly
656 speaking, it is temporarily no longer a line at all, since only newlines
657 can separate lines; it is now part of the previous line.
659   Selective display does not directly affect editing commands.  For
660 example, @kbd{C-f} (@code{forward-char}) moves point unhesitatingly into
661 invisible text.  However, the replacement of newline characters with
662 carriage return characters affects some editing commands.  For example,
663 @code{next-line} skips invisible lines, since it searches only for
664 newlines.  Modes that use selective display can also define commands
665 that take account of the newlines, or that make parts of the text
666 visible or invisible.
668   When you write a selectively displayed buffer into a file, all the
669 control-m's are output as newlines.  This means that when you next read
670 in the file, it looks OK, with nothing invisible.  The selective display
671 effect is seen only within Emacs.
673 @defvar selective-display
674 This buffer-local variable enables selective display.  This means that
675 lines, or portions of lines, may be made invisible.
677 @itemize @bullet
678 @item
679 If the value of @code{selective-display} is @code{t}, then the character
680 control-m marks the start of invisible text; the control-m, and the rest
681 of the line following it, are not displayed.  This is explicit selective
682 display.
684 @item
685 If the value of @code{selective-display} is a positive integer, then
686 lines that start with more than that many columns of indentation are not
687 displayed.
688 @end itemize
690 When some portion of a buffer is invisible, the vertical movement
691 commands operate as if that portion did not exist, allowing a single
692 @code{next-line} command to skip any number of invisible lines.
693 However, character movement commands (such as @code{forward-char}) do
694 not skip the invisible portion, and it is possible (if tricky) to insert
695 or delete text in an invisible portion.
697 In the examples below, we show the @emph{display appearance} of the
698 buffer @code{foo}, which changes with the value of
699 @code{selective-display}.  The @emph{contents} of the buffer do not
700 change.
702 @example
703 @group
704 (setq selective-display nil)
705      @result{} nil
707 ---------- Buffer: foo ----------
708 1 on this column
709  2on this column
710   3n this column
711   3n this column
712  2on this column
713 1 on this column
714 ---------- Buffer: foo ----------
715 @end group
717 @group
718 (setq selective-display 2)
719      @result{} 2
721 ---------- Buffer: foo ----------
722 1 on this column
723  2on this column
724  2on this column
725 1 on this column
726 ---------- Buffer: foo ----------
727 @end group
728 @end example
729 @end defvar
731 @defvar selective-display-ellipses
732 If this buffer-local variable is non-@code{nil}, then Emacs displays
733 @samp{@dots{}} at the end of a line that is followed by invisible text.
734 This example is a continuation of the previous one.
736 @example
737 @group
738 (setq selective-display-ellipses t)
739      @result{} t
741 ---------- Buffer: foo ----------
742 1 on this column
743  2on this column ...
744  2on this column
745 1 on this column
746 ---------- Buffer: foo ----------
747 @end group
748 @end example
750 You can use a display table to substitute other text for the ellipsis
751 (@samp{@dots{}}).  @xref{Display Tables}.
752 @end defvar
754 @node Overlay Arrow
755 @section The Overlay Arrow
756 @cindex overlay arrow
758   The @dfn{overlay arrow} is useful for directing the user's attention
759 to a particular line in a buffer.  For example, in the modes used for
760 interface to debuggers, the overlay arrow indicates the line of code
761 about to be executed.
763 @defvar overlay-arrow-string
764 This variable holds the string to display to call attention to a
765 particular line, or @code{nil} if the arrow feature is not in use.
766 On a graphical display the contents of the string are ignored; instead a
767 glyph is displayed in the fringe area to the left of the display area.
768 @end defvar
770 @defvar overlay-arrow-position
771 This variable holds a marker that indicates where to display the overlay
772 arrow.  It should point at the beginning of a line.  On a non-graphical
773 display the arrow text
774 appears at the beginning of that line, overlaying any text that would
775 otherwise appear.  Since the arrow is usually short, and the line
776 usually begins with indentation, normally nothing significant is
777 overwritten.
779 The overlay string is displayed only in the buffer that this marker
780 points into.  Thus, only one buffer can have an overlay arrow at any
781 given time.
782 @c !!! overlay-arrow-position: but the overlay string may remain in the display
783 @c of some other buffer until an update is required.  This should be fixed
784 @c now.  Is it?
785 @end defvar
787   You can do a similar job by creating an overlay with a
788 @code{before-string} property.  @xref{Overlay Properties}.
790 @node Temporary Displays
791 @section Temporary Displays
793   Temporary displays are used by Lisp programs to put output into a
794 buffer and then present it to the user for perusal rather than for
795 editing.  Many help commands use this feature.
797 @defspec with-output-to-temp-buffer buffer-name forms@dots{}
798 This function executes @var{forms} while arranging to insert any output
799 they print into the buffer named @var{buffer-name}, which is first
800 created if necessary, and put into Help mode.  Finally, the buffer is
801 displayed in some window, but not selected.
803 If the @var{forms} do not change the major mode in the output buffer, so
804 that it is still Help mode at the end of their execution, then
805 @code{with-output-to-temp-buffer} makes this buffer read-only at the
806 end, and also scans it for function and variable names to make them into
807 clickable cross-references.
809 The string @var{buffer-name} specifies the temporary buffer, which
810 need not already exist.  The argument must be a string, not a buffer.
811 The buffer is erased initially (with no questions asked), and it is
812 marked as unmodified after @code{with-output-to-temp-buffer} exits.
814 @code{with-output-to-temp-buffer} binds @code{standard-output} to the
815 temporary buffer, then it evaluates the forms in @var{forms}.  Output
816 using the Lisp output functions within @var{forms} goes by default to
817 that buffer (but screen display and messages in the echo area, although
818 they are ``output'' in the general sense of the word, are not affected).
819 @xref{Output Functions}.
821 Several hooks are available for customizing the behavior
822 of this construct; they are listed below.
824 The value of the last form in @var{forms} is returned.
826 @example
827 @group
828 ---------- Buffer: foo ----------
829  This is the contents of foo.
830 ---------- Buffer: foo ----------
831 @end group
833 @group
834 (with-output-to-temp-buffer "foo"
835     (print 20)
836     (print standard-output))
837 @result{} #<buffer foo>
839 ---------- Buffer: foo ----------
842 #<buffer foo>
844 ---------- Buffer: foo ----------
845 @end group
846 @end example
847 @end defspec
849 @defvar temp-buffer-show-function
850 If this variable is non-@code{nil}, @code{with-output-to-temp-buffer}
851 calls it as a function to do the job of displaying a help buffer.  The
852 function gets one argument, which is the buffer it should display.
854 It is a good idea for this function to run @code{temp-buffer-show-hook}
855 just as @code{with-output-to-temp-buffer} normally would, inside of
856 @code{save-selected-window} and with the chosen window and buffer
857 selected.
858 @end defvar
860 @defvar temp-buffer-setup-hook
861 @tindex temp-buffer-setup-hook
862 This normal hook is run by @code{with-output-to-temp-buffer} before
863 evaluating @var{body}.  When the hook runs, the temporary buffer is
864 current.  This hook is normally set up with a function to put the
865 buffer in Help mode.
866 @end defvar
868 @defvar temp-buffer-show-hook
869 This normal hook is run by @code{with-output-to-temp-buffer} after
870 displaying the temporary buffer.  When the hook runs, the temporary buffer
871 is current, and the window it was displayed in is selected.  This hook
872 is normally set up with a function to make the buffer read only, and
873 find function names and variable names in it, provided the major mode
874 is Help mode.
875 @end defvar
877 @defun momentary-string-display string position &optional char message
878 This function momentarily displays @var{string} in the current buffer at
879 @var{position}.  It has no effect on the undo list or on the buffer's
880 modification status.
882 The momentary display remains until the next input event.  If the next
883 input event is @var{char}, @code{momentary-string-display} ignores it
884 and returns.  Otherwise, that event remains buffered for subsequent use
885 as input.  Thus, typing @var{char} will simply remove the string from
886 the display, while typing (say) @kbd{C-f} will remove the string from
887 the display and later (presumably) move point forward.  The argument
888 @var{char} is a space by default.
890 The return value of @code{momentary-string-display} is not meaningful.
892 If the string @var{string} does not contain control characters, you can
893 do the same job in a more general way by creating (and then subsequently
894 deleting) an overlay with a @code{before-string} property.
895 @xref{Overlay Properties}.
897 If @var{message} is non-@code{nil}, it is displayed in the echo area
898 while @var{string} is displayed in the buffer.  If it is @code{nil}, a
899 default message says to type @var{char} to continue.
901 In this example, point is initially located at the beginning of the
902 second line:
904 @example
905 @group
906 ---------- Buffer: foo ----------
907 This is the contents of foo.
908 @point{}Second line.
909 ---------- Buffer: foo ----------
910 @end group
912 @group
913 (momentary-string-display
914   "**** Important Message! ****"
915   (point) ?\r
916   "Type RET when done reading")
917 @result{} t
918 @end group
920 @group
921 ---------- Buffer: foo ----------
922 This is the contents of foo.
923 **** Important Message! ****Second line.
924 ---------- Buffer: foo ----------
926 ---------- Echo Area ----------
927 Type RET when done reading
928 ---------- Echo Area ----------
929 @end group
930 @end example
931 @end defun
933 @node Overlays
934 @section Overlays
935 @cindex overlays
937 You can use @dfn{overlays} to alter the appearance of a buffer's text on
938 the screen, for the sake of presentation features.  An overlay is an
939 object that belongs to a particular buffer, and has a specified
940 beginning and end.  It also has properties that you can examine and set;
941 these affect the display of the text within the overlay.
943 @menu
944 * Overlay Properties::  How to read and set properties.
945                         What properties do to the screen display.
946 * Managing Overlays::   Creating and moving overlays.
947 * Finding Overlays::    Searching for overlays.
948 @end menu
950 @node Overlay Properties
951 @subsection Overlay Properties
953   Overlay properties are like text properties in that the properties that
954 alter how a character is displayed can come from either source.  But in
955 most respects they are different.  Text properties are considered a part
956 of the text; overlays are specifically considered not to be part of the
957 text.  Thus, copying text between various buffers and strings preserves
958 text properties, but does not try to preserve overlays.  Changing a
959 buffer's text properties marks the buffer as modified, while moving an
960 overlay or changing its properties does not.  Unlike text property
961 changes, overlay changes are not recorded in the buffer's undo list.
962 @xref{Text Properties}, for comparison.
964   These functions are used for reading and writing the properties of an
965 overlay:
967 @defun overlay-get overlay prop
968 This function returns the value of property @var{prop} recorded in
969 @var{overlay}, if any.  If @var{overlay} does not record any value for
970 that property, but it does have a @code{category} property which is a
971 symbol, that symbol's @var{prop} property is used.  Otherwise, the value
972 is @code{nil}.
973 @end defun
975 @defun overlay-put overlay prop value
976 This function sets the value of property @var{prop} recorded in
977 @var{overlay} to @var{value}.  It returns @var{value}.
978 @end defun
980   See also the function @code{get-char-property} which checks both
981 overlay properties and text properties for a given character.
982 @xref{Examining Properties}.
984   Many overlay properties have special meanings; here is a table
985 of them:
987 @table @code
988 @item priority
989 @kindex priority @r{(overlay property)}
990 This property's value (which should be a nonnegative number) determines
991 the priority of the overlay.  The priority matters when two or more
992 overlays cover the same character and both specify a face for display;
993 the one whose @code{priority} value is larger takes priority over the
994 other, and its face attributes override the face attributes of the lower
995 priority overlay.
997 Currently, all overlays take priority over text properties.  Please
998 avoid using negative priority values, as we have not yet decided just
999 what they should mean.
1001 @item window
1002 @kindex window @r{(overlay property)}
1003 If the @code{window} property is non-@code{nil}, then the overlay
1004 applies only on that window.
1006 @item category
1007 @kindex category @r{(overlay property)}
1008 If an overlay has a @code{category} property, we call it the
1009 @dfn{category} of the overlay.  It should be a symbol.  The properties
1010 of the symbol serve as defaults for the properties of the overlay.
1012 @item face
1013 @kindex face @r{(overlay property)}
1014 This property controls the way text is displayed---for example, which
1015 font and which colors.  @xref{Faces}, for more information.
1017 In the simplest case, the value is a face name.  It can also be a list;
1018 then each element can be any of these possibilities:
1020 @itemize @bullet
1021 @item
1022 A face name (a symbol or string).
1024 @item
1025 Starting in Emacs 21, a property list of face attributes.  This has the
1026 form (@var{keyword} @var{value} @dots{}), where each @var{keyword} is a
1027 face attribute name and @var{value} is a meaningful value for that
1028 attribute.  With this feature, you do not need to create a face each
1029 time you want to specify a particular attribute for certain text.
1030 @xref{Face Attributes}.
1032 @item
1033 A cons cell of the form @code{(foreground-color . @var{color-name})} or
1034 @code{(background-color . @var{color-name})}.  These elements specify
1035 just the foreground color or just the background color.
1037 @code{(foreground-color . @var{color-name})} is equivalent to
1038 @code{(:foreground @var{color-name})}, and likewise for the background.
1039 @end itemize
1041 @item mouse-face
1042 @kindex mouse-face @r{(overlay property)}
1043 This property is used instead of @code{face} when the mouse is within
1044 the range of the overlay.
1046 @item display
1047 @kindex display @r{(overlay property)}
1048 This property activates various features that change the
1049 way text is displayed.  For example, it can make text appear taller
1050 or shorter, higher or lower, wider or narrower, or replaced with an image.
1051 @xref{Display Property}.
1053 @item help-echo
1054 @kindex help-echo @r{(text property)}
1055 If an overlay has a @code{help-echo} property, then when you move the
1056 mouse onto the text in the overlay, Emacs displays a help string in the
1057 echo area, or in the tooltip window.  For details see @ref{Text
1058 help-echo}.
1060 @item modification-hooks
1061 @kindex modification-hooks @r{(overlay property)}
1062 This property's value is a list of functions to be called if any
1063 character within the overlay is changed or if text is inserted strictly
1064 within the overlay.
1066 The hook functions are called both before and after each change.
1067 If the functions save the information they receive, and compare notes
1068 between calls, they can determine exactly what change has been made
1069 in the buffer text.
1071 When called before a change, each function receives four arguments: the
1072 overlay, @code{nil}, and the beginning and end of the text range to be
1073 modified.
1075 When called after a change, each function receives five arguments: the
1076 overlay, @code{t}, the beginning and end of the text range just
1077 modified, and the length of the pre-change text replaced by that range.
1078 (For an insertion, the pre-change length is zero; for a deletion, that
1079 length is the number of characters deleted, and the post-change
1080 beginning and end are equal.)
1082 @item insert-in-front-hooks
1083 @kindex insert-in-front-hooks @r{(overlay property)}
1084 This property's value is a list of functions to be called before and
1085 after inserting text right at the beginning of the overlay.  The calling
1086 conventions are the same as for the @code{modification-hooks} functions.
1088 @item insert-behind-hooks
1089 @kindex insert-behind-hooks @r{(overlay property)}
1090 This property's value is a list of functions to be called before and
1091 after inserting text right at the end of the overlay.  The calling
1092 conventions are the same as for the @code{modification-hooks} functions.
1094 @item invisible
1095 @kindex invisible @r{(overlay property)}
1096 The @code{invisible} property can make the text in the overlay
1097 invisible, which means that it does not appear on the screen.
1098 @xref{Invisible Text}, for details.
1100 @item intangible
1101 @kindex intangible @r{(overlay property)}
1102 The @code{intangible} property on an overlay works just like the
1103 @code{intangible} text property.  @xref{Special Properties}, for details.
1105 @item isearch-open-invisible
1106 This property tells incremental search how to make an invisible overlay
1107 visible, permanently, if the final match overlaps it.  @xref{Invisible
1108 Text}.
1110 @item isearch-open-invisible-temporary
1111 This property tells incremental search how to make an invisible overlay
1112 visible, temporarily, during the search.  @xref{Invisible Text}.
1114 @item before-string
1115 @kindex before-string @r{(overlay property)}
1116 This property's value is a string to add to the display at the beginning
1117 of the overlay.  The string does not appear in the buffer in any
1118 sense---only on the screen.
1120 @item after-string
1121 @kindex after-string @r{(overlay property)}
1122 This property's value is a string to add to the display at the end of
1123 the overlay.  The string does not appear in the buffer in any
1124 sense---only on the screen.
1126 @item evaporate
1127 @kindex evaporate @r{(overlay property)}
1128 If this property is non-@code{nil}, the overlay is deleted automatically
1129 if it ever becomes empty (i.e., if it spans no characters).
1131 @item local-map
1132 @cindex keymap of character (and overlays)
1133 @kindex local-map @r{(overlay property)}
1134 If this property is non-@code{nil}, it specifies a keymap for a portion
1135 of the text.  The property's value replaces the buffer's local map, when
1136 the character after point is within the overlay.  @xref{Active Keymaps}.
1138 @item keymap
1139 @kindex keymap @r{(overlay property)}
1140 The @code{keymap} property is similar to @code{local-map} but overrides the
1141 buffer's local map (and the map specified by the @code{local-map}
1142 property) rather than replacing it.
1143 @end table
1145 @node Managing Overlays
1146 @subsection Managing Overlays
1148   This section describes the functions to create, delete and move
1149 overlays, and to examine their contents.
1151 @defun make-overlay start end &optional buffer front-advance rear-advance
1152 This function creates and returns an overlay that belongs to
1153 @var{buffer} and ranges from @var{start} to @var{end}.  Both @var{start}
1154 and @var{end} must specify buffer positions; they may be integers or
1155 markers.  If @var{buffer} is omitted, the overlay is created in the
1156 current buffer.
1158 The arguments @var{front-advance} and @var{rear-advance} specify the
1159 insertion type for the start of the overlay and for the end of the
1160 overlay, respectively.  @xref{Marker Insertion Types}.
1161 @end defun
1163 @defun overlay-start overlay
1164 This function returns the position at which @var{overlay} starts,
1165 as an integer.
1166 @end defun
1168 @defun overlay-end overlay
1169 This function returns the position at which @var{overlay} ends,
1170 as an integer.
1171 @end defun
1173 @defun overlay-buffer overlay
1174 This function returns the buffer that @var{overlay} belongs to.
1175 @end defun
1177 @defun delete-overlay overlay
1178 This function deletes @var{overlay}.  The overlay continues to exist as
1179 a Lisp object, and its property list is unchanged, but it ceases to be
1180 attached to the buffer it belonged to, and ceases to have any effect on
1181 display.
1183 A deleted overlay is not permanently disconnected.  You can give it a
1184 position in a buffer again by calling @code{move-overlay}.
1185 @end defun
1187 @defun move-overlay overlay start end &optional buffer
1188 This function moves @var{overlay} to @var{buffer}, and places its bounds
1189 at @var{start} and @var{end}.  Both arguments @var{start} and @var{end}
1190 must specify buffer positions; they may be integers or markers.
1192 If @var{buffer} is omitted, @var{overlay} stays in the same buffer it
1193 was already associated with; if @var{overlay} was deleted, it goes into
1194 the current buffer.
1196 The return value is @var{overlay}.
1198 This is the only valid way to change the endpoints of an overlay.  Do
1199 not try modifying the markers in the overlay by hand, as that fails to
1200 update other vital data structures and can cause some overlays to be
1201 ``lost''.
1202 @end defun
1204   Here are some examples:
1206 @example
1207 ;; @r{Create an overlay.}
1208 (setq foo (make-overlay 1 10))
1209      @result{} #<overlay from 1 to 10 in display.texi>
1210 (overlay-start foo)
1211      @result{} 1
1212 (overlay-end foo)
1213      @result{} 10
1214 (overlay-buffer foo)
1215      @result{} #<buffer display.texi>
1216 ;; @r{Give it a property we can check later.}
1217 (overlay-put foo 'happy t)
1218      @result{} t
1219 ;; @r{Verify the property is present.}
1220 (overlay-get foo 'happy)
1221      @result{} t
1222 ;; @r{Move the overlay.}
1223 (move-overlay foo 5 20)
1224      @result{} #<overlay from 5 to 20 in display.texi>
1225 (overlay-start foo)
1226      @result{} 5
1227 (overlay-end foo)
1228      @result{} 20
1229 ;; @r{Delete the overlay.}
1230 (delete-overlay foo)
1231      @result{} nil
1232 ;; @r{Verify it is deleted.}
1234      @result{} #<overlay in no buffer>
1235 ;; @r{A deleted overlay has no position.}
1236 (overlay-start foo)
1237      @result{} nil
1238 (overlay-end foo)
1239      @result{} nil
1240 (overlay-buffer foo)
1241      @result{} nil
1242 ;; @r{Undelete the overlay.}
1243 (move-overlay foo 1 20)
1244      @result{} #<overlay from 1 to 20 in display.texi>
1245 ;; @r{Verify the results.}
1246 (overlay-start foo)
1247      @result{} 1
1248 (overlay-end foo)
1249      @result{} 20
1250 (overlay-buffer foo)
1251      @result{} #<buffer display.texi>
1252 ;; @r{Moving and deleting the overlay does not change its properties.}
1253 (overlay-get foo 'happy)
1254      @result{} t
1255 @end example
1257 @node Finding Overlays
1258 @subsection Searching for Overlays
1260 @defun overlays-at pos
1261 This function returns a list of all the overlays that cover the
1262 character at position @var{pos} in the current buffer.  The list is in
1263 no particular order.  An overlay contains position @var{pos} if it
1264 begins at or before @var{pos}, and ends after @var{pos}.
1266 To illustrate usage, here is a Lisp function that returns a list of the
1267 overlays that specify property @var{prop} for the character at point:
1269 @smallexample
1270 (defun find-overlays-specifying (prop)
1271   (let ((overlays (overlays-at (point)))
1272         found)
1273     (while overlays
1274       (let ((overlay (car overlays)))
1275         (if (overlay-get overlay prop)
1276             (setq found (cons overlay found))))
1277       (setq overlays (cdr overlays)))
1278     found))
1279 @end smallexample
1280 @end defun
1282 @defun overlays-in beg end
1283 This function returns a list of the overlays that overlap the region
1284 @var{beg} through @var{end}.  ``Overlap'' means that at least one
1285 character is contained within the overlay and also contained within the
1286 specified region; however, empty overlays are included in the result if
1287 they are located at @var{beg}, or strictly between @var{beg} and @var{end}.
1288 @end defun
1290 @defun next-overlay-change pos
1291 This function returns the buffer position of the next beginning or end
1292 of an overlay, after @var{pos}.
1293 @end defun
1295 @defun previous-overlay-change pos
1296 This function returns the buffer position of the previous beginning or
1297 end of an overlay, before @var{pos}.
1298 @end defun
1300   Here's an easy way to use @code{next-overlay-change} to search for the
1301 next character which gets a non-@code{nil} @code{happy} property from
1302 either its overlays or its text properties (@pxref{Property Search}):
1304 @smallexample
1305 (defun find-overlay-prop (prop)
1306   (save-excursion
1307     (while (and (not (eobp))
1308                 (not (get-char-property (point) 'happy)))
1309       (goto-char (min (next-overlay-change (point))
1310                       (next-single-property-change (point) 'happy))))
1311     (point)))
1312 @end smallexample
1314 @node Width
1315 @section Width
1317 Since not all characters have the same width, these functions let you
1318 check the width of a character.  @xref{Primitive Indent}, and
1319 @ref{Screen Lines}, for related functions.
1321 @defun char-width char
1322 This function returns the width in columns of the character @var{char},
1323 if it were displayed in the current buffer and the selected window.
1324 @end defun
1326 @defun string-width string
1327 This function returns the width in columns of the string @var{string},
1328 if it were displayed in the current buffer and the selected window.
1329 @end defun
1331 @defun truncate-string-to-width string width &optional start-column padding
1332 This function returns the part of @var{string} that fits within
1333 @var{width} columns, as a new string.
1335 If @var{string} does not reach @var{width}, then the result ends where
1336 @var{string} ends.  If one multi-column character in @var{string}
1337 extends across the column @var{width}, that character is not included in
1338 the result.  Thus, the result can fall short of @var{width} but cannot
1339 go beyond it.
1341 The optional argument @var{start-column} specifies the starting column.
1342 If this is non-@code{nil}, then the first @var{start-column} columns of
1343 the string are omitted from the value.  If one multi-column character in
1344 @var{string} extends across the column @var{start-column}, that
1345 character is not included.
1347 The optional argument @var{padding}, if non-@code{nil}, is a padding
1348 character added at the beginning and end of the result string, to extend
1349 it to exactly @var{width} columns.  The padding character is used at the
1350 end of the result if it falls short of @var{width}.  It is also used at
1351 the beginning of the result if one multi-column character in
1352 @var{string} extends across the column @var{start-column}.
1354 @example
1355 (truncate-string-to-width "\tab\t" 12 4)
1356      @result{} "ab"
1357 (truncate-string-to-width "\tab\t" 12 4 ?\s)
1358      @result{} "    ab  "
1359 @end example
1360 @end defun
1362 @node Faces
1363 @section Faces
1364 @cindex faces
1366   A @dfn{face} is a named collection of graphical attributes: font
1367 family, foreground color, background color, optional underlining, and
1368 many others.  Faces are used in Emacs to control the style of display of
1369 particular parts of the text or the frame.
1371 @cindex face id
1372 Each face has its own @dfn{face number}, which distinguishes faces at
1373 low levels within Emacs.  However, for most purposes, you refer to
1374 faces in Lisp programs by their names.
1376 @defun facep object
1377 This function returns @code{t} if @var{object} is a face name symbol (or
1378 if it is a vector of the kind used internally to record face data).  It
1379 returns @code{nil} otherwise.
1380 @end defun
1382 Each face name is meaningful for all frames, and by default it has the
1383 same meaning in all frames.  But you can arrange to give a particular
1384 face name a special meaning in one frame if you wish.
1386 @menu
1387 * Standard Faces::      The faces Emacs normally comes with.
1388 * Defining Faces::      How to define a face with @code{defface}.
1389 * Face Attributes::     What is in a face?
1390 * Attribute Functions:: Functions to examine and set face attributes.
1391 * Merging Faces::       How Emacs combines the faces specified for a character.
1392 * Font Selection::      Finding the best available font for a face.
1393 * Face Functions::      How to define and examine faces.
1394 * Auto Faces::          Hook for automatic face assignment.
1395 * Font Lookup::         Looking up the names of available fonts
1396                           and information about them.
1397 * Fontsets::            A fontset is a collection of fonts
1398                           that handle a range of character sets.
1399 @end menu
1401 @node Standard Faces
1402 @subsection Standard Faces
1404   This table lists all the standard faces and their uses.  Most of them
1405 are used for displaying certain parts of the frames or certain kinds of
1406 text; you can control how those places look by customizing these faces.
1408 @table @code
1409 @item default
1410 @kindex default @r{(face name)}
1411 This face is used for ordinary text.
1413 @item mode-line
1414 @kindex mode-line @r{(face name)}
1415 This face is used for the mode line of the selected window, and for
1416 menu bars when toolkit menus are not used---but only if
1417 @code{mode-line-inverse-video} is non-@code{nil}.
1419 @item modeline
1420 @kindex modeline @r{(face name)}
1421 This is an alias for the @code{mode-line} face, for compatibility with
1422 old Emacs versions.
1424 @item mode-line-inactive
1425 @kindex mode-line-inactive @r{(face name)}
1426 This face is used for mode lines of non-selected windows.
1427 This face inherits from @code{mode-line}, so changes
1428 in that face affect all windows.
1430 @item header-line
1431 @kindex header-line @r{(face name)}
1432 This face is used for the header lines of windows that have them.
1434 @item menu
1435 This face controls the display of menus, both their colors and their
1436 font.  (This works only on certain systems.)
1438 @item fringe
1439 @kindex fringe @r{(face name)}
1440 This face controls the colors of window fringes, the thin areas on
1441 either side that are used to display continuation and truncation glyphs.
1443 @item minibuffer-prompt
1444 @kindex minibuffer-prompt @r{(face name)}
1445 @vindex minibuffer-prompt-properties
1446 This face is used for the text of minibuffer prompts.  By default,
1447 Emacs automatically adds this face to the value of
1448 @code{minibuffer-prompt-properties}, which is a list of text
1449 properties used to display the prompt text.
1451 @item scroll-bar
1452 @kindex scroll-bar @r{(face name)}
1453 This face controls the colors for display of scroll bars.
1455 @item tool-bar
1456 @kindex tool-bar @r{(face name)}
1457 This face is used for display of the tool bar, if any.
1459 @item region
1460 @kindex region @r{(face name)}
1461 This face is used for highlighting the region in Transient Mark mode.
1463 @item secondary-selection
1464 @kindex secondary-selection @r{(face name)}
1465 This face is used to show any secondary selection you have made.
1467 @item highlight
1468 @kindex highlight @r{(face name)}
1469 This face is meant to be used for highlighting for various purposes.
1471 @item trailing-whitespace
1472 @kindex trailing-whitespace @r{(face name)}
1473 This face is used to display excess whitespace at the end of a line,
1474 if @code{show-trailing-whitespace} is non-@code{nil}.
1475 @end table
1477   In contrast, these faces are provided to change the appearance of text
1478 in specific ways.  You can use them on specific text, when you want
1479 the effects they produce.
1481 @table @code
1482 @item bold
1483 @kindex bold @r{(face name)}
1484 This face uses a bold font, if possible.  It uses the bold variant of
1485 the frame's font, if it has one.  It's up to you to choose a default
1486 font that has a bold variant, if you want to use one.
1488 @item italic
1489 @kindex italic @r{(face name)}
1490 This face uses the italic variant of the frame's font, if it has one.
1492 @item bold-italic
1493 @kindex bold-italic @r{(face name)}
1494 This face uses the bold italic variant of the frame's font, if it has
1495 one.
1497 @item underline
1498 @kindex underline @r{(face name)}
1499 This face underlines text.
1501 @item fixed-pitch
1502 @kindex fixed-pitch @r{(face name)}
1503 This face forces use of a particular fixed-width font.
1505 @item variable-pitch
1506 @kindex variable-pitch @r{(face name)}
1507 This face forces use of a particular variable-width font.  It's
1508 reasonable to customize this to use a different variable-width font, if
1509 you like, but you should not make it a fixed-width font.
1510 @end table
1512 @defvar show-trailing-whitespace
1513 @tindex show-trailing-whitespace
1514 If this variable is non-@code{nil}, Emacs uses the
1515 @code{trailing-whitespace} face to display any spaces and tabs at the
1516 end of a line.
1517 @end defvar
1519 @node Defining Faces
1520 @subsection Defining Faces
1522   The way to define a new face is with @code{defface}.  This creates a
1523 kind of customization item (@pxref{Customization}) which the user can
1524 customize using the Customization buffer (@pxref{Easy Customization,,,
1525 emacs, The GNU Emacs Manual}).
1527 @defmac defface face spec doc [keyword value]...
1528 This declares @var{face} as a customizable face that defaults according
1529 to @var{spec}.  You should not quote the symbol @var{face}.  The
1530 argument @var{doc} specifies the face documentation.  The keywords you
1531 can use in @code{defface} are the same ones that are meaningful in both
1532 @code{defgroup} and @code{defcustom} (@pxref{Common Keywords}).
1534 When @code{defface} executes, it defines the face according to
1535 @var{spec}, then uses any customizations that were read from the
1536 init file (@pxref{Init File}) to override that specification.
1538 The purpose of @var{spec} is to specify how the face should appear on
1539 different kinds of terminals.  It should be an alist whose elements have
1540 the form @code{(@var{display} @var{atts})}.  Each element's @sc{car},
1541 @var{display}, specifies a class of terminals.  The element's second element,
1542 @var{atts}, is a list of face attributes and their values; it specifies
1543 what the face should look like on that kind of terminal.  The possible
1544 attributes are defined in the value of @code{custom-face-attributes}.
1546 The @var{display} part of an element of @var{spec} determines which
1547 frames the element applies to.  If more than one element of @var{spec}
1548 matches a given frame, the first matching element is the only one used
1549 for that frame.  There are two possibilities for @var{display}:
1551 @table @asis
1552 @item @code{t}
1553 This element of @var{spec} matches all frames.  Therefore, any
1554 subsequent elements of @var{spec} are never used.  Normally
1555 @code{t} is used in the last (or only) element of @var{spec}.
1557 @item a list
1558 If @var{display} is a list, each element should have the form
1559 @code{(@var{characteristic} @var{value}@dots{})}.  Here
1560 @var{characteristic} specifies a way of classifying frames, and the
1561 @var{value}s are possible classifications which @var{display} should
1562 apply to.  Here are the possible values of @var{characteristic}:
1564 @table @code
1565 @item type
1566 The kind of window system the frame uses---either @code{graphic} (any
1567 graphics-capable display), @code{x}, @code{pc} (for the MS-DOS console),
1568 @code{w32} (for MS Windows 9X/NT), or @code{tty} (a non-graphics-capable
1569 display).
1571 @item class
1572 What kinds of colors the frame supports---either @code{color},
1573 @code{grayscale}, or @code{mono}.
1575 @item background
1576 The kind of background---either @code{light} or @code{dark}.
1578 @item supports
1579 Whether or not the frame can display the face attributes given in
1580 @var{value}@dots{} (@pxref{Face Attributes}).  See the documentation
1581 for the function @code{display-supports-face-attributes-p} for more
1582 information on exactly how this testing is done.  @xref{Display Face
1583 Attribute Testing}.
1584 @end table
1586 If an element of @var{display} specifies more than one @var{value} for a
1587 given @var{characteristic}, any of those values is acceptable.  If
1588 @var{display} has more than one element, each element should specify a
1589 different @var{characteristic}; then @emph{each} characteristic of the
1590 frame must match one of the @var{value}s specified for it in
1591 @var{display}.
1592 @end table
1593 @end defmac
1595   Here's how the standard face @code{region} is defined:
1597 @example
1598 @group
1599 (defface region
1600   `((((type tty) (class color))
1601      (:background "blue" :foreground "white"))
1602 @end group
1603     (((type tty) (class mono))
1604      (:inverse-video t))
1605     (((class color) (background dark))
1606      (:background "blue"))
1607     (((class color) (background light))
1608      (:background "lightblue"))
1609     (t (:background "gray")))
1610 @group
1611   "Basic face for highlighting the region."
1612   :group 'basic-faces)
1613 @end group
1614 @end example
1616   Internally, @code{defface} uses the symbol property
1617 @code{face-defface-spec} to record the face attributes specified in
1618 @code{defface}, @code{saved-face} for the attributes saved by the user
1619 with the customization buffer, and @code{face-documentation} for the
1620 documentation string.
1622 @defopt frame-background-mode
1623 This option, if non-@code{nil}, specifies the background type to use for
1624 interpreting face definitions.  If it is @code{dark}, then Emacs treats
1625 all frames as if they had a dark background, regardless of their actual
1626 background colors.  If it is @code{light}, then Emacs treats all frames
1627 as if they had a light background.
1628 @end defopt
1630 @node Face Attributes
1631 @subsection Face Attributes
1632 @cindex face attributes
1634   The effect of using a face is determined by a fixed set of @dfn{face
1635 attributes}.  This table lists all the face attributes, and what they
1636 mean.  Note that in general, more than one face can be specified for a
1637 given piece of text; when that happens, the attributes of all the faces
1638 are merged to specify how to display the text.  @xref{Merging Faces}.
1640   In Emacs 21, any attribute in a face can have the value
1641 @code{unspecified}.  This means the face doesn't specify that attribute.
1642 In face merging, when the first face fails to specify a particular
1643 attribute, that means the next face gets a chance.  However, the
1644 @code{default} face must specify all attributes.
1646   Some of these font attributes are meaningful only on certain kinds of
1647 displays---if your display cannot handle a certain attribute, the
1648 attribute is ignored.  (The attributes @code{:family}, @code{:width},
1649 @code{:height}, @code{:weight}, and @code{:slant} correspond to parts of
1650 an X Logical Font Descriptor.)
1652 @table @code
1653 @item :family
1654 Font family name, or fontset name (@pxref{Fontsets}).  If you specify a
1655 font family name, the wild-card characters @samp{*} and @samp{?} are
1656 allowed.
1658 @item :width
1659 Relative proportionate width, also known as the character set width or
1660 set width.  This should be one of the symbols @code{ultra-condensed},
1661 @code{extra-condensed}, @code{condensed}, @code{semi-condensed},
1662 @code{normal}, @code{semi-expanded}, @code{expanded},
1663 @code{extra-expanded}, or @code{ultra-expanded}.
1665 @item :height
1666 Either the font height, an integer in units of 1/10 point, a floating
1667 point number specifying the amount by which to scale the height of any
1668 underlying face, or a function, which is called with the old height
1669 (from the underlying face), and should return the new height.
1671 @item :weight
1672 Font weight---a symbol from this series (from most dense to most faint):
1673 @code{ultra-bold}, @code{extra-bold}, @code{bold}, @code{semi-bold},
1674 @code{normal}, @code{semi-light}, @code{light}, @code{extra-light},
1675 or @code{ultra-light}.
1677 On a text-only terminal, any weight greater than normal is displayed as
1678 extra bright, and any weight less than normal is displayed as
1679 half-bright (provided the terminal supports the feature).
1681 @item :slant
1682 Font slant---one of the symbols @code{italic}, @code{oblique}, @code{normal},
1683 @code{reverse-italic}, or @code{reverse-oblique}.
1685 On a text-only terminal, slanted text is displayed as half-bright, if
1686 the terminal supports the feature.
1688 @item :foreground
1689 Foreground color, a string.
1691 @item :background
1692 Background color, a string.
1694 @item :inverse-video
1695 Whether or not characters should be displayed in inverse video.  The
1696 value should be @code{t} (yes) or @code{nil} (no).
1698 @item :stipple
1699 The background stipple, a bitmap.
1701 The value can be a string; that should be the name of a file containing
1702 external-format X bitmap data.  The file is found in the directories
1703 listed in the variable @code{x-bitmap-file-path}.
1705 Alternatively, the value can specify the bitmap directly, with a list
1706 of the form @code{(@var{width} @var{height} @var{data})}.  Here,
1707 @var{width} and @var{height} specify the size in pixels, and
1708 @var{data} is a string containing the raw bits of the bitmap, row by
1709 row.  Each row occupies @math{(@var{width} + 7) / 8} consecutive bytes
1710 in the string (which should be a unibyte string for best results).
1711 This means that each row always occupies at least one whole byte.
1713 If the value is @code{nil}, that means use no stipple pattern.
1715 Normally you do not need to set the stipple attribute, because it is
1716 used automatically to handle certain shades of gray.
1718 @item :underline
1719 Whether or not characters should be underlined, and in what color.  If
1720 the value is @code{t}, underlining uses the foreground color of the
1721 face.  If the value is a string, underlining uses that color.  The
1722 value @code{nil} means do not underline.
1724 @item :overline
1725 Whether or not characters should be overlined, and in what color.
1726 The value is used like that of @code{:underline}.
1728 @item :strike-through
1729 Whether or not characters should be strike-through, and in what
1730 color.  The value is used like that of @code{:underline}.
1732 @item :inherit
1733 The name of a face from which to inherit attributes, or a list of face
1734 names.  Attributes from inherited faces are merged into the face like an
1735 underlying face would be, with higher priority than underlying faces.
1737 @item :box
1738 Whether or not a box should be drawn around characters, its color, the
1739 width of the box lines, and 3D appearance.
1740 @end table
1742   Here are the possible values of the @code{:box} attribute, and what
1743 they mean:
1745 @table @asis
1746 @item @code{nil}
1747 Don't draw a box.
1749 @item @code{t}
1750 Draw a box with lines of width 1, in the foreground color.
1752 @item @var{color}
1753 Draw a box with lines of width 1, in color @var{color}.
1755 @item @code{(:line-width @var{width} :color @var{color} :style @var{style})}
1756 This way you can explicitly specify all aspects of the box.  The value
1757 @var{width} specifies the width of the lines to draw; it defaults to 1.
1759 The value @var{color} specifies the color to draw with.  The default is
1760 the foreground color of the face for simple boxes, and the background
1761 color of the face for 3D boxes.
1763 The value @var{style} specifies whether to draw a 3D box.  If it is
1764 @code{released-button}, the box looks like a 3D button that is not being
1765 pressed.  If it is @code{pressed-button}, the box looks like a 3D button
1766 that is being pressed.  If it is @code{nil} or omitted, a plain 2D box
1767 is used.
1768 @end table
1770   The attributes @code{:overline}, @code{:strike-through} and
1771 @code{:box} are new in Emacs 21.  The attributes @code{:family},
1772 @code{:height}, @code{:width}, @code{:weight}, @code{:slant} are also
1773 new; previous versions used the following attributes, now semi-obsolete,
1774 to specify some of the same information:
1776 @table @code
1777 @item :font
1778 This attribute specifies the font name.
1780 @item :bold
1781 A non-@code{nil} value specifies a bold font.
1783 @item :italic
1784 A non-@code{nil} value specifies an italic font.
1785 @end table
1787   For compatibility, you can still set these ``attributes'' in Emacs 21,
1788 even though they are not real face attributes.  Here is what that does:
1790 @table @code
1791 @item :font
1792 You can specify an X font name as the ``value'' of this ``attribute'';
1793 that sets the @code{:family}, @code{:width}, @code{:height},
1794 @code{:weight}, and @code{:slant} attributes according to the font name.
1796 If the value is a pattern with wildcards, the first font that matches
1797 the pattern is used to set these attributes.
1799 @item :bold
1800 A non-@code{nil} makes the face bold; @code{nil} makes it normal.
1801 This actually works by setting the @code{:weight} attribute.
1803 @item :italic
1804 A non-@code{nil} makes the face italic; @code{nil} makes it normal.
1805 This actually works by setting the @code{:slant} attribute.
1806 @end table
1808 @defvar x-bitmap-file-path
1809 This variable specifies a list of directories for searching
1810 for bitmap files, for the @code{:stipple} attribute.
1811 @end defvar
1813 @defun bitmap-spec-p object
1814 This returns @code{t} if @var{object} is a valid bitmap specification,
1815 suitable for use with @code{:stipple} (see above).  It returns
1816 @code{nil} otherwise.
1817 @end defun
1819 @node Attribute Functions
1820 @subsection Face Attribute Functions
1822   You can modify the attributes of an existing face with the following
1823 functions.  If you specify @var{frame}, they affect just that frame;
1824 otherwise, they affect all frames as well as the defaults that apply to
1825 new frames.
1827 @tindex set-face-attribute
1828 @defun set-face-attribute face frame &rest arguments
1829 This function sets one or more attributes of face @var{face}
1830 for frame @var{frame}.  If @var{frame} is @code{nil}, it sets
1831 the attribute for all frames, and the defaults for new frames.
1833 The extra arguments @var{arguments} specify the attributes to set, and
1834 the values for them.  They should consist of alternating attribute names
1835 (such as @code{:family} or @code{:underline}) and corresponding values.
1836 Thus,
1838 @example
1839 (set-face-attribute 'foo nil
1840                     :width 'extended
1841                     :weight 'bold
1842                     :underline "red")
1843 @end example
1845 @noindent
1846 sets the attributes @code{:width}, @code{:weight} and @code{:underline}
1847 to the corresponding values.
1848 @end defun
1850 @tindex face-attribute
1851 @defun face-attribute face attribute &optional frame inherit
1852 This returns the value of the @var{attribute} attribute of face
1853 @var{face} on @var{frame}.  If @var{frame} is @code{nil},
1854 that means the selected frame (@pxref{Input Focus}).
1856 If @var{frame} is @code{t}, the value is the default for
1857 @var{face} for new frames.
1859 If @var{inherit} is @code{nil}, only attributes directly defined by
1860 @var{face} are considered, so the return value may be
1861 @code{unspecified}, or a relative value.  If @var{inherit} is
1862 non-@code{nil}, @var{face}'s definition of @var{attribute} is merged
1863 with the faces specified by its @code{:inherit} attribute; however the
1864 return value may still be @code{unspecified} or relative.  If
1865 @var{inherit} is a face or a list of faces, then the result is further
1866 merged with that face (or faces), until it becomes specified and
1867 absolute.
1869 To ensure that the return value is always specified and absolute, use
1870 a value of @code{default} for @var{inherit}; this will resolve any
1871 unspecified or relative values by merging with the @code{default} face
1872 (which is always completely specified).
1874 For example,
1876 @example
1877 (face-attribute 'bold :weight)
1878      @result{} bold
1879 @end example
1880 @end defun
1882   The functions above did not exist before Emacs 21.  For compatibility
1883 with older Emacs versions, you can use the following functions to set
1884 and examine the face attributes which existed in those versions.
1886 @tindex face-attribute-relative-p
1887 @defun face-attribute-relative-p attribute value
1888 This function returns non-@code{nil} if @var{value}, when used as a
1889 the value of the face attribute @var{attribute}, is relative (that is,
1890 if it modifies an underlying or inherited value of @var{attribute}).
1891 @end defun
1893 @tindex merge-face-attribute
1894 @defun merge-face-attribute attribute value1 value2
1895 If @var{value1} is a relative value for the face attribute
1896 @var{attribute}, returns it merged with the underlying value
1897 @var{value2}; otherwise, if @var{value1} is an absolute value for the
1898 face attribute @var{attribute}, returns @var{value1} unchanged.
1899 @end defun
1901 @defun set-face-foreground face color &optional frame
1902 @defunx set-face-background face color &optional frame
1903 These functions set the foreground (or background, respectively) color
1904 of face @var{face} to @var{color}.  The argument @var{color} should be a
1905 string, the name of a color.
1907 Certain shades of gray are implemented by stipple patterns on
1908 black-and-white screens.
1909 @end defun
1911 @defun set-face-stipple face pattern &optional frame
1912 This function sets the background stipple pattern of face @var{face}
1913 to @var{pattern}.  The argument @var{pattern} should be the name of a
1914 stipple pattern defined by the X server, or actual bitmap data
1915 (@pxref{Face Attributes}), or @code{nil} meaning don't use stipple.
1917 Normally there is no need to pay attention to stipple patterns, because
1918 they are used automatically to handle certain shades of gray.
1919 @end defun
1921 @defun set-face-font face font &optional frame
1922 This function sets the font of face @var{face}.
1924 In Emacs 21, this actually sets the attributes @code{:family},
1925 @code{:width}, @code{:height}, @code{:weight}, and @code{:slant}
1926 according to the font name @var{font}.
1928 In Emacs 20, this sets the font attribute.  Once you set the font
1929 explicitly, the bold and italic attributes cease to have any effect,
1930 because the precise font that you specified is used.
1931 @end defun
1933 @defun set-face-bold-p face bold-p &optional frame
1934 This function specifies whether @var{face} should be bold.  If
1935 @var{bold-p} is non-@code{nil}, that means yes; @code{nil} means no.
1937 In Emacs 21, this sets the @code{:weight} attribute.
1938 In Emacs 20, it sets the @code{:bold} attribute.
1939 @end defun
1941 @defun set-face-italic-p face italic-p &optional frame
1942 This function specifies whether @var{face} should be italic.  If
1943 @var{italic-p} is non-@code{nil}, that means yes; @code{nil} means no.
1945 In Emacs 21, this sets the @code{:slant} attribute.
1946 In Emacs 20, it sets the @code{:italic} attribute.
1947 @end defun
1949 @defun set-face-underline-p face underline-p &optional frame
1950 This function sets the underline attribute of face @var{face}.
1951 Non-@code{nil} means do underline; @code{nil} means don't.
1952 @end defun
1954 @defun invert-face face &optional frame
1955 This function inverts the @code{:inverse-video} attribute of face
1956 @var{face}.  If the attribute is @code{nil}, this function sets it to
1957 @code{t}, and vice versa.
1958 @end defun
1960   These functions examine the attributes of a face.  If you don't
1961 specify @var{frame}, they refer to the default data for new frames.
1962 They return the symbol @code{unspecified} if the face doesn't define any
1963 value for that attribute.
1965 @defun face-foreground face &optional frame inherit
1966 @defunx face-background face &optional frame
1967 These functions return the foreground color (or background color,
1968 respectively) of face @var{face}, as a string.
1970 If @var{inherit} is nil, only a color directly defined by the face is
1971 returned.  If @var{inherit} is non-nil, any faces specified by its
1972 @code{:inherit} attribute are considered as well, and if @var{inherit}
1973 is a face or a list of faces, then they are also considered, until a
1974 specified color is found.  To ensure that the return value is always
1975 specified, use a value of @code{default} for @var{inherit}.
1976 @end defun
1978 @defun face-stipple face &optional frame inherit
1979 This function returns the name of the background stipple pattern of face
1980 @var{face}, or @code{nil} if it doesn't have one.
1982 If @var{inherit} is @code{nil}, only a stipple directly defined by the
1983 face is returned.  If @var{inherit} is non-@code{nil}, any faces
1984 specified by its @code{:inherit} attribute are considered as well, and
1985 if @var{inherit} is a face or a list of faces, then they are also
1986 considered, until a specified stipple is found.  To ensure that the
1987 return value is always specified, use a value of @code{default} for
1988 @var{inherit}.
1989 @end defun
1991 @defun face-font face &optional frame
1992 This function returns the name of the font of face @var{face}.
1993 @end defun
1995 @defun face-bold-p face &optional frame
1996 This function returns @code{t} if @var{face} is bold---that is, if it is
1997 bolder than normal.  It returns @code{nil} otherwise.
1998 @end defun
2000 @defun face-italic-p face &optional frame
2001 This function returns @code{t} if @var{face} is italic or oblique,
2002 @code{nil} otherwise.
2003 @end defun
2005 @defun face-underline-p face &optional frame
2006 This function returns the @code{:underline} attribute of face @var{face}.
2007 @end defun
2009 @defun face-inverse-video-p face &optional frame
2010 This function returns the @code{:inverse-video} attribute of face @var{face}.
2011 @end defun
2013 @node Merging Faces
2014 @subsection Merging Faces for Display
2016   Here are the ways to specify which faces to use for display of text:
2018 @itemize @bullet
2019 @item
2020 With defaults.  The @code{default} face is used as the ultimate
2021 default for all text.  (In Emacs 19 and 20, the @code{default}
2022 face is used only when no other face is specified.)
2024 For a mode line or header line, the face @code{modeline} or
2025 @code{header-line} is used just before @code{default}.
2027 @item
2028 With text properties.  A character can have a @code{face} property; if
2029 so, the faces and face attributes specified there apply.  @xref{Special
2030 Properties}.
2032 If the character has a @code{mouse-face} property, that is used instead
2033 of the @code{face} property when the mouse is ``near enough'' to the
2034 character.
2036 @item
2037 With overlays.  An overlay can have @code{face} and @code{mouse-face}
2038 properties too; they apply to all the text covered by the overlay.
2040 @item
2041 With a region that is active.  In Transient Mark mode, the region is
2042 highlighted with the face @code{region} (@pxref{Standard Faces}).
2044 @item
2045 With special glyphs.  Each glyph can specify a particular face
2046 number.  @xref{Glyphs}.
2047 @end itemize
2049   If these various sources together specify more than one face for a
2050 particular character, Emacs merges the attributes of the various faces
2051 specified.  The attributes of the faces of special glyphs come first;
2052 then comes the face for region highlighting, if appropriate;
2053 then come attributes of faces from overlays, followed by those from text
2054 properties, and last the default face.
2056   When multiple overlays cover one character, an overlay with higher
2057 priority overrides those with lower priority.  @xref{Overlays}.
2059   In Emacs 20, if an attribute such as the font or a color is not
2060 specified in any of the above ways, the frame's own font or color is
2061 used.  In newer Emacs versions, this cannot happen, because the
2062 @code{default} face specifies all attributes---in fact, the frame's own
2063 font and colors are synonymous with those of the default face.
2065 @node Font Selection
2066 @subsection Font Selection
2068   @dfn{Selecting a font} means mapping the specified face attributes for
2069 a character to a font that is available on a particular display.  The
2070 face attributes, as determined by face merging, specify most of the
2071 font choice, but not all.  Part of the choice depends on what character
2072 it is.
2074   For multibyte characters, typically each font covers only one
2075 character set.  So each character set (@pxref{Character Sets}) specifies
2076 a registry and encoding to use, with the character set's
2077 @code{x-charset-registry} property.  Its value is a string containing
2078 the registry and the encoding, with a dash between them:
2080 @example
2081 (plist-get (charset-plist 'latin-iso8859-1)
2082            'x-charset-registry)
2083      @result{} "ISO8859-1"
2084 @end example
2086   Unibyte text does not have character sets, so displaying a unibyte
2087 character takes the registry and encoding from the variable
2088 @code{face-default-registry}.
2090 @defvar face-default-registry
2091 This variable specifies which registry and encoding to use in choosing
2092 fonts for unibyte characters.  The value is initialized at Emacs startup
2093 time from the font the user specified for Emacs.
2094 @end defvar
2096   If the face specifies a fontset name, that fontset determines a
2097 pattern for fonts of the given charset.  If the face specifies a font
2098 family, a font pattern is constructed.
2100   Emacs tries to find an available font for the given face attributes
2101 and character's registry and encoding.  If there is a font that matches
2102 exactly, it is used, of course.  The hard case is when no available font
2103 exactly fits the specification.  Then Emacs looks for one that is
2104 ``close''---one attribute at a time.  You can specify the order to
2105 consider the attributes.  In the case where a specified font family is
2106 not available, you can specify a set of mappings for alternatives to
2107 try.
2109 @defvar face-font-selection-order
2110 @tindex face-font-selection-order
2111 This variable specifies the order of importance of the face attributes
2112 @code{:width}, @code{:height}, @code{:weight}, and @code{:slant}.  The
2113 value should be a list containing those four symbols, in order of
2114 decreasing importance.
2116 Font selection first finds the best available matches for the first
2117 attribute listed; then, among the fonts which are best in that way, it
2118 searches for the best matches in the second attribute, and so on.
2120 The attributes @code{:weight} and @code{:width} have symbolic values in
2121 a range centered around @code{normal}.  Matches that are more extreme
2122 (farther from @code{normal}) are somewhat preferred to matches that are
2123 less extreme (closer to @code{normal}); this is designed to ensure that
2124 non-normal faces contrast with normal ones, whenever possible.
2126 The default is @code{(:width :height :weight :slant)}, which means first
2127 find the fonts closest to the specified @code{:width}, then---among the
2128 fonts with that width---find a best match for the specified font height,
2129 and so on.
2131 One example of a case where this variable makes a difference is when the
2132 default font has no italic equivalent.  With the default ordering, the
2133 @code{italic} face will use a non-italic font that is similar to the
2134 default one.  But if you put @code{:slant} before @code{:height}, the
2135 @code{italic} face will use an italic font, even if its height is not
2136 quite right.
2137 @end defvar
2139 @defvar face-font-family-alternatives
2140 @tindex face-font-family-alternatives
2141 This variable lets you specify alternative font families to try, if a
2142 given family is specified and doesn't exist.  Each element should have
2143 this form:
2145 @example
2146 (@var{family} @var{alternate-families}@dots{})
2147 @end example
2149 If @var{family} is specified but not available, Emacs will try the other
2150 families given in @var{alternate-families}, one by one, until it finds a
2151 family that does exist.
2152 @end defvar
2154 @defvar face-font-registry-alternatives
2155 @tindex face-font-registry-alternatives
2156 This variable lets you specify alternative font registries to try, if a
2157 given registry is specified and doesn't exist.  Each element should have
2158 this form:
2160 @example
2161 (@var{registry} @var{alternate-registries}@dots{})
2162 @end example
2164 If @var{registry} is specified but not available, Emacs will try the
2165 other registries given in @var{alternate-registries}, one by one,
2166 until it finds a registry that does exist.
2167 @end defvar
2169   Emacs can make use of scalable fonts, but by default it does not use
2170 them, since the use of too many or too big scalable fonts can crash
2171 XFree86 servers.
2173 @defvar scalable-fonts-allowed
2174 @tindex scalable-fonts-allowed
2175 This variable controls which scalable fonts to use.  A value of
2176 @code{nil}, the default, means do not use scalable fonts.  @code{t}
2177 means to use any scalable font that seems appropriate for the text.
2179 Otherwise, the value must be a list of regular expressions.  Then a
2180 scalable font is enabled for use if its name matches any regular
2181 expression in the list.  For example,
2183 @example
2184 (setq scalable-fonts-allowed '("muleindian-2$"))
2185 @end example
2187 @noindent
2188 allows the use of scalable fonts with registry @code{muleindian-2}.
2189 @end defvar
2191 @defun clear-face-cache &optional unload-p
2192 @tindex clear-face-cache
2193 This function clears the face cache for all frames.
2194 If @var{unload-p} is non-@code{nil}, that means to unload
2195 all unused fonts as well.
2196 @end defun
2198 @defvar face-font-rescale-alist
2199 This variable specifies scaling for certain faces.  Its value should
2200 be a list of elements of the form
2202 @example
2203 (@var{fontname-regexp} . @var{scale-factor})
2204 @end example
2206 If @var{fontname-regexp} matches the font name that is about to be
2207 used, this says to choose a larger similar font according to the
2208 factor @var{scale-factor}.  You would use this feature to normalize
2209 the font size if certain fonts are bigger or smaller than their
2210 nominal heights and widths would suggest.
2211 @end defvar
2213 @node Face Functions
2214 @subsection Functions for Working with Faces
2216   Here are additional functions for creating and working with faces.
2218 @defun make-face name
2219 This function defines a new face named @var{name}, initially with all
2220 attributes @code{nil}.  It does nothing if there is already a face named
2221 @var{name}.
2222 @end defun
2224 @defun face-list
2225 This function returns a list of all defined face names.
2226 @end defun
2228 @defun copy-face old-face new-name &optional frame new-frame
2229 This function defines the face @var{new-name} as a copy of the existing
2230 face named @var{old-face}.  It creates the face @var{new-name} if that
2231 doesn't already exist.
2233 If the optional argument @var{frame} is given, this function applies
2234 only to that frame.  Otherwise it applies to each frame individually,
2235 copying attributes from @var{old-face} in each frame to @var{new-face}
2236 in the same frame.
2238 If the optional argument @var{new-frame} is given, then @code{copy-face}
2239 copies the attributes of @var{old-face} in @var{frame} to @var{new-name}
2240 in @var{new-frame}.
2241 @end defun
2243 @defun face-id face
2244 This function returns the face number of face @var{face}.
2245 @end defun
2247 @defun face-documentation face
2248 This function returns the documentation string of face @var{face}, or
2249 @code{nil} if none was specified for it.
2250 @end defun
2252 @defun face-equal face1 face2 &optional frame
2253 This returns @code{t} if the faces @var{face1} and @var{face2} have the
2254 same attributes for display.
2255 @end defun
2257 @defun face-differs-from-default-p face &optional frame
2258 This returns @code{t} if the face @var{face} displays differently from
2259 the default face.  A face is considered to be ``the same'' as the
2260 default face if each attribute is either the same as that of the default
2261 face, or unspecified (meaning to inherit from the default).
2262 @end defun
2264 @node Auto Faces
2265 @subsection Automatic Face Assignment
2266 @cindex automatic face assignment
2267 @cindex faces, automatic choice
2269 @cindex Font-Lock mode
2270   Starting with Emacs 21, a hook is available for automatically
2271 assigning faces to text in the buffer.  This hook is used for part of
2272 the implementation of Font-Lock mode.
2274 @tindex fontification-functions
2275 @defvar fontification-functions
2276 This variable holds a list of functions that are called by Emacs
2277 redisplay as needed to assign faces automatically to text in the buffer.
2279 The functions are called in the order listed, with one argument, a
2280 buffer position @var{pos}.  Each function should attempt to assign faces
2281 to the text in the current buffer starting at @var{pos}.
2283 Each function should record the faces they assign by setting the
2284 @code{face} property.  It should also add a non-@code{nil}
2285 @code{fontified} property for all the text it has assigned faces to.
2286 That property tells redisplay that faces have been assigned to that text
2287 already.
2289 It is probably a good idea for each function to do nothing if the
2290 character after @var{pos} already has a non-@code{nil} @code{fontified}
2291 property, but this is not required.  If one function overrides the
2292 assignments made by a previous one, the properties as they are
2293 after the last function finishes are the ones that really matter.
2295 For efficiency, we recommend writing these functions so that they
2296 usually assign faces to around 400 to 600 characters at each call.
2297 @end defvar
2299 @node Font Lookup
2300 @subsection Looking Up Fonts
2302 @defun x-list-fonts pattern &optional face frame maximum
2303 This function returns a list of available font names that match
2304 @var{pattern}.  If the optional arguments @var{face} and @var{frame} are
2305 specified, then the list is limited to fonts that are the same size as
2306 @var{face} currently is on @var{frame}.
2308 The argument @var{pattern} should be a string, perhaps with wildcard
2309 characters: the @samp{*} character matches any substring, and the
2310 @samp{?} character matches any single character.  Pattern matching
2311 of font names ignores case.
2313 If you specify @var{face} and @var{frame}, @var{face} should be a face name
2314 (a symbol) and @var{frame} should be a frame.
2316 The optional argument @var{maximum} sets a limit on how many fonts to
2317 return.  If this is non-@code{nil}, then the return value is truncated
2318 after the first @var{maximum} matching fonts.  Specifying a small value
2319 for @var{maximum} can make this function much faster, in cases where
2320 many fonts match the pattern.
2321 @end defun
2323   These additional functions are available starting in Emacs 21.
2325 @defun x-family-fonts &optional family frame
2326 @tindex x-family-fonts
2327 This function returns a list describing the available fonts for family
2328 @var{family} on @var{frame}.  If @var{family} is omitted or @code{nil},
2329 this list applies to all families, and therefore, it contains all
2330 available fonts.  Otherwise, @var{family} must be a string; it may
2331 contain the wildcards @samp{?} and @samp{*}.
2333 The list describes the display that @var{frame} is on; if @var{frame} is
2334 omitted or @code{nil}, it applies to the selected frame's display
2335 (@pxref{Input Focus}).
2337 The list contains a vector of the following form for each font:
2339 @example
2340 [@var{family} @var{width} @var{point-size} @var{weight} @var{slant}
2341  @var{fixed-p} @var{full} @var{registry-and-encoding}]
2342 @end example
2344 The first five elements correspond to face attributes; if you
2345 specify these attributes for a face, it will use this font.
2347 The last three elements give additional information about the font.
2348 @var{fixed-p} is non-@code{nil} if the font is fixed-pitch.
2349 @var{full} is the full name of the font, and
2350 @var{registry-and-encoding} is a string giving the registry and
2351 encoding of the font.
2353 The result list is sorted according to the current face font sort order.
2354 @end defun
2356 @defun x-font-family-list &optional frame
2357 @tindex x-font-family-list
2358 This function returns a list of the font families available for
2359 @var{frame}'s display.  If @var{frame} is omitted or @code{nil}, it
2360 describes the selected frame's display (@pxref{Input Focus}).
2362 The value is a list of elements of this form:
2364 @example
2365 (@var{family} . @var{fixed-p})
2366 @end example
2368 @noindent
2369 Here @var{family} is a font family, and @var{fixed-p} is
2370 non-@code{nil} if fonts of that family are fixed-pitch.
2371 @end defun
2373 @defvar font-list-limit
2374 @tindex font-list-limit
2375 This variable specifies maximum number of fonts to consider in font
2376 matching.  The function @code{x-family-fonts} will not return more than
2377 that many fonts, and font selection will consider only that many fonts
2378 when searching a matching font for face attributes.  The default is
2379 currently 100.
2380 @end defvar
2382 @node Fontsets
2383 @subsection Fontsets
2385   A @dfn{fontset} is a list of fonts, each assigned to a range of
2386 character codes.  An individual font cannot display the whole range of
2387 characters that Emacs supports, but a fontset can.  Fontsets have names,
2388 just as fonts do, and you can use a fontset name in place of a font name
2389 when you specify the ``font'' for a frame or a face.  Here is
2390 information about defining a fontset under Lisp program control.
2392 @defun create-fontset-from-fontset-spec fontset-spec &optional style-variant-p noerror
2393 This function defines a new fontset according to the specification
2394 string @var{fontset-spec}.  The string should have this format:
2396 @smallexample
2397 @var{fontpattern}, @r{[}@var{charsetname}:@var{fontname}@r{]@dots{}}
2398 @end smallexample
2400 @noindent
2401 Whitespace characters before and after the commas are ignored.
2403 The first part of the string, @var{fontpattern}, should have the form of
2404 a standard X font name, except that the last two fields should be
2405 @samp{fontset-@var{alias}}.
2407 The new fontset has two names, one long and one short.  The long name is
2408 @var{fontpattern} in its entirety.  The short name is
2409 @samp{fontset-@var{alias}}.  You can refer to the fontset by either
2410 name.  If a fontset with the same name already exists, an error is
2411 signaled, unless @var{noerror} is non-@code{nil}, in which case this
2412 function does nothing.
2414 If optional argument @var{style-variant-p} is non-@code{nil}, that says
2415 to create bold, italic and bold-italic variants of the fontset as well.
2416 These variant fontsets do not have a short name, only a long one, which
2417 is made by altering @var{fontpattern} to indicate the bold or italic
2418 status.
2420 The specification string also says which fonts to use in the fontset.
2421 See below for the details.
2422 @end defun
2424   The construct @samp{@var{charset}:@var{font}} specifies which font to
2425 use (in this fontset) for one particular character set.  Here,
2426 @var{charset} is the name of a character set, and @var{font} is the font
2427 to use for that character set.  You can use this construct any number of
2428 times in the specification string.
2430   For the remaining character sets, those that you don't specify
2431 explicitly, Emacs chooses a font based on @var{fontpattern}: it replaces
2432 @samp{fontset-@var{alias}} with a value that names one character set.
2433 For the @sc{ascii} character set, @samp{fontset-@var{alias}} is replaced
2434 with @samp{ISO8859-1}.
2436   In addition, when several consecutive fields are wildcards, Emacs
2437 collapses them into a single wildcard.  This is to prevent use of
2438 auto-scaled fonts.  Fonts made by scaling larger fonts are not usable
2439 for editing, and scaling a smaller font is not useful because it is
2440 better to use the smaller font in its own size, which Emacs does.
2442   Thus if @var{fontpattern} is this,
2444 @example
2445 -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24
2446 @end example
2448 @noindent
2449 the font specification for @sc{ascii} characters would be this:
2451 @example
2452 -*-fixed-medium-r-normal-*-24-*-ISO8859-1
2453 @end example
2455 @noindent
2456 and the font specification for Chinese GB2312 characters would be this:
2458 @example
2459 -*-fixed-medium-r-normal-*-24-*-gb2312*-*
2460 @end example
2462   You may not have any Chinese font matching the above font
2463 specification.  Most X distributions include only Chinese fonts that
2464 have @samp{song ti} or @samp{fangsong ti} in the @var{family} field.  In
2465 such a case, @samp{Fontset-@var{n}} can be specified as below:
2467 @smallexample
2468 Emacs.Fontset-0: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24,\
2469         chinese-gb2312:-*-*-medium-r-normal-*-24-*-gb2312*-*
2470 @end smallexample
2472 @noindent
2473 Then, the font specifications for all but Chinese GB2312 characters have
2474 @samp{fixed} in the @var{family} field, and the font specification for
2475 Chinese GB2312 characters has a wild card @samp{*} in the @var{family}
2476 field.
2478 @node Fringes
2479 @section Fringes
2480 @cindex Fringes
2482   The @dfn{fringes} of a window are thin vertical strips down the
2483 sides that are used for displaying bitmaps that indicate truncation,
2484 continuation, and horizontal scrolling, the overlay arrow.  The
2485 fringes normally appear between the display margins and the window
2486 text, but you can put them outside the display margins for a specific
2487 buffer by setting @code{fringes-outside-margins} buffer-locally to a
2488 non-@code{nil} value.
2490 @defvar fringes-outside-margins
2491 If the value is non-@code{nil}, the frames appear outside
2492 the display margins. 
2493 @end defvar
2495 @defvar left-fringe-width
2496 This variable, if non-@code{nil}, specifies the width of the left
2497 fringe in pixels.
2498 @end defvar
2500 @defvar right-fringe-width
2501 This variable, if non-@code{nil}, specifies the width of the right
2502 fringe in pixels.
2503 @end defvar
2505   The values of these variables take effect when you display the
2506 buffer in a window.  If you change them while the buffer is visible,
2507 you can call @code{set-buffer-window} to display it in a window again.
2509 @defun set-window-fringes window left &optional right outside-margins
2510 This function sets the fringe widthes of window @var{window}.
2511 If window is @code{nil}, that stands for the selected window.
2513 The argument @var{left} specifies the width in pixels of the left
2514 fringe, and likewise @var{right} for the right fringe.  A value of
2515 @code{nil} for either one stands for the default width.  If
2516 @var{outside-margins} is non-@code{nil}, that specifies that fringes
2517 should appear outside of the display margins.
2518 @end defun
2520 @defun window-fringes window
2521 This function returns information about the fringes of a window
2522 @var{window}.  The value has the form @code{(@var{left-width}
2523 @var{right-width} @var{frames-outside-margins})}.
2524 @end defun
2526 @node Display Property
2527 @section The @code{display} Property
2528 @cindex display specification
2529 @kindex display @r{(text property)}
2531   The @code{display} text property (or overlay property) is used to
2532 insert images into text, and also control other aspects of how text
2533 displays.  These features are available starting in Emacs 21.  The value
2534 of the @code{display} property should be a display specification, or a
2535 list or vector containing several display specifications.  The rest of
2536 this section describes several kinds of display specifications and what
2537 they mean.
2539 @menu
2540 * Specified Space::     Displaying one space with a specified width.
2541 * Other Display Specs:: Displaying an image; magnifying text; moving it
2542                           up or down on the page; adjusting the width
2543                           of spaces within text.
2544 * Display Margins::     Displaying text or images to the side of the main text.
2545 * Conditional Display:: Making any of the above features conditional
2546                           depending on some Lisp expression.
2547 @end menu
2549 @node Specified Space
2550 @subsection Specified Spaces
2551 @cindex spaces, specified height or width
2552 @cindex specified spaces
2553 @cindex variable-width spaces
2555   To display a space of specified width and/or height, use a display
2556 specification of the form @code{(space . @var{props})}, where
2557 @var{props} is a property list (a list of alternating properties and
2558 values).  You can put this property on one or more consecutive
2559 characters; a space of the specified height and width is displayed in
2560 place of @emph{all} of those characters.  These are the properties you
2561 can use in @var{props} to specify the weight of the space:
2563 @table @code
2564 @item :width @var{width}
2565 Specifies that the space width should be @var{width} times the normal
2566 character width.  @var{width} can be an integer or floating point
2567 number.
2569 @item :relative-width @var{factor}
2570 Specifies that the width of the stretch should be computed from the
2571 first character in the group of consecutive characters that have the
2572 same @code{display} property.  The space width is the width of that
2573 character, multiplied by @var{factor}.
2575 @item :align-to @var{hpos}
2576 Specifies that the space should be wide enough to reach @var{hpos}.  The
2577 value @var{hpos} is measured in units of the normal character width.  It
2578 may be an integer or a floating point number.
2579 @end table
2581   You should use one and only one of the above properties.  You can
2582 also specify the height of the space, with other properties:
2584 @table @code
2585 @item :height @var{height}
2586 Specifies the height of the space, as @var{height},
2587 measured in terms of the normal line height.
2589 @item :relative-height @var{factor}
2590 Specifies the height of the space, multiplying the ordinary height
2591 of the text having this display specification by @var{factor}.
2593 @item :ascent @var{ascent}
2594 Specifies that @var{ascent} percent of the height of the space should be
2595 considered as the ascent of the space---that is, the part above the
2596 baseline.  The value of @var{ascent} must be a non-negative number no
2597 greater than 100.
2598 @end table
2600   Don't use both @code{:height} and @code{:relative-height} together.
2602 @node Other Display Specs
2603 @subsection Other Display Specifications
2605 @table @code
2606 @item (image . @var{image-props})
2607 This is in fact an image descriptor (@pxref{Images}).  When used as a
2608 display specification, it means to display the image instead of the text
2609 that has the display specification.
2611 @item ((margin nil) @var{string})
2612 @itemx @var{string}
2613 A display specification of this form means to display @var{string}
2614 instead of the text that has the display specification, at the same
2615 position as that text.  This is a special case of marginal display
2616 (@pxref{Display Margins}).
2618 Recursive display specifications are not supported---string display
2619 specifications must not have @code{display} properties themselves.
2621 @item (space-width @var{factor})
2622 This display specification affects all the space characters within the
2623 text that has the specification.  It displays all of these spaces
2624 @var{factor} times as wide as normal.  The element @var{factor} should
2625 be an integer or float.  Characters other than spaces are not affected
2626 at all; in particular, this has no effect on tab characters.
2628 @item (height @var{height})
2629 This display specification makes the text taller or shorter.
2630 Here are the possibilities for @var{height}:
2632 @table @asis
2633 @item @code{(+ @var{n})}
2634 This means to use a font that is @var{n} steps larger.  A ``step'' is
2635 defined by the set of available fonts---specifically, those that match
2636 what was otherwise specified for this text, in all attributes except
2637 height.  Each size for which a suitable font is available counts as
2638 another step.  @var{n} should be an integer.
2640 @item @code{(- @var{n})}
2641 This means to use a font that is @var{n} steps smaller.
2643 @item a number, @var{factor}
2644 A number, @var{factor}, means to use a font that is @var{factor} times
2645 as tall as the default font.
2647 @item a symbol, @var{function}
2648 A symbol is a function to compute the height.  It is called with the
2649 current height as argument, and should return the new height to use.
2651 @item anything else, @var{form}
2652 If the @var{height} value doesn't fit the previous possibilities, it is
2653 a form.  Emacs evaluates it to get the new height, with the symbol
2654 @code{height} bound to the current specified font height.
2655 @end table
2657 @item (raise @var{factor})
2658 This kind of display specification raises or lowers the text
2659 it applies to, relative to the baseline of the line.
2661 @var{factor} must be a number, which is interpreted as a multiple of the
2662 height of the affected text.  If it is positive, that means to display
2663 the characters raised.  If it is negative, that means to display them
2664 lower down.
2666 If the text also has a @code{height} display specification, that does
2667 not affect the amount of raising or lowering, which is based on the
2668 faces used for the text.
2669 @end table
2671 @node Display Margins
2672 @subsection Displaying in the Margins
2673 @cindex display margins
2674 @cindex margins, display
2676   A buffer can have blank areas called @dfn{display margins} on the left
2677 and on the right.  Ordinary text never appears in these areas, but you
2678 can put things into the display margins using the @code{display}
2679 property.
2681   To put text in the left or right display margin of the window, use a
2682 display specification of the form @code{(margin right-margin)} or
2683 @code{(margin left-margin)} on it.  To put an image in a display margin,
2684 use that display specification along with the display specification for
2685 the image.  Unfortunately, there is currently no way to make
2686 text or images in the margin mouse-sensitive.
2688   If you put such a display specification directly on text in the
2689 buffer, the specified margin display appears @emph{instead of} that
2690 buffer text itself.  To put something in the margin @emph{in
2691 association with} certain buffer text without preventing or altering
2692 the display of that text, put a @code{before-string} property on the
2693 text and put the display specification on the contents of the
2694 before-string.
2696   Before the display margins can display anything, you must give
2697 them a nonzero width.  The usual way to do that is to set these
2698 variables:
2700 @defvar left-margin-width
2701 @tindex left-margin-width
2702 This variable specifies the width of the left margin.
2703 It is buffer-local in all buffers.
2704 @end defvar
2706 @defvar right-margin-width
2707 @tindex right-margin-width
2708 This variable specifies the width of the right margin.
2709 It is buffer-local in all buffers.
2710 @end defvar
2712   Setting these variables does not immediately affect the window.  These
2713 variables are checked when a new buffer is displayed in the window.
2714 Thus, you can make changes take effect by calling
2715 @code{set-window-buffer}.
2717   You can also set the margin widths immediately.
2719 @defun set-window-margins window left &optional right
2720 @tindex set-window-margins
2721 This function specifies the margin widths for window @var{window}.
2722 The argument @var{left} controls the left margin and
2723 @var{right} controls the right margin (default @code{0}).
2724 @end defun
2726 @defun window-margins &optional window
2727 @tindex window-margins
2728 This function returns the left and right margins of @var{window}
2729 as a cons cell of the form @code{(@var{left} . @var{right})}.
2730 If @var{window} is @code{nil}, the selected window is used.
2731 @end defun
2733 @node Conditional Display
2734 @subsection Conditional Display Specifications
2735 @cindex conditional display specifications
2737   You can make any display specification conditional.  To do that,
2738 package it in another list of the form @code{(when @var{condition} .
2739 @var{spec})}.  Then the specification @var{spec} applies only when
2740 @var{condition} evaluates to a non-@code{nil} value.  During the
2741 evaluation, @code{object} is bound to the string or buffer having the
2742 conditional @code{display} property.  @code{position} and
2743 @code{buffer-position} are bound to the position within @code{object}
2744 and the buffer position where the @code{display} property was found,
2745 respectively.  Both positions can be different when @code{object} is a
2746 string.
2748 @node Images
2749 @section Images
2750 @cindex images in buffers
2752   To display an image in an Emacs buffer, you must first create an image
2753 descriptor, then use it as a display specifier in the @code{display}
2754 property of text that is displayed (@pxref{Display Property}).  Like the
2755 @code{display} property, this feature is available starting in Emacs 21.
2757   Emacs can display a number of different image formats; some of them
2758 are supported only if particular support libraries are installed on your
2759 machine.  The supported image formats include XBM, XPM (needing the
2760 libraries @code{libXpm} version 3.4k and @code{libz}), GIF (needing
2761 @code{libungif} 4.1.0), Postscript, PBM, JPEG (needing the
2762 @code{libjpeg} library version v6a), TIFF (needing @code{libtiff} v3.4),
2763 and PNG (needing @code{libpng} 1.0.2).
2765   You specify one of these formats with an image type symbol.  The image
2766 type symbols are @code{xbm}, @code{xpm}, @code{gif}, @code{postscript},
2767 @code{pbm}, @code{jpeg}, @code{tiff}, and @code{png}.
2769 @defvar image-types
2770 This variable contains a list of those image type symbols that are
2771 supported in the current configuration.
2772 @end defvar
2774 @menu
2775 * Image Descriptors::   How to specify an image for use in @code{:display}.
2776 * XBM Images::          Special features for XBM format.
2777 * XPM Images::          Special features for XPM format.
2778 * GIF Images::          Special features for GIF format.
2779 * Postscript Images::   Special features for Postscript format.
2780 * Other Image Types::   Various other formats are supported.
2781 * Defining Images::     Convenient ways to define an image for later use.
2782 * Showing Images::      Convenient ways to display an image once it is defined.
2783 * Image Cache::         Internal mechanisms of image display.
2784 @end menu
2786 @node Image Descriptors
2787 @subsection Image Descriptors
2788 @cindex image descriptor
2790   An image description is a list of the form @code{(image
2791 . @var{props})}, where @var{props} is a property list containing
2792 alternating keyword symbols (symbols whose names start with a colon) and
2793 their values.  You can use any Lisp object as a property, but the only
2794 properties that have any special meaning are certain symbols, all of
2795 them keywords.
2797   Every image descriptor must contain the property @code{:type
2798 @var{type}} to specify the format of the image.  The value of @var{type}
2799 should be an image type symbol; for example, @code{xpm} for an image in
2800 XPM format.
2802   Here is a list of other properties that are meaningful for all image
2803 types:
2805 @table @code
2806 @item :file @var{file}
2807 The @code{:file} property specifies to load the image from file
2808 @var{file}.  If @var{file} is not an absolute file name, it is expanded
2809 in @code{data-directory}.
2811 @item :data @var{data}
2812 The @code{:data} property specifies the actual contents of the image.
2813 Each image must use either @code{:data} or @code{:file}, but not both.
2814 For most image types, the value of the @code{:data} property should be a
2815 string containing the image data; we recommend using a unibyte string.
2817 Before using @code{:data}, look for further information in the section
2818 below describing the specific image format.  For some image types,
2819 @code{:data} may not be supported; for some, it allows other data types;
2820 for some, @code{:data} alone is not enough, so you need to use other
2821 image properties along with @code{:data}.
2823 @item :margin @var{margin}
2824 The @code{:margin} property specifies how many pixels to add as an
2825 extra margin around the image.  The value, @var{margin}, must be a
2826 non-negative number, or a pair @code{(@var{x} . @var{y})} of such
2827 numbers.  If it is a pair, @var{x} specifies how many pixels to add
2828 horizontally, and @var{y} specifies how many pixels to add vertically.
2829 If @code{:margin} is not specified, the default is zero.
2831 @item :ascent @var{ascent}
2832 The @code{:ascent} property specifies the amount of the image's
2833 height to use for its ascent---that is, the part above the baseline.
2834 The value, @var{ascent}, must be a number in the range 0 to 100, or
2835 the symbol @code{center}.
2837 If @var{ascent} is a number, that percentage of the image's height is
2838 used for its ascent.
2840 If @var{ascent} is @code{center}, the image is vertically centered
2841 around a centerline which would be the vertical centerline of text drawn
2842 at the position of the image, in the manner specified by the text
2843 properties and overlays that apply to the image.
2845 If this property is omitted, it defaults to 50.
2847 @item :relief @var{relief}
2848 The @code{:relief} property, if non-@code{nil}, adds a shadow rectangle
2849 around the image.  The value, @var{relief}, specifies the width of the
2850 shadow lines, in pixels.  If @var{relief} is negative, shadows are drawn
2851 so that the image appears as a pressed button; otherwise, it appears as
2852 an unpressed button.
2854 @item :conversion @var{algorithm}
2855 The @code{:conversion} property, if non-@code{nil}, specifies a
2856 conversion algorithm that should be applied to the image before it is
2857 displayed; the value, @var{algorithm}, specifies which algorithm.
2859 @table @code
2860 @item laplace
2861 @itemx emboss
2862 Specifies the Laplace edge detection algorithm, which blurs out small
2863 differences in color while highlighting larger differences.  People
2864 sometimes consider this useful for displaying the image for a
2865 ``disabled'' button.
2867 @item (edge-detection :matrix @var{matrix} :color-adjust @var{adjust})
2868 Specifies a general edge-detection algorithm.  @var{matrix} must be
2869 either a nine-element list or a nine-element vector of numbers.  A pixel
2870 at position @math{x/y} in the transformed image is computed from
2871 original pixels around that position.  @var{matrix} specifies, for each
2872 pixel in the neighborhood of @math{x/y}, a factor with which that pixel
2873 will influence the transformed pixel; element @math{0} specifies the
2874 factor for the pixel at @math{x-1/y-1}, element @math{1} the factor for
2875 the pixel at @math{x/y-1} etc., as shown below:
2876 @iftex
2877 @tex
2878 $$\pmatrix{x-1/y-1 & x/y-1  & x+1/y-1 \cr
2879    x-1/y  &   x/y &    x+1/y \cr
2880    x-1/y+1&   x/y+1 &  x+1/y+1 \cr}$$
2881 @end tex
2882 @end iftex
2883 @ifnottex
2884 @display
2885   (x-1/y-1  x/y-1  x+1/y-1
2886    x-1/y    x/y    x+1/y
2887    x-1/y+1  x/y+1  x+1/y+1)
2888 @end display
2889 @end ifnottex
2891 The resulting pixel is computed from the color intensity of the color
2892 resulting from summing up the RGB values of surrounding pixels,
2893 multiplied by the specified factors, and dividing that sum by the sum
2894 of the factors' absolute values.
2896 Laplace edge-detection currently uses a matrix of
2897 @iftex
2898 @tex
2899 $$\pmatrix{1 & 0 & 0 \cr
2900    0&  0 &  0 \cr
2901    9 & 9 & -1 \cr}$$
2902 @end tex
2903 @end iftex
2904 @ifnottex
2905 @display
2906   (1  0  0
2907    0  0  0
2908    9  9 -1)
2909 @end display
2910 @end ifnottex
2912 Emboss edge-detection uses a matrix of
2913 @iftex
2914 @tex
2915 $$\pmatrix{ 2 & -1 &  0 \cr
2916    -1 &  0 &  1 \cr
2917     0  & 1 & -2 \cr}$$
2918 @end tex
2919 @end iftex
2920 @ifnottex
2921 @display
2922   ( 2 -1  0
2923    -1  0  1
2924     0  1 -2)
2925 @end display
2926 @end ifnottex
2928 @item disabled
2929 Specifies transforming the image so that it looks ``disabled''.
2930 @end table
2932 @item :mask @var{mask}
2933 If @var{mask} is @code{heuristic} or @code{(heuristic @var{bg})}, build
2934 a clipping mask for the image, so that the background of a frame is
2935 visible behind the image.  If @var{bg} is not specified, or if @var{bg}
2936 is @code{t}, determine the background color of the image by looking at
2937 the four corners of the image, assuming the most frequently occurring
2938 color from the corners is the background color of the image.  Otherwise,
2939 @var{bg} must be a list @code{(@var{red} @var{green} @var{blue})}
2940 specifying the color to assume for the background of the image.
2942 If @var{mask} is @code{nil}, remove a mask from the image, if it has
2943 one.  Images in some formats include a mask which can be removed by
2944 specifying @code{:mask nil}.
2945 @end table
2947 @defun image-mask-p spec &optional frame
2948 @tindex image-mask-p
2949 This function returns @code{t} if image @var{spec} has a mask bitmap.
2950 @var{frame} is the frame on which the image will be displayed.
2951 @var{frame} @code{nil} or omitted means to use the selected frame
2952 (@pxref{Input Focus}).
2953 @end defun
2955 @node XBM Images
2956 @subsection XBM Images
2957 @cindex XBM
2959   To use XBM format, specify @code{xbm} as the image type.  This image
2960 format doesn't require an external library, so images of this type are
2961 always supported.
2963   Additional image properties supported for the @code{xbm} image type are:
2965 @table @code
2966 @item :foreground @var{foreground}
2967 The value, @var{foreground}, should be a string specifying the image
2968 foreground color, or @code{nil} for the default color.  This color is
2969 used for each pixel in the XBM that is 1.  The default is the frame's
2970 foreground color.
2972 @item :background @var{background}
2973 The value, @var{background}, should be a string specifying the image
2974 background color, or @code{nil} for the default color.  This color is
2975 used for each pixel in the XBM that is 0.  The default is the frame's
2976 background color.
2977 @end table
2979   If you specify an XBM image using data within Emacs instead of an
2980 external file, use the following three properties:
2982 @table @code
2983 @item :data @var{data}
2984 The value, @var{data}, specifies the contents of the image.
2985 There are three formats you can use for @var{data}:
2987 @itemize @bullet
2988 @item
2989 A vector of strings or bool-vectors, each specifying one line of the
2990 image.  Do specify @code{:height} and @code{:width}.
2992 @item
2993 A string containing the same byte sequence as an XBM file would contain.
2994 You must not specify @code{:height} and @code{:width} in this case,
2995 because omitting them is what indicates the data has the format of an
2996 XBM file.  The file contents specify the height and width of the image.
2998 @item
2999 A string or a bool-vector containing the bits of the image (plus perhaps
3000 some extra bits at the end that will not be used).  It should contain at
3001 least @var{width} * @code{height} bits.  In this case, you must specify
3002 @code{:height} and @code{:width}, both to indicate that the string
3003 contains just the bits rather than a whole XBM file, and to specify the
3004 size of the image.
3005 @end itemize
3007 @item :width @var{width}
3008 The value, @var{width}, specifies the width of the image, in pixels.
3010 @item :height @var{height}
3011 The value, @var{height}, specifies the height of the image, in pixels.
3012 @end table
3014 @node XPM Images
3015 @subsection XPM Images
3016 @cindex XPM
3018   To use XPM format, specify @code{xpm} as the image type.  The
3019 additional image property @code{:color-symbols} is also meaningful with
3020 the @code{xpm} image type:
3022 @table @code
3023 @item :color-symbols @var{symbols}
3024 The value, @var{symbols}, should be an alist whose elements have the
3025 form @code{(@var{name} . @var{color})}.  In each element, @var{name} is
3026 the name of a color as it appears in the image file, and @var{color}
3027 specifies the actual color to use for displaying that name.
3028 @end table
3030 @node GIF Images
3031 @subsection GIF Images
3032 @cindex GIF
3034   For GIF images, specify image type @code{gif}.  Because of the patents
3035 in the US covering the LZW algorithm, the continued use of GIF format is
3036 a problem for the whole Internet; to end this problem, it is a good idea
3037 for everyone, even outside the US, to stop using GIFS right away
3038 (@uref{http://www.burnallgifs.org/}).  But if you still want to use
3039 them, Emacs can display them.
3041 @table @code
3042 @item :index @var{index}
3043 You can use @code{:index} to specify one image from a GIF file that
3044 contains more than one image.  This property specifies use of image
3045 number @var{index} from the file.  An error is signaled if the GIF file
3046 doesn't contain an image with index @var{index}.
3047 @end table
3049 @ignore
3050 This could be used to implement limited support for animated GIFs.
3051 For example, the following function displays a multi-image GIF file
3052 at point-min in the current buffer, switching between sub-images
3053 every 0.1 seconds.
3055 (defun show-anim (file max)
3056   "Display multi-image GIF file FILE which contains MAX subimages."
3057   (display-anim (current-buffer) file 0 max t))
3059 (defun display-anim (buffer file idx max first-time)
3060   (when (= idx max)
3061     (setq idx 0))
3062   (let ((img (create-image file nil :image idx)))
3063     (save-excursion
3064       (set-buffer buffer)
3065       (goto-char (point-min))
3066       (unless first-time (delete-char 1))
3067       (insert-image img))
3068     (run-with-timer 0.1 nil 'display-anim buffer file (1+ idx) max nil)))
3069 @end ignore
3071 @node Postscript Images
3072 @subsection Postscript Images
3073 @cindex Postscript images
3075   To use Postscript for an image, specify image type @code{postscript}.
3076 This works only if you have Ghostscript installed.  You must always use
3077 these three properties:
3079 @table @code
3080 @item :pt-width @var{width}
3081 The value, @var{width}, specifies the width of the image measured in
3082 points (1/72 inch).  @var{width} must be an integer.
3084 @item :pt-height @var{height}
3085 The value, @var{height}, specifies the height of the image in points
3086 (1/72 inch).  @var{height} must be an integer.
3088 @item :bounding-box @var{box}
3089 The value, @var{box}, must be a list or vector of four integers, which
3090 specifying the bounding box of the Postscript image, analogous to the
3091 @samp{BoundingBox} comment found in Postscript files.
3093 @example
3094 %%BoundingBox: 22 171 567 738
3095 @end example
3096 @end table
3098   Displaying Postscript images from Lisp data is not currently
3099 implemented, but it may be implemented by the time you read this.
3100 See the @file{etc/NEWS} file to make sure.
3102 @node Other Image Types
3103 @subsection Other Image Types
3104 @cindex PBM
3106   For PBM images, specify image type @code{pbm}.  Color, gray-scale and
3107 monochromatic images are supported.   For mono PBM images, two additional
3108 image properties are supported.
3110 @table @code
3111 @item :foreground @var{foreground}
3112 The value, @var{foreground}, should be a string specifying the image
3113 foreground color, or @code{nil} for the default color.  This color is
3114 used for each pixel in the XBM that is 1.  The default is the frame's
3115 foreground color.
3117 @item :background @var{background}
3118 The value, @var{background}, should be a string specifying the image
3119 background color, or @code{nil} for the default color.  This color is
3120 used for each pixel in the XBM that is 0.  The default is the frame's
3121 background color.
3122 @end table
3124   For JPEG images, specify image type @code{jpeg}.
3126   For TIFF images, specify image type @code{tiff}.
3128   For PNG images, specify image type @code{png}.
3130 @node Defining Images
3131 @subsection Defining Images
3133   The functions @code{create-image}, @code{defimage} and
3134 @code{find-image} provide convenient ways to create image descriptors.
3136 @defun create-image file &optional type &rest props
3137 @tindex create-image
3138 This function creates and returns an image descriptor which uses the
3139 data in @var{file}.
3141 The optional argument @var{type} is a symbol specifying the image type.
3142 If @var{type} is omitted or @code{nil}, @code{create-image} tries to
3143 determine the image type from the file's first few bytes, or else
3144 from the file's name.
3146 The remaining arguments, @var{props}, specify additional image
3147 properties---for example,
3149 @example
3150 (create-image "foo.xpm" 'xpm :heuristic-mask t)
3151 @end example
3153 The function returns @code{nil} if images of this type are not
3154 supported.  Otherwise it returns an image descriptor.
3155 @end defun
3157 @defmac defimage symbol specs &optional doc
3158 @tindex defimage
3159 This macro defines @var{symbol} as an image name.  The arguments
3160 @var{specs} is a list which specifies how to display the image.
3161 The third argument, @var{doc}, is an optional documentation string.
3163 Each argument in @var{specs} has the form of a property list, and each
3164 one should specify at least the @code{:type} property and either the
3165 @code{:file} or the @code{:data} property.  The value of @code{:type}
3166 should be a symbol specifying the image type, the value of
3167 @code{:file} is the file to load the image from, and the value of
3168 @code{:data} is a string containing the actual image data.  Here is an
3169 example:
3171 @example
3172 (defimage test-image
3173   ((:type xpm :file "~/test1.xpm")
3174    (:type xbm :file "~/test1.xbm")))
3175 @end example
3177 @code{defimage} tests each argument, one by one, to see if it is
3178 usable---that is, if the type is supported and the file exists.  The
3179 first usable argument is used to make an image descriptor which is
3180 stored in @var{symbol}.
3182 If none of the alternatives will work, then @var{symbol} is defined
3183 as @code{nil}.
3184 @end defmac
3186 @defun find-image specs
3187 @tindex find-image
3188 This function provides a convenient way to find an image satisfying one
3189 of a list of image specifications @var{specs}.
3191 Each specification in @var{specs} is a property list with contents
3192 depending on image type.  All specifications must at least contain the
3193 properties @code{:type @var{type}} and either @w{@code{:file @var{file}}}
3194 or @w{@code{:data @var{DATA}}}, where @var{type} is a symbol specifying
3195 the image type, e.g.@: @code{xbm}, @var{file} is the file to load the
3196 image from, and @var{data} is a string containing the actual image data.
3197 The first specification in the list whose @var{type} is supported, and
3198 @var{file} exists, is used to construct the image specification to be
3199 returned.  If no specification is satisfied, @code{nil} is returned.
3201 The image is looked for first on @code{load-path} and then in
3202 @code{data-directory}.
3203 @end defun
3205 @node Showing Images
3206 @subsection Showing Images
3208   You can use an image descriptor by setting up the @code{display}
3209 property yourself, but it is easier to use the functions in this
3210 section.
3212 @defun insert-image image &optional string area
3213 This function inserts @var{image} in the current buffer at point.  The
3214 value @var{image} should be an image descriptor; it could be a value
3215 returned by @code{create-image}, or the value of a symbol defined with
3216 @code{defimage}.  The argument @var{string} specifies the text to put in
3217 the buffer to hold the image.
3219 The argument @var{area} specifies whether to put the image in a margin.
3220 If it is @code{left-margin}, the image appears in the left margin;
3221 @code{right-margin} specifies the right margin.  If @var{area} is
3222 @code{nil} or omitted, the image is displayed at point within the
3223 buffer's text.
3225 Internally, this function inserts @var{string} in the buffer, and gives
3226 it a @code{display} property which specifies @var{image}.  @xref{Display
3227 Property}.
3228 @end defun
3230 @defun put-image image pos &optional string area
3231 This function puts image @var{image} in front of @var{pos} in the
3232 current buffer.  The argument @var{pos} should be an integer or a
3233 marker.  It specifies the buffer position where the image should appear.
3234 The argument @var{string} specifies the text that should hold the image
3235 as an alternative to the default.
3237 The argument @var{image} must be an image descriptor, perhaps returned
3238 by @code{create-image} or stored by @code{defimage}.
3240 The argument @var{area} specifies whether to put the image in a margin.
3241 If it is @code{left-margin}, the image appears in the left margin;
3242 @code{right-margin} specifies the right margin.  If @var{area} is
3243 @code{nil} or omitted, the image is displayed at point within the
3244 buffer's text.
3246 Internally, this function creates an overlay, and gives it a
3247 @code{before-string} property containing text that has a @code{display}
3248 property whose value is the image.  (Whew!)
3249 @end defun
3251 @defun remove-images start end &optional buffer
3252 This function removes images in @var{buffer} between positions
3253 @var{start} and @var{end}.  If @var{buffer} is omitted or @code{nil},
3254 images are removed from the current buffer.
3256 This removes only images that were put into @var{buffer} the way
3257 @code{put-image} does it, not images that were inserted with
3258 @code{insert-image} or in other ways.
3259 @end defun
3261 @defun image-size spec &optional pixels frame
3262 @tindex image-size
3263 This function returns the size of an image as a pair
3264 @w{@code{(@var{width} . @var{height})}}.  @var{spec} is an image
3265 specification.  @var{pixels} non-@code{nil} means return sizes
3266 measured in pixels, otherwise return sizes measured in canonical
3267 character units (fractions of the width/height of the frame's default
3268 font).  @var{frame} is the frame on which the image will be displayed.
3269 @var{frame} null or omitted means use the selected frame (@pxref{Input
3270 Focus}).
3271 @end defun
3273 @node Image Cache
3274 @subsection Image Cache
3276   Emacs stores images in an image cache when it displays them, so it can
3277 display them again more efficiently.  It removes an image from the cache
3278 when it hasn't been displayed for a specified period of time.
3280 When an image is looked up in the cache, its specification is compared
3281 with cached image specifications using @code{equal}.  This means that
3282 all images with equal specifications share the same image in the cache.
3284 @defvar image-cache-eviction-delay
3285 @tindex image-cache-eviction-delay
3286 This variable specifies the number of seconds an image can remain in the
3287 cache without being displayed.  When an image is not displayed for this
3288 length of time, Emacs removes it from the image cache.
3290 If the value is @code{nil}, Emacs does not remove images from the cache
3291 except when you explicitly clear it.  This mode can be useful for
3292 debugging.
3293 @end defvar
3295 @defun clear-image-cache &optional frame
3296 @tindex clear-image-cache
3297 This function clears the image cache.  If @var{frame} is non-@code{nil},
3298 only the cache for that frame is cleared.  Otherwise all frames' caches
3299 are cleared.
3300 @end defun
3302 @node Blinking
3303 @section Blinking Parentheses
3304 @cindex parenthesis matching
3305 @cindex blinking
3306 @cindex balancing parentheses
3307 @cindex close parenthesis
3309   This section describes the mechanism by which Emacs shows a matching
3310 open parenthesis when the user inserts a close parenthesis.
3312 @defvar blink-paren-function
3313 The value of this variable should be a function (of no arguments) to
3314 be called whenever a character with close parenthesis syntax is inserted.
3315 The value of @code{blink-paren-function} may be @code{nil}, in which
3316 case nothing is done.
3317 @end defvar
3319 @defopt blink-matching-paren
3320 If this variable is @code{nil}, then @code{blink-matching-open} does
3321 nothing.
3322 @end defopt
3324 @defopt blink-matching-paren-distance
3325 This variable specifies the maximum distance to scan for a matching
3326 parenthesis before giving up.
3327 @end defopt
3329 @defopt blink-matching-delay
3330 This variable specifies the number of seconds for the cursor to remain
3331 at the matching parenthesis.  A fraction of a second often gives
3332 good results, but the default is 1, which works on all systems.
3333 @end defopt
3335 @deffn Command blink-matching-open
3336 This function is the default value of @code{blink-paren-function}.  It
3337 assumes that point follows a character with close parenthesis syntax and
3338 moves the cursor momentarily to the matching opening character.  If that
3339 character is not already on the screen, it displays the character's
3340 context in the echo area.  To avoid long delays, this function does not
3341 search farther than @code{blink-matching-paren-distance} characters.
3343 Here is an example of calling this function explicitly.
3345 @smallexample
3346 @group
3347 (defun interactive-blink-matching-open ()
3348 @c Do not break this line! -- rms.
3349 @c The first line of a doc string
3350 @c must stand alone.
3351   "Indicate momentarily the start of sexp before point."
3352   (interactive)
3353 @end group
3354 @group
3355   (let ((blink-matching-paren-distance
3356          (buffer-size))
3357         (blink-matching-paren t))
3358     (blink-matching-open)))
3359 @end group
3360 @end smallexample
3361 @end deffn
3363 @node Inverse Video
3364 @section Inverse Video
3365 @cindex Inverse Video
3367 @defopt inverse-video
3368 @cindex highlighting
3369 This variable controls whether Emacs uses inverse video for all text
3370 on the screen.  Non-@code{nil} means yes, @code{nil} means no.  The
3371 default is @code{nil}.
3372 @end defopt
3374 @defopt mode-line-inverse-video
3375 This variable controls the use of inverse video for mode lines and menu
3376 bars.  If it is non-@code{nil}, then these lines are displayed in
3377 inverse video.  Otherwise, these lines are displayed normally, just like
3378 other text.  The default is @code{t}.
3380 For window frames, this feature actually applies the face named
3381 @code{mode-line}; that face is normally set up as the inverse of the
3382 default face, unless you change it.
3383 @end defopt
3385 @node Usual Display
3386 @section Usual Display Conventions
3388   The usual display conventions define how to display each character
3389 code.  You can override these conventions by setting up a display table
3390 (@pxref{Display Tables}).  Here are the usual display conventions:
3392 @itemize @bullet
3393 @item
3394 Character codes 32 through 126 map to glyph codes 32 through 126.
3395 Normally this means they display as themselves.
3397 @item
3398 Character code 9 is a horizontal tab.  It displays as whitespace
3399 up to a position determined by @code{tab-width}.
3401 @item
3402 Character code 10 is a newline.
3404 @item
3405 All other codes in the range 0 through 31, and code 127, display in one
3406 of two ways according to the value of @code{ctl-arrow}.  If it is
3407 non-@code{nil}, these codes map to sequences of two glyphs, where the
3408 first glyph is the @sc{ascii} code for @samp{^}.  (A display table can
3409 specify a glyph to use instead of @samp{^}.)  Otherwise, these codes map
3410 just like the codes in the range 128 to 255.
3412 On MS-DOS terminals, Emacs arranges by default for the character code
3413 127 to be mapped to the glyph code 127, which normally displays as an
3414 empty polygon.  This glyph is used to display non-@sc{ascii} characters
3415 that the MS-DOS terminal doesn't support.  @xref{MS-DOS and MULE,,,
3416 emacs, The GNU Emacs Manual}.
3418 @item
3419 Character codes 128 through 255 map to sequences of four glyphs, where
3420 the first glyph is the @sc{ascii} code for @samp{\}, and the others are
3421 digit characters representing the character code in octal.  (A display
3422 table can specify a glyph to use instead of @samp{\}.)
3424 @item
3425 Multibyte character codes above 256 are displayed as themselves, or as a
3426 question mark or empty box if the terminal cannot display that
3427 character.
3428 @end itemize
3430   The usual display conventions apply even when there is a display
3431 table, for any character whose entry in the active display table is
3432 @code{nil}.  Thus, when you set up a display table, you need only
3433 specify the characters for which you want special behavior.
3435   These display rules apply to carriage return (character code 13), when
3436 it appears in the buffer.  But that character may not appear in the
3437 buffer where you expect it, if it was eliminated as part of end-of-line
3438 conversion (@pxref{Coding System Basics}).
3440   These variables affect the way certain characters are displayed on the
3441 screen.  Since they change the number of columns the characters occupy,
3442 they also affect the indentation functions.  These variables also affect
3443 how the mode line is displayed; if you want to force redisplay of the
3444 mode line using the new values, call the function
3445 @code{force-mode-line-update} (@pxref{Mode Line Format}).
3447 @defopt ctl-arrow
3448 @cindex control characters in display
3449 This buffer-local variable controls how control characters are
3450 displayed.  If it is non-@code{nil}, they are displayed as a caret
3451 followed by the character: @samp{^A}.  If it is @code{nil}, they are
3452 displayed as a backslash followed by three octal digits: @samp{\001}.
3453 @end defopt
3455 @c Following may have overfull hbox.
3456 @defvar default-ctl-arrow
3457 The value of this variable is the default value for @code{ctl-arrow} in
3458 buffers that do not override it.  @xref{Default Value}.
3459 @end defvar
3461 @defopt indicate-empty-lines
3462 @tindex indicate-empty-lines
3463 @cindex fringes, and empty line indication
3464 When this is non-@code{nil}, Emacs displays a special glyph in the
3465 fringe of each empty line at the end of the buffer, on terminals that
3466 support it (window systems).  @xref{Fringes}.
3467 @end defopt
3469 @defopt tab-width
3470 The value of this variable is the spacing between tab stops used for
3471 displaying tab characters in Emacs buffers.  The value is in units of
3472 columns, and the default is 8.  Note that this feature is completely
3473 independent of the user-settable tab stops used by the command
3474 @code{tab-to-tab-stop}.  @xref{Indent Tabs}.
3475 @end defopt
3477 @node Display Tables
3478 @section Display Tables
3480 @cindex display table
3481 You can use the @dfn{display table} feature to control how all possible
3482 character codes display on the screen.  This is useful for displaying
3483 European languages that have letters not in the @sc{ascii} character
3484 set.
3486 The display table maps each character code into a sequence of
3487 @dfn{glyphs}, each glyph being a graphic that takes up one character
3488 position on the screen.  You can also define how to display each glyph
3489 on your terminal, using the @dfn{glyph table}.
3491 Display tables affect how the mode line is displayed; if you want to
3492 force redisplay of the mode line using a new display table, call
3493 @code{force-mode-line-update} (@pxref{Mode Line Format}).
3495 @menu
3496 * Display Table Format::        What a display table consists of.
3497 * Active Display Table::        How Emacs selects a display table to use.
3498 * Glyphs::                      How to define a glyph, and what glyphs mean.
3499 @end menu
3501 @node Display Table Format
3502 @subsection Display Table Format
3504   A display table is actually a char-table (@pxref{Char-Tables}) with
3505 @code{display-table} as its subtype.
3507 @defun make-display-table
3508 This creates and returns a display table.  The table initially has
3509 @code{nil} in all elements.
3510 @end defun
3512   The ordinary elements of the display table are indexed by character
3513 codes; the element at index @var{c} says how to display the character
3514 code @var{c}.  The value should be @code{nil} or a vector of glyph
3515 values (@pxref{Glyphs}).  If an element is @code{nil}, it says to
3516 display that character according to the usual display conventions
3517 (@pxref{Usual Display}).
3519   If you use the display table to change the display of newline
3520 characters, the whole buffer will be displayed as one long ``line.''
3522   The display table also has six ``extra slots'' which serve special
3523 purposes.  Here is a table of their meanings; @code{nil} in any slot
3524 means to use the default for that slot, as stated below.
3526 @table @asis
3527 @item 0
3528 The glyph for the end of a truncated screen line (the default for this
3529 is @samp{$}).  @xref{Glyphs}.  Newer Emacs versions, on some platforms,
3530 display arrows to indicate truncation---the display table has no effect
3531 in these situations.
3532 @item 1
3533 The glyph for the end of a continued line (the default is @samp{\}).
3534 Newer Emacs versions, on some platforms, display curved arrows to
3535 indicate truncation---the display table has no effect in these
3536 situations.
3537 @item 2
3538 The glyph for indicating a character displayed as an octal character
3539 code (the default is @samp{\}).
3540 @item 3
3541 The glyph for indicating a control character (the default is @samp{^}).
3542 @item 4
3543 A vector of glyphs for indicating the presence of invisible lines (the
3544 default is @samp{...}).  @xref{Selective Display}.
3545 @item 5
3546 The glyph used to draw the border between side-by-side windows (the
3547 default is @samp{|}).  @xref{Splitting Windows}.  This takes effect only
3548 when there are no scroll bars; if scroll bars are supported and in use,
3549 a scroll bar separates the two windows.
3550 @end table
3552   For example, here is how to construct a display table that mimics the
3553 effect of setting @code{ctl-arrow} to a non-@code{nil} value:
3555 @example
3556 (setq disptab (make-display-table))
3557 (let ((i 0))
3558   (while (< i 32)
3559     (or (= i ?\t) (= i ?\n)
3560         (aset disptab i (vector ?^ (+ i 64))))
3561     (setq i (1+ i)))
3562   (aset disptab 127 (vector ?^ ??)))
3563 @end example
3565 @defun display-table-slot display-table slot
3566 This function returns the value of the extra slot @var{slot} of
3567 @var{display-table}.  The argument @var{slot} may be a number from 0 to
3568 5 inclusive, or a slot name (symbol).  Valid symbols are
3569 @code{truncation}, @code{wrap}, @code{escape}, @code{control},
3570 @code{selective-display}, and @code{vertical-border}.
3571 @end defun
3573 @defun set-display-table-slot display-table slot value
3574 This function stores @var{value} in the extra slot @var{slot} of
3575 @var{display-table}.  The argument @var{slot} may be a number from 0 to
3576 5 inclusive, or a slot name (symbol).  Valid symbols are
3577 @code{truncation}, @code{wrap}, @code{escape}, @code{control},
3578 @code{selective-display}, and @code{vertical-border}.
3579 @end defun
3581 @defun describe-display-table display-table
3582 @tindex describe-display-table
3583 This function displays a description of the display table
3584 @var{display-table} in a help buffer.
3585 @end defun
3587 @deffn Command describe-current-display-table
3588 @tindex describe-current-display-table
3589 This command displays a description of the current display table in a
3590 help buffer.
3591 @end deffn
3593 @node Active Display Table
3594 @subsection Active Display Table
3595 @cindex active display table
3597   Each window can specify a display table, and so can each buffer.  When
3598 a buffer @var{b} is displayed in window @var{w}, display uses the
3599 display table for window @var{w} if it has one; otherwise, the display
3600 table for buffer @var{b} if it has one; otherwise, the standard display
3601 table if any.  The display table chosen is called the @dfn{active}
3602 display table.
3604 @defun window-display-table window
3605 This function returns @var{window}'s display table, or @code{nil}
3606 if @var{window} does not have an assigned display table.
3607 @end defun
3609 @defun set-window-display-table window table
3610 This function sets the display table of @var{window} to @var{table}.
3611 The argument @var{table} should be either a display table or
3612 @code{nil}.
3613 @end defun
3615 @defvar buffer-display-table
3616 This variable is automatically buffer-local in all buffers; its value in
3617 a particular buffer specifies the display table for that buffer.  If it
3618 is @code{nil}, that means the buffer does not have an assigned display
3619 table.
3620 @end defvar
3622 @defvar standard-display-table
3623 This variable's value is the default display table, used whenever a
3624 window has no display table and neither does the buffer displayed in
3625 that window.  This variable is @code{nil} by default.
3626 @end defvar
3628   If there is no display table to use for a particular window---that is,
3629 if the window specifies none, its buffer specifies none, and
3630 @code{standard-display-table} is @code{nil}---then Emacs uses the usual
3631 display conventions for all character codes in that window.  @xref{Usual
3632 Display}.
3634 A number of functions for changing the standard display table
3635 are defined in the library @file{disp-table}.
3637 @node Glyphs
3638 @subsection Glyphs
3640 @cindex glyph
3641   A @dfn{glyph} is a generalization of a character; it stands for an
3642 image that takes up a single character position on the screen.  Glyphs
3643 are represented in Lisp as integers, just as characters are.  Normally
3644 Emacs finds glyphs in the display table (@pxref{Display Tables}).
3646   A glyph can be @dfn{simple} or it can be defined by the @dfn{glyph
3647 table}.  A simple glyph is just a way of specifying a character and a
3648 face to output it in.  The glyph code for a simple glyph, mod 524288,
3649 is the character to output, and the glyph code divided by 524288
3650 specifies the face number (@pxref{Face Functions}) to use while
3651 outputting it.  (524288 is
3652 @ifnottex
3653 2**19.)
3654 @end ifnottex
3655 @tex
3656 $2^{19}$.)
3657 @end tex
3658 @xref{Faces}.
3660   On character terminals, you can set up a @dfn{glyph table} to define
3661 the meaning of glyph codes.  The glyph codes is the value of the
3662 variable @code{glyph-table}.
3664 @defvar glyph-table
3665 The value of this variable is the current glyph table.  It should be a
3666 vector; the @var{g}th element defines glyph code @var{g}.
3668 If a glyph code is greater than or equal to the length of the glyph
3669 table, that code is automatically simple.  If the value of
3670 @code{glyph-table} is @code{nil} instead of a vector, then all glyphs
3671 are simple.  The glyph table is not used on graphical displays, only
3672 on character terminals.  On graphical displays, all glyphs are simple.
3673 @end defvar
3675   Here are the possible types of elements in the glyph table:
3677 @table @asis
3678 @item @var{string}
3679 Send the characters in @var{string} to the terminal to output
3680 this glyph.  This alternative is available on character terminals,
3681 but not under a window system.
3683 @item @var{integer}
3684 Define this glyph code as an alias for glyph code @var{integer}.  You
3685 can use an alias to specify a face code for the glyph and use a small
3686 number as its code.
3688 @item @code{nil}
3689 This glyph is simple.
3690 @end table
3692 @defun create-glyph string
3693 @tindex create-glyph
3694 This function returns a newly-allocated glyph code which is set up to
3695 display by sending @var{string} to the terminal.
3696 @end defun
3698 @node Beeping
3699 @section Beeping
3700 @cindex beeping
3701 @cindex bell
3703   This section describes how to make Emacs ring the bell (or blink the
3704 screen) to attract the user's attention.  Be conservative about how
3705 often you do this; frequent bells can become irritating.  Also be
3706 careful not to use just beeping when signaling an error is more
3707 appropriate.  (@xref{Errors}.)
3709 @defun ding &optional do-not-terminate
3710 @cindex keyboard macro termination
3711 This function beeps, or flashes the screen (see @code{visible-bell} below).
3712 It also terminates any keyboard macro currently executing unless
3713 @var{do-not-terminate} is non-@code{nil}.
3714 @end defun
3716 @defun beep &optional do-not-terminate
3717 This is a synonym for @code{ding}.
3718 @end defun
3720 @defopt visible-bell
3721 This variable determines whether Emacs should flash the screen to
3722 represent a bell.  Non-@code{nil} means yes, @code{nil} means no.  This
3723 is effective on a window system, and on a character-only terminal
3724 provided the terminal's Termcap entry defines the visible bell
3725 capability (@samp{vb}).
3726 @end defopt
3728 @defvar ring-bell-function
3729 If this is non-@code{nil}, it specifies how Emacs should ``ring the
3730 bell.''  Its value should be a function of no arguments.  If this is
3731 non-@code{nil}, it takes precedence over the @code{visible-bell}
3732 variable.
3733 @end defvar
3735 @node Window Systems
3736 @section Window Systems
3738   Emacs works with several window systems, most notably the X Window
3739 System.  Both Emacs and X use the term ``window'', but use it
3740 differently.  An Emacs frame is a single window as far as X is
3741 concerned; the individual Emacs windows are not known to X at all.
3743 @defvar window-system
3744 This variable tells Lisp programs what window system Emacs is running
3745 under.  The possible values are
3747 @table @code
3748 @item x
3749 @cindex X Window System
3750 Emacs is displaying using X.
3751 @item pc
3752 Emacs is displaying using MS-DOS.
3753 @item w32
3754 Emacs is displaying using Windows.
3755 @item mac
3756 Emacs is displaying using a Macintosh.
3757 @item nil
3758 Emacs is using a character-based terminal.
3759 @end table
3760 @end defvar
3762 @defvar window-setup-hook
3763 This variable is a normal hook which Emacs runs after handling the
3764 initialization files.  Emacs runs this hook after it has completed
3765 loading your init file, the default initialization file (if
3766 any), and the terminal-specific Lisp code, and running the hook
3767 @code{term-setup-hook}.
3769 This hook is used for internal purposes: setting up communication with
3770 the window system, and creating the initial window.  Users should not
3771 interfere with it.
3772 @end defvar