* simple.el (backward-delete-char-untabify):
[bpt/emacs.git] / lispref / display.texi
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 Free Software Foundation, Inc.
4 @c See the file elisp.texi for copying conditions.
5 @setfilename ../info/display
6 @node Display, Calendar, Processes, Top
7 @chapter Emacs Display
8
9 This chapter describes a number of features related to the display
10 that Emacs presents to the user.
11
12 @menu
13 * Refresh Screen:: Clearing the screen and redrawing everything on it.
14 * Forcing Redisplay:: Forcing redisplay.
15 * Truncation:: Folding or wrapping long text lines.
16 * The Echo Area:: Where messages are displayed.
17 * Invisible Text:: Hiding part of the buffer text.
18 * Selective Display:: Hiding part of the buffer text (the old way).
19 * Overlay Arrow:: Display of an arrow to indicate position.
20 * Temporary Displays:: Displays that go away automatically.
21 * Overlays:: Use overlays to highlight parts of the buffer.
22 * Width:: How wide a character or string is on the screen.
23 * Faces:: A face defines a graphics style for text characters:
24 font, colors, etc.
25 * Display Property:: Enabling special display features.
26 * Images:: Displaying images in Emacs buffers.
27 * Blinking:: How Emacs shows the matching open parenthesis.
28 * Inverse Video:: Specifying how the screen looks.
29 * Usual Display:: The usual conventions for displaying nonprinting chars.
30 * Display Tables:: How to specify other conventions.
31 * Beeping:: Audible signal to the user.
32 * Window Systems:: Which window system is being used.
33 @end menu
34
35 @node Refresh Screen
36 @section Refreshing the Screen
37
38 The function @code{redraw-frame} redisplays the entire contents of a
39 given frame (@pxref{Frames}).
40
41 @c Emacs 19 feature
42 @defun redraw-frame frame
43 This function clears and redisplays frame @var{frame}.
44 @end defun
45
46 Even more powerful is @code{redraw-display}:
47
48 @deffn Command redraw-display
49 This function clears and redisplays all visible frames.
50 @end deffn
51
52 Processing user input takes absolute priority over redisplay. If you
53 call these functions when input is available, they do nothing
54 immediately, but a full redisplay does happen eventually---after all the
55 input has been processed.
56
57 Normally, suspending and resuming Emacs also refreshes the screen.
58 Some terminal emulators record separate contents for display-oriented
59 programs such as Emacs and for ordinary sequential display. If you are
60 using such a terminal, you might want to inhibit the redisplay on
61 resumption.
62
63 @defvar no-redraw-on-reenter
64 @cindex suspend (cf. @code{no-redraw-on-reenter})
65 @cindex resume (cf. @code{no-redraw-on-reenter})
66 This variable controls whether Emacs redraws the entire screen after it
67 has been suspended and resumed. Non-@code{nil} means there is no need
68 to redraw, @code{nil} means redrawing is needed. The default is @code{nil}.
69 @end defvar
70
71 @node Forcing Redisplay
72 @section Forcing Redisplay
73 @cindex forcing redisplay
74
75 Emacs redisplay normally stops if input arrives, and does not happen
76 at all if input is available before it starts. Most of the time, this
77 is exactly what you want. However, you can prevent preemption by
78 binding @code{redisplay-dont-pause} to a non-@code{nil} value.
79
80 @tindex redisplay-dont-pause
81 @defvar redisplay-dont-pause
82 If this variable is non-@code{nil}, pending input does not
83 prevent or halt redisplay; redisplay occurs, and finishes,
84 regardless of whether input is available. This feature is available
85 as of Emacs 21.
86 @end defvar
87
88 You can request a display update, but only if no input is pending,
89 with @code{(sit-for 0)}. To force a display update even when input is
90 pending, do this:
91
92 @example
93 (let ((redisplay-dont-pause t))
94 (sit-for 0))
95 @end example
96
97 @node Truncation
98 @section Truncation
99 @cindex line wrapping
100 @cindex continuation lines
101 @cindex @samp{$} in display
102 @cindex @samp{\} in display
103
104 When a line of text extends beyond the right edge of a window, the
105 line can either be continued on the next screen line, or truncated to
106 one screen line. The additional screen lines used to display a long
107 text line are called @dfn{continuation} lines. Normally, a @samp{$} in
108 the rightmost column of the window indicates truncation; a @samp{\} on
109 the rightmost column indicates a line that ``wraps'' onto the next line,
110 which is also called @dfn{continuing} the line. (The display table can
111 specify alternative indicators; see @ref{Display Tables}.)
112
113 Note that continuation is different from filling; continuation happens
114 on the screen only, not in the buffer contents, and it breaks a line
115 precisely at the right margin, not at a word boundary. @xref{Filling}.
116
117 @defopt truncate-lines
118 This buffer-local variable controls how Emacs displays lines that extend
119 beyond the right edge of the window. The default is @code{nil}, which
120 specifies continuation. If the value is non-@code{nil}, then these
121 lines are truncated.
122
123 If the variable @code{truncate-partial-width-windows} is non-@code{nil},
124 then truncation is always used for side-by-side windows (within one
125 frame) regardless of the value of @code{truncate-lines}.
126 @end defopt
127
128 @defopt default-truncate-lines
129 This variable is the default value for @code{truncate-lines}, for
130 buffers that do not have buffer-local values for it.
131 @end defopt
132
133 @defopt truncate-partial-width-windows
134 This variable controls display of lines that extend beyond the right
135 edge of the window, in side-by-side windows (@pxref{Splitting Windows}).
136 If it is non-@code{nil}, these lines are truncated; otherwise,
137 @code{truncate-lines} says what to do with them.
138 @end defopt
139
140 When horizontal scrolling (@pxref{Horizontal Scrolling}) is in use in
141 a window, that forces truncation.
142
143 You can override the glyphs that indicate continuation or truncation
144 using the display table; see @ref{Display Tables}.
145
146 If your buffer contains @emph{very} long lines, and you use
147 continuation to display them, just thinking about them can make Emacs
148 redisplay slow. The column computation and indentation functions also
149 become slow. Then you might find it advisable to set
150 @code{cache-long-line-scans} to @code{t}.
151
152 @defvar cache-long-line-scans
153 If this variable is non-@code{nil}, various indentation and motion
154 functions, and Emacs redisplay, cache the results of scanning the
155 buffer, and consult the cache to avoid rescanning regions of the buffer
156 unless they are modified.
157
158 Turning on the cache slows down processing of short lines somewhat.
159
160 This variable is automatically buffer-local in every buffer.
161 @end defvar
162
163 @node The Echo Area
164 @section The Echo Area
165 @cindex error display
166 @cindex echo area
167
168 The @dfn{echo area} is used for displaying messages made with the
169 @code{message} primitive, and for echoing keystrokes. It is not the
170 same as the minibuffer, despite the fact that the minibuffer appears
171 (when active) in the same place on the screen as the echo area. The
172 @cite{GNU Emacs Manual} specifies the rules for resolving conflicts
173 between the echo area and the minibuffer for use of that screen space
174 (@pxref{Minibuffer,, The Minibuffer, emacs, The GNU Emacs Manual}).
175 Error messages appear in the echo area; see @ref{Errors}.
176
177 You can write output in the echo area by using the Lisp printing
178 functions with @code{t} as the stream (@pxref{Output Functions}), or as
179 follows:
180
181 @defun message string &rest arguments
182 This function displays a one-line message in the echo area. The
183 argument @var{string} is similar to a C language @code{printf} control
184 string. See @code{format} in @ref{String Conversion}, for the details
185 on the conversion specifications. @code{message} returns the
186 constructed string.
187
188 In batch mode, @code{message} prints the message text on the standard
189 error stream, followed by a newline.
190
191 If @var{string}, or strings among the @var{arguments}, have @code{face}
192 text properties, these affect the way the message is displayed.
193
194 @c Emacs 19 feature
195 If @var{string} is @code{nil}, @code{message} clears the echo area; if
196 the echo area has been expanded automatically, this brings it back to
197 its normal size. If the minibuffer is active, this brings the
198 minibuffer contents back onto the screen immediately.
199
200 @example
201 @group
202 (message "Minibuffer depth is %d."
203 (minibuffer-depth))
204 @print{} Minibuffer depth is 0.
205 @result{} "Minibuffer depth is 0."
206 @end group
207
208 @group
209 ---------- Echo Area ----------
210 Minibuffer depth is 0.
211 ---------- Echo Area ----------
212 @end group
213 @end example
214 @end defun
215
216 @tindex with-temp-message
217 @defmac with-temp-message message &rest body
218 This construct displays a message in the echo area temporarily, during
219 the execution of @var{body}. It displays @var{message}, executes
220 @var{body}, then returns the value of the last body form while restoring
221 the previous echo area contents.
222 @end defmac
223
224 @defun message-or-box string &rest arguments
225 This function displays a message like @code{message}, but may display it
226 in a dialog box instead of the echo area. If this function is called in
227 a command that was invoked using the mouse---more precisely, if
228 @code{last-nonmenu-event} (@pxref{Command Loop Info}) is either
229 @code{nil} or a list---then it uses a dialog box or pop-up menu to
230 display the message. Otherwise, it uses the echo area. (This is the
231 same criterion that @code{y-or-n-p} uses to make a similar decision; see
232 @ref{Yes-or-No Queries}.)
233
234 You can force use of the mouse or of the echo area by binding
235 @code{last-nonmenu-event} to a suitable value around the call.
236 @end defun
237
238 @defun message-box string &rest arguments
239 This function displays a message like @code{message}, but uses a dialog
240 box (or a pop-up menu) whenever that is possible. If it is impossible
241 to use a dialog box or pop-up menu, because the terminal does not
242 support them, then @code{message-box} uses the echo area, like
243 @code{message}.
244 @end defun
245
246 @defun current-message
247 @tindex current-message
248 This function returns the message currently being displayed in the
249 echo area, or @code{nil} if there is none.
250 @end defun
251
252 @defvar cursor-in-echo-area
253 This variable controls where the cursor appears when a message is
254 displayed in the echo area. If it is non-@code{nil}, then the cursor
255 appears at the end of the message. Otherwise, the cursor appears at
256 point---not in the echo area at all.
257
258 The value is normally @code{nil}; Lisp programs bind it to @code{t}
259 for brief periods of time.
260 @end defvar
261
262 @defvar echo-area-clear-hook
263 @tindex echo-area-clear-hook
264 This normal hook is run whenever the echo area is cleared---either by
265 @code{(message nil)} or for any other reason.
266 @end defvar
267
268 Almost all the messages displayed in the echo area are also recorded
269 in the @samp{*Messages*} buffer.
270
271 @defopt message-log-max
272 This variable specifies how many lines to keep in the @samp{*Messages*}
273 buffer. The value @code{t} means there is no limit on how many lines to
274 keep. The value @code{nil} disables message logging entirely. Here's
275 how to display a message and prevent it from being logged:
276
277 @example
278 (let (message-log-max)
279 (message @dots{}))
280 @end example
281 @end defopt
282
283 @defvar echo-keystrokes
284 This variable determines how much time should elapse before command
285 characters echo. Its value must be an integer, which specifies the
286 number of seconds to wait before echoing. If the user types a prefix
287 key (such as @kbd{C-x}) and then delays this many seconds before
288 continuing, the prefix key is echoed in the echo area. (Once echoing
289 begins in a key sequence, all subsequent characters in the same key
290 sequence are echoed immediately.)
291
292 If the value is zero, then command input is not echoed.
293 @end defvar
294
295 @node Invisible Text
296 @section Invisible Text
297
298 @cindex invisible text
299 You can make characters @dfn{invisible}, so that they do not appear on
300 the screen, with the @code{invisible} property. This can be either a
301 text property (@pxref{Text Properties}) or a property of an overlay
302 (@pxref{Overlays}).
303
304 In the simplest case, any non-@code{nil} @code{invisible} property makes
305 a character invisible. This is the default case---if you don't alter
306 the default value of @code{buffer-invisibility-spec}, this is how the
307 @code{invisible} property works.
308
309 More generally, you can use the variable @code{buffer-invisibility-spec}
310 to control which values of the @code{invisible} property make text
311 invisible. This permits you to classify the text into different subsets
312 in advance, by giving them different @code{invisible} values, and
313 subsequently make various subsets visible or invisible by changing the
314 value of @code{buffer-invisibility-spec}.
315
316 Controlling visibility with @code{buffer-invisibility-spec} is
317 especially useful in a program to display the list of entries in a
318 database. It permits the implementation of convenient filtering
319 commands to view just a part of the entries in the database. Setting
320 this variable is very fast, much faster than scanning all the text in
321 the buffer looking for properties to change.
322
323 @defvar buffer-invisibility-spec
324 This variable specifies which kinds of @code{invisible} properties
325 actually make a character invisible.
326
327 @table @asis
328 @item @code{t}
329 A character is invisible if its @code{invisible} property is
330 non-@code{nil}. This is the default.
331
332 @item a list
333 Each element of the list specifies a criterion for invisibility; if a
334 character's @code{invisible} property fits any one of these criteria,
335 the character is invisible. The list can have two kinds of elements:
336
337 @table @code
338 @item @var{atom}
339 A character is invisible if its @code{invisible} property value
340 is @var{atom} or if it is a list with @var{atom} as a member.
341
342 @item (@var{atom} . t)
343 A character is invisible if its @code{invisible} property value
344 is @var{atom} or if it is a list with @var{atom} as a member.
345 Moreover, if this character is at the end of a line and is followed
346 by a visible newline, it displays an ellipsis.
347 @end table
348 @end table
349 @end defvar
350
351 Two functions are specifically provided for adding elements to
352 @code{buffer-invisibility-spec} and removing elements from it.
353
354 @defun add-to-invisibility-spec element
355 @tindex add-to-invisibility-spec
356 Add the element @var{element} to @code{buffer-invisibility-spec}
357 (if it is not already present in that list).
358 @end defun
359
360 @defun remove-from-invisibility-spec element
361 @tindex remove-from-invisibility-spec
362 Remove the element @var{element} from @code{buffer-invisibility-spec}.
363 This does nothing if @var{element} is not in the list.
364 @end defun
365
366 One convention about the use of @code{buffer-invisibility-spec} is
367 that a major mode should use the mode's own name as an element of
368 @code{buffer-invisibility-spec} and as the value of the @code{invisible}
369 property:
370
371 @example
372 ;; @r{If you want to display an ellipsis:}
373 (add-to-invisibility-spec '(my-symbol . t))
374 ;; @r{If you don't want ellipsis:}
375 (add-to-invisibility-spec 'my-symbol)
376
377 (overlay-put (make-overlay beginning end)
378 'invisible 'my-symbol)
379
380 ;; @r{When done with the overlays:}
381 (remove-from-invisibility-spec '(my-symbol . t))
382 ;; @r{Or respectively:}
383 (remove-from-invisibility-spec 'my-symbol)
384 @end example
385
386 @vindex line-move-ignore-invisible
387 Ordinarily, commands that operate on text or move point do not care
388 whether the text is invisible. The user-level line motion commands
389 explicitly ignore invisible newlines if
390 @code{line-move-ignore-invisible} is non-@code{nil}, but only because
391 they are explicitly programmed to do so.
392
393 Incremental search can make invisible overlays visible temporarily
394 and/or permanently when a match includes invisible text. To enable
395 this, the overlay should have a non-@code{nil}
396 @code{isearch-open-invisible} property. The property value should be a
397 function to be called with the overlay as an argument. This function
398 should make the overlay visible permanently; it is used when the match
399 overlaps the overlay on exit from the search.
400
401 During the search, such overlays are made temporarily visible by
402 temporarily modifying their invisible and intangible properties. If you
403 want this to be done differently for a certain overlay, give it an
404 @code{isearch-open-invisible-temporary} property which is a function.
405 The function is called with two arguments: the first is the overlay, and
406 the second is @code{t} to make the overlay visible, or @code{nil} to
407 make it invisible again.
408
409 @node Selective Display
410 @section Selective Display
411 @cindex selective display
412
413 @dfn{Selective display} refers to a pair of related features for
414 hiding certain lines on the screen.
415
416 The first variant, explicit selective display, is designed for use in
417 a Lisp program: it controls which lines are hidden by altering the text.
418 The invisible text feature (@pxref{Invisible Text}) has partially
419 replaced this feature.
420
421 In the second variant, the choice of lines to hide is made
422 automatically based on indentation. This variant is designed to be a
423 user-level feature.
424
425 The way you control explicit selective display is by replacing a
426 newline (control-j) with a carriage return (control-m). The text that
427 was formerly a line following that newline is now invisible. Strictly
428 speaking, it is temporarily no longer a line at all, since only newlines
429 can separate lines; it is now part of the previous line.
430
431 Selective display does not directly affect editing commands. For
432 example, @kbd{C-f} (@code{forward-char}) moves point unhesitatingly into
433 invisible text. However, the replacement of newline characters with
434 carriage return characters affects some editing commands. For example,
435 @code{next-line} skips invisible lines, since it searches only for
436 newlines. Modes that use selective display can also define commands
437 that take account of the newlines, or that make parts of the text
438 visible or invisible.
439
440 When you write a selectively displayed buffer into a file, all the
441 control-m's are output as newlines. This means that when you next read
442 in the file, it looks OK, with nothing invisible. The selective display
443 effect is seen only within Emacs.
444
445 @defvar selective-display
446 This buffer-local variable enables selective display. This means that
447 lines, or portions of lines, may be made invisible.
448
449 @itemize @bullet
450 @item
451 If the value of @code{selective-display} is @code{t}, then the character
452 control-m marks the start of invisible text; the control-m, and the rest
453 of the line following it, are not displayed. This is explicit selective
454 display.
455
456 @item
457 If the value of @code{selective-display} is a positive integer, then
458 lines that start with more than that many columns of indentation are not
459 displayed.
460 @end itemize
461
462 When some portion of a buffer is invisible, the vertical movement
463 commands operate as if that portion did not exist, allowing a single
464 @code{next-line} command to skip any number of invisible lines.
465 However, character movement commands (such as @code{forward-char}) do
466 not skip the invisible portion, and it is possible (if tricky) to insert
467 or delete text in an invisible portion.
468
469 In the examples below, we show the @emph{display appearance} of the
470 buffer @code{foo}, which changes with the value of
471 @code{selective-display}. The @emph{contents} of the buffer do not
472 change.
473
474 @example
475 @group
476 (setq selective-display nil)
477 @result{} nil
478
479 ---------- Buffer: foo ----------
480 1 on this column
481 2on this column
482 3n this column
483 3n this column
484 2on this column
485 1 on this column
486 ---------- Buffer: foo ----------
487 @end group
488
489 @group
490 (setq selective-display 2)
491 @result{} 2
492
493 ---------- Buffer: foo ----------
494 1 on this column
495 2on this column
496 2on this column
497 1 on this column
498 ---------- Buffer: foo ----------
499 @end group
500 @end example
501 @end defvar
502
503 @defvar selective-display-ellipses
504 If this buffer-local variable is non-@code{nil}, then Emacs displays
505 @samp{@dots{}} at the end of a line that is followed by invisible text.
506 This example is a continuation of the previous one.
507
508 @example
509 @group
510 (setq selective-display-ellipses t)
511 @result{} t
512
513 ---------- Buffer: foo ----------
514 1 on this column
515 2on this column ...
516 2on this column
517 1 on this column
518 ---------- Buffer: foo ----------
519 @end group
520 @end example
521
522 You can use a display table to substitute other text for the ellipsis
523 (@samp{@dots{}}). @xref{Display Tables}.
524 @end defvar
525
526 @node Overlay Arrow
527 @section The Overlay Arrow
528 @cindex overlay arrow
529
530 The @dfn{overlay arrow} is useful for directing the user's attention
531 to a particular line in a buffer. For example, in the modes used for
532 interface to debuggers, the overlay arrow indicates the line of code
533 about to be executed.
534
535 @defvar overlay-arrow-string
536 This variable holds the string to display to call attention to a
537 particular line, or @code{nil} if the arrow feature is not in use.
538 @end defvar
539
540 @defvar overlay-arrow-position
541 This variable holds a marker that indicates where to display the overlay
542 arrow. It should point at the beginning of a line. The arrow text
543 appears at the beginning of that line, overlaying any text that would
544 otherwise appear. Since the arrow is usually short, and the line
545 usually begins with indentation, normally nothing significant is
546 overwritten.
547
548 The overlay string is displayed only in the buffer that this marker
549 points into. Thus, only one buffer can have an overlay arrow at any
550 given time.
551 @c !!! overlay-arrow-position: but the overlay string may remain in the display
552 @c of some other buffer until an update is required. This should be fixed
553 @c now. Is it?
554 @end defvar
555
556 You can do a similar job by creating an overlay with a
557 @code{before-string} property. @xref{Overlay Properties}.
558
559 @node Temporary Displays
560 @section Temporary Displays
561
562 Temporary displays are used by Lisp programs to put output into a
563 buffer and then present it to the user for perusal rather than for
564 editing. Many help commands use this feature.
565
566 @defspec with-output-to-temp-buffer buffer-name forms@dots{}
567 This function executes @var{forms} while arranging to insert any output
568 they print into the buffer named @var{buffer-name}, which is first
569 created if necessary, and put into Help mode. Finally, the buffer is
570 displayed in some window, but not selected.
571
572 If the @var{forms} do not change the major mode in the output buffer, so
573 that it is still Help mode at the end of their execution, then
574 @code{with-output-to-temp-buffer} makes this buffer read-only at the
575 end, and also scans it for function and variable names to make them into
576 clickable cross-references.
577
578 The string @var{buffer-name} specifies the temporary buffer, which
579 need not already exist. The argument must be a string, not a buffer.
580 The buffer is erased initially (with no questions asked), and it is
581 marked as unmodified after @code{with-output-to-temp-buffer} exits.
582
583 @code{with-output-to-temp-buffer} binds @code{standard-output} to the
584 temporary buffer, then it evaluates the forms in @var{forms}. Output
585 using the Lisp output functions within @var{forms} goes by default to
586 that buffer (but screen display and messages in the echo area, although
587 they are ``output'' in the general sense of the word, are not affected).
588 @xref{Output Functions}.
589
590 Several hooks are available for customizing the behavior
591 of this construct; they are listed below.
592
593 The value of the last form in @var{forms} is returned.
594
595 @example
596 @group
597 ---------- Buffer: foo ----------
598 This is the contents of foo.
599 ---------- Buffer: foo ----------
600 @end group
601
602 @group
603 (with-output-to-temp-buffer "foo"
604 (print 20)
605 (print standard-output))
606 @result{} #<buffer foo>
607
608 ---------- Buffer: foo ----------
609 20
610
611 #<buffer foo>
612
613 ---------- Buffer: foo ----------
614 @end group
615 @end example
616 @end defspec
617
618 @defvar temp-buffer-show-function
619 If this variable is non-@code{nil}, @code{with-output-to-temp-buffer}
620 calls it as a function to do the job of displaying a help buffer. The
621 function gets one argument, which is the buffer it should display.
622
623 It is a good idea for this function to run @code{temp-buffer-show-hook}
624 just as @code{with-output-to-temp-buffer} normally would, inside of
625 @code{save-selected-window} and with the chosen window and buffer
626 selected.
627 @end defvar
628
629 @defvar temp-buffer-setup-hook
630 @tindex temp-buffer-setup-hook
631 This normal hook is run by @code{with-output-to-temp-buffer} before
632 evaluating @var{body}. When the hook runs, the help buffer is current.
633 This hook is normally set up with a function to put the buffer in Help
634 mode.
635 @end defvar
636
637 @defvar temp-buffer-show-hook
638 This normal hook is run by @code{with-output-to-temp-buffer} after
639 displaying the help buffer. When the hook runs, the help buffer is
640 current, and the window it was displayed in is selected. This hook is
641 normally set up with a function to make the buffer read only, and find
642 function names and variable names in it, provided the major mode is
643 still Help mode.
644 @end defvar
645
646 @defun momentary-string-display string position &optional char message
647 This function momentarily displays @var{string} in the current buffer at
648 @var{position}. It has no effect on the undo list or on the buffer's
649 modification status.
650
651 The momentary display remains until the next input event. If the next
652 input event is @var{char}, @code{momentary-string-display} ignores it
653 and returns. Otherwise, that event remains buffered for subsequent use
654 as input. Thus, typing @var{char} will simply remove the string from
655 the display, while typing (say) @kbd{C-f} will remove the string from
656 the display and later (presumably) move point forward. The argument
657 @var{char} is a space by default.
658
659 The return value of @code{momentary-string-display} is not meaningful.
660
661 If the string @var{string} does not contain control characters, you can
662 do the same job in a more general way by creating (and then subsequently
663 deleting) an overlay with a @code{before-string} property.
664 @xref{Overlay Properties}.
665
666 If @var{message} is non-@code{nil}, it is displayed in the echo area
667 while @var{string} is displayed in the buffer. If it is @code{nil}, a
668 default message says to type @var{char} to continue.
669
670 In this example, point is initially located at the beginning of the
671 second line:
672
673 @example
674 @group
675 ---------- Buffer: foo ----------
676 This is the contents of foo.
677 @point{}Second line.
678 ---------- Buffer: foo ----------
679 @end group
680
681 @group
682 (momentary-string-display
683 "**** Important Message! ****"
684 (point) ?\r
685 "Type RET when done reading")
686 @result{} t
687 @end group
688
689 @group
690 ---------- Buffer: foo ----------
691 This is the contents of foo.
692 **** Important Message! ****Second line.
693 ---------- Buffer: foo ----------
694
695 ---------- Echo Area ----------
696 Type RET when done reading
697 ---------- Echo Area ----------
698 @end group
699 @end example
700 @end defun
701
702 @node Overlays
703 @section Overlays
704 @cindex overlays
705
706 You can use @dfn{overlays} to alter the appearance of a buffer's text on
707 the screen, for the sake of presentation features. An overlay is an
708 object that belongs to a particular buffer, and has a specified
709 beginning and end. It also has properties that you can examine and set;
710 these affect the display of the text within the overlay.
711
712 @menu
713 * Overlay Properties:: How to read and set properties.
714 What properties do to the screen display.
715 * Managing Overlays:: Creating, moving, finding overlays.
716 @end menu
717
718 @node Overlay Properties
719 @subsection Overlay Properties
720
721 Overlay properties are like text properties in that the properties that
722 alter how a character is displayed can come from either source. But in
723 most respects they are different. Text properties are considered a part
724 of the text; overlays are specifically considered not to be part of the
725 text. Thus, copying text between various buffers and strings preserves
726 text properties, but does not try to preserve overlays. Changing a
727 buffer's text properties marks the buffer as modified, while moving an
728 overlay or changing its properties does not. Unlike text property
729 changes, overlay changes are not recorded in the buffer's undo list.
730 @xref{Text Properties}, for comparison.
731
732 These functions are used for reading and writing the properties of an
733 overlay:
734
735 @defun overlay-get overlay prop
736 This function returns the value of property @var{prop} recorded in
737 @var{overlay}, if any. If @var{overlay} does not record any value for
738 that property, but it does have a @code{category} property which is a
739 symbol, that symbol's @var{prop} property is used. Otherwise, the value
740 is @code{nil}.
741 @end defun
742
743 @defun overlay-put overlay prop value
744 This function sets the value of property @var{prop} recorded in
745 @var{overlay} to @var{value}. It returns @var{value}.
746 @end defun
747
748 See also the function @code{get-char-property} which checks both
749 overlay properties and text properties for a given character.
750 @xref{Examining Properties}.
751
752 Many overlay properties have special meanings; here is a table
753 of them:
754
755 @table @code
756 @item priority
757 @kindex priority @r{(overlay property)}
758 This property's value (which should be a nonnegative number) determines
759 the priority of the overlay. The priority matters when two or more
760 overlays cover the same character and both specify a face for display;
761 the one whose @code{priority} value is larger takes priority over the
762 other, and its face attributes override the face attributes of the lower
763 priority overlay.
764
765 Currently, all overlays take priority over text properties. Please
766 avoid using negative priority values, as we have not yet decided just
767 what they should mean.
768
769 @item window
770 @kindex window @r{(overlay property)}
771 If the @code{window} property is non-@code{nil}, then the overlay
772 applies only on that window.
773
774 @item category
775 @kindex category @r{(overlay property)}
776 If an overlay has a @code{category} property, we call it the
777 @dfn{category} of the overlay. It should be a symbol. The properties
778 of the symbol serve as defaults for the properties of the overlay.
779
780 @item face
781 @kindex face @r{(overlay property)}
782 This property controls the way text is displayed---for example, which
783 font and which colors. @xref{Faces}, for more information.
784
785 In the simplest case, the value is a face name. It can also be a list;
786 then each element can be any of these possibilities:
787
788 @itemize @bullet
789 @item
790 A face name (a symbol or string).
791
792 @item
793 Starting in Emacs 21, a property list of face attributes. This has the
794 form (@var{keyword} @var{value} @dots{}), where each @var{keyword} is a
795 face attribute name and @var{value} is a meaningful value for that
796 attribute. With this feature, you do not need to create a face each
797 time you want to specify a particular attribute for certain text.
798 @xref{Face Attributes}.
799
800 @item
801 A cons cell of the form @code{(foreground-color . @var{color-name})} or
802 @code{(background-color . @var{color-name})}. These elements specify
803 just the foreground color or just the background color.
804
805 @code{(foreground-color . @var{color-name})} is equivalent to
806 @code{(:foreground @var{color-name})}, and likewise for the background.
807 @end itemize
808
809 @item mouse-face
810 @kindex mouse-face @r{(overlay property)}
811 This property is used instead of @code{face} when the mouse is within
812 the range of the overlay.
813
814 @item display
815 @kindex display @r{(overlay property)}
816 This property activates various features that change the
817 way text is displayed. For example, it can make text appear taller
818 or shorter, higher or lower, wider or narror, or replaced with an image.
819 @xref{Display Property}.
820
821 @item help-echo
822 @kindex help-echo @r{(text property)}
823 If an overlay has a string as its @code{help-echo} property, then when
824 you move the mouse onto the text in the overlay, Emacs displays that
825 string in the echo area, or in the tooltip window. This feature is
826 available starting in Emacs 21.
827
828 @item modification-hooks
829 @kindex modification-hooks @r{(overlay property)}
830 This property's value is a list of functions to be called if any
831 character within the overlay is changed or if text is inserted strictly
832 within the overlay.
833
834 The hook functions are called both before and after each change.
835 If the functions save the information they receive, and compare notes
836 between calls, they can determine exactly what change has been made
837 in the buffer text.
838
839 When called before a change, each function receives four arguments: the
840 overlay, @code{nil}, and the beginning and end of the text range to be
841 modified.
842
843 When called after a change, each function receives five arguments: the
844 overlay, @code{t}, the beginning and end of the text range just
845 modified, and the length of the pre-change text replaced by that range.
846 (For an insertion, the pre-change length is zero; for a deletion, that
847 length is the number of characters deleted, and the post-change
848 beginning and end are equal.)
849
850 @item insert-in-front-hooks
851 @kindex insert-in-front-hooks @r{(overlay property)}
852 This property's value is a list of functions to be called before and
853 after inserting text right at the beginning of the overlay. The calling
854 conventions are the same as for the @code{modification-hooks} functions.
855
856 @item insert-behind-hooks
857 @kindex insert-behind-hooks @r{(overlay property)}
858 This property's value is a list of functions to be called before and
859 after inserting text right at the end of the overlay. The calling
860 conventions are the same as for the @code{modification-hooks} functions.
861
862 @item invisible
863 @kindex invisible @r{(overlay property)}
864 The @code{invisible} property can make the text in the overlay
865 invisible, which means that it does not appear on the screen.
866 @xref{Invisible Text}, for details.
867
868 @item intangible
869 @kindex intangible @r{(overlay property)}
870 The @code{intangible} property on an overlay works just like the
871 @code{intangible} text property. @xref{Special Properties}, for details.
872
873 @item isearch-open-invisible
874 This property tells incremental search how to make an invisible overlay
875 visible, permanently, if the final match overlaps it. @xref{Invisible
876 Text}.
877
878 @item isearch-open-invisible-temporary
879 This property tells incremental search how to make an invisible overlay
880 visible, temporarily, during the search. @xref{Invisible Text}.
881
882 @item before-string
883 @kindex before-string @r{(overlay property)}
884 This property's value is a string to add to the display at the beginning
885 of the overlay. The string does not appear in the buffer in any
886 sense---only on the screen.
887
888 @item after-string
889 @kindex after-string @r{(overlay property)}
890 This property's value is a string to add to the display at the end of
891 the overlay. The string does not appear in the buffer in any
892 sense---only on the screen.
893
894 @item evaporate
895 @kindex evaporate @r{(overlay property)}
896 If this property is non-@code{nil}, the overlay is deleted automatically
897 if it ever becomes empty (i.e., if it spans no characters).
898
899 @item local-map
900 @cindex keymap of character (and overlays)
901 @kindex local-map @r{(overlay property)}
902 If this property is non-@code{nil}, it specifies a keymap for a portion
903 of the text. The property's value replaces the buffer's local map, when
904 the character after point is within the overlay. @xref{Active Keymaps}.
905 @end table
906
907 @node Managing Overlays
908 @subsection Managing Overlays
909
910 This section describes the functions to create, delete and move
911 overlays, and to examine their contents.
912
913 @defun make-overlay start end &optional buffer front-advance rear-advance
914 This function creates and returns an overlay that belongs to
915 @var{buffer} and ranges from @var{start} to @var{end}. Both @var{start}
916 and @var{end} must specify buffer positions; they may be integers or
917 markers. If @var{buffer} is omitted, the overlay is created in the
918 current buffer.
919
920 The arguments @var{front-advance} and @var{rear-advance} specify the
921 insertion type for the start of the overlay and for the end of the
922 overlay. @xref{Marker Insertion Types}.
923 @end defun
924
925 @defun overlay-start overlay
926 This function returns the position at which @var{overlay} starts,
927 as an integer.
928 @end defun
929
930 @defun overlay-end overlay
931 This function returns the position at which @var{overlay} ends,
932 as an integer.
933 @end defun
934
935 @defun overlay-buffer overlay
936 This function returns the buffer that @var{overlay} belongs to.
937 @end defun
938
939 @defun delete-overlay overlay
940 This function deletes @var{overlay}. The overlay continues to exist as
941 a Lisp object, but ceases to be attached to the buffer it belonged to,
942 and ceases to have any effect on display.
943
944 A deleted overlay is not permanently useless. You can give it
945 a position in a buffer again by calling @code{move-overlay}.
946 @end defun
947
948 @defun move-overlay overlay start end &optional buffer
949 This function moves @var{overlay} to @var{buffer}, and places its bounds
950 at @var{start} and @var{end}. Both arguments @var{start} and @var{end}
951 must specify buffer positions; they may be integers or markers. If
952 @var{buffer} is omitted, @var{overlay} stays in the same buffer;
953 if @var{overlay} was deleted, it goes into the current buffer.
954
955 The return value is @var{overlay}.
956
957 This is the only valid way to change the endpoints of an overlay. Do
958 not try modifying the markers in the overlay by hand, as that fails to
959 update other vital data structures and can cause some overlays to be
960 ``lost''.
961 @end defun
962
963 @defun overlays-at pos
964 This function returns a list of all the overlays that contain position
965 @var{pos} in the current buffer. The list is in no particular order.
966 An overlay contains position @var{pos} if it begins at or before
967 @var{pos}, and ends after @var{pos}.
968 @end defun
969
970 @defun overlays-in beg end
971 @tindex overlays-in
972 This function returns a list of the overlays that overlap the region
973 @var{beg} through @var{end}. ``Overlap'' means that at least one
974 character is contained within the overlay and also contained within the
975 specified region; however, empty overlays are included in the result if
976 they are located at @var{beg} or between @var{beg} and @var{end}.
977 @end defun
978
979 @defun next-overlay-change pos
980 This function returns the buffer position of the next beginning or end
981 of an overlay, after @var{pos}.
982 @end defun
983
984 @defun previous-overlay-change pos
985 This function returns the buffer position of the previous beginning or
986 end of an overlay, before @var{pos}.
987 @end defun
988
989 @node Width
990 @section Width
991
992 Since not all characters have the same width, these functions let you
993 check the width of a character. @xref{Primitive Indent}, and
994 @ref{Screen Lines}, for related functions.
995
996 @defun char-width char
997 @tindex char-width
998 This function returns the width in columns of the character @var{char},
999 if it were displayed in the current buffer and the selected window.
1000 @end defun
1001
1002 @defun string-width string
1003 @tindex string-width
1004 This function returns the width in columns of the string @var{string},
1005 if it were displayed in the current buffer and the selected window.
1006 @end defun
1007
1008 @defun truncate-string-to-width string width &optional start-column padding
1009 @tindex truncate-string-to-width
1010 This function returns the part of @var{string} that fits within
1011 @var{width} columns, as a new string.
1012
1013 If @var{string} does not reach @var{width}, then the result ends where
1014 @var{string} ends. If one multi-column character in @var{string}
1015 extends across the column @var{width}, that character is not included in
1016 the result. Thus, the result can fall short of @var{width} but cannot
1017 go beyond it.
1018
1019 The optional argument @var{start-column} specifies the starting column.
1020 If this is non-@code{nil}, then the first @var{start-column} columns of
1021 the string are omitted from the value. If one multi-column character in
1022 @var{string} extends across the column @var{start-column}, that
1023 character is not included.
1024
1025 The optional argument @var{padding}, if non-@code{nil}, is a padding
1026 character added at the beginning and end of the result string, to extend
1027 it to exactly @var{width} columns. The padding character is used at the
1028 end of the result if it falls short of @var{width}. It is also used at
1029 the beginning of the result if one multi-column character in
1030 @var{string} extends across the column @var{start-column}.
1031
1032 @example
1033 (truncate-string-to-width "\tab\t" 12 4)
1034 @result{} "ab"
1035 (truncate-string-to-width "\tab\t" 12 4 ?\ )
1036 @result{} " ab "
1037 @end example
1038 @end defun
1039
1040 @node Faces
1041 @section Faces
1042 @cindex face
1043
1044 A @dfn{face} is a named collection of graphical attributes: font
1045 family, foreground color, background color, optional underlining, and
1046 many others. Faces are used in Emacs to control the style of display of
1047 particular parts of the text or the frame.
1048
1049 @cindex face id
1050 Each face has its own @dfn{face number}, which distinguishes faces at
1051 low levels within Emacs. However, for most purposes, you refer to
1052 faces in Lisp programs by their names.
1053
1054 @defun facep object
1055 This function returns @code{t} if @var{object} is a face name symbol (or
1056 if it is a vector of the kind used internally to record face data). It
1057 returns @code{nil} otherwise.
1058 @end defun
1059
1060 Each face name is meaningful for all frames, and by default it has the
1061 same meaning in all frames. But you can arrange to give a particular
1062 face name a special meaning in one frame if you wish.
1063
1064 @menu
1065 * Standard Faces:: The faces Emacs normally comes with.
1066 * Defining Faces:: How to define a face with @code{defface}.
1067 * Face Attributes:: What is in a face?
1068 * Attribute Functions:: Functions to examine and set face attributes.
1069 * Merging Faces:: How Emacs combines the faces specified for a character.
1070 * Font Selection:: Finding the best available font for a face.
1071 * Face Functions:: How to define and examine faces.
1072 * Auto Faces:: Hook for automatic face assignment.
1073 * Font Lookup:: Looking up the names of available fonts
1074 and information about them.
1075 * Fontsets:: A fontset is a collection of fonts
1076 that handle a range of character sets.
1077 @end menu
1078
1079 @node Standard Faces
1080 @subsection Standard Faces
1081
1082 This table lists all the standard faces and their uses. Most of them
1083 are used for displaying certain parts of the frames or certain kinds of
1084 text; you can control how those places look by customizing these faces.
1085
1086 @table @code
1087 @item default
1088 @kindex default @r{(face name)}
1089 This face is used for ordinary text.
1090
1091 @item mode-line
1092 @kindex mode-line @r{(face name)}
1093 This face is used for mode lines, and for menu bars when toolkit menus
1094 are not used---but only if @code{mode-line-inverse-video} is
1095 non-@code{nil}.
1096
1097 @item modeline
1098 @kindex modeline @r{(face name)}
1099 This is an alias for the @code{mode-line} face, for compatibility with
1100 old Emacs versions.
1101
1102 @item header-line
1103 @kindex header-line @r{(face name)}
1104 This face is used for the header lines of windows that have them.
1105
1106 @item menu
1107 This face controls the display of menus, both their colors and their
1108 font. (This works only on certain systems.)
1109
1110 @item fringe
1111 @kindex fringe @r{(face name)}
1112 This face controls the colors of window fringes, the thin areas on
1113 either side that are used to display continuation and truncation glyphs.
1114
1115 @item scroll-bar
1116 @kindex scroll-bar @r{(face name)}
1117 This face controls the colors for display of scroll bars.
1118
1119 @item tool-bar
1120 @kindex tool-bar @r{(face name)}
1121 This face is used for display of the tool bar, if any.
1122
1123 @item region
1124 @kindex region @r{(face name)}
1125 This face is used for highlighting the region in Transient Mark mode.
1126
1127 @item secondary-selection
1128 @kindex secondary-selection @r{(face name)}
1129 This face is used to show any secondary selection you have made.
1130
1131 @item highlight
1132 @kindex highlight @r{(face name)}
1133 This face is meant to be used for highlighting for various purposes.
1134
1135 @item trailing-whitespace
1136 @kindex trailing-whitespace @r{(face name)}
1137 This face is used to display excess whitespace at the end of a line,
1138 if @code{show-trailing-whitespace} is non-@code{nil}.
1139 @end table
1140
1141 In contrast, these faces are provided to change the appearance of text
1142 in specific ways. You can use them on specific text, when you want
1143 the effects they produce.
1144
1145 @table @code
1146 @item bold
1147 @kindex bold @r{(face name)}
1148 This face uses a bold font, if possible. It uses the bold variant of
1149 the frame's font, if it has one. It's up to you to choose a default
1150 font that has a bold variant, if you want to use one.
1151
1152 @item italic
1153 @kindex italic @r{(face name)}
1154 This face uses the italic variant of the frame's font, if it has one.
1155
1156 @item bold-italic
1157 @kindex bold-italic @r{(face name)}
1158 This face uses the bold italic variant of the frame's font, if it has
1159 one.
1160
1161 @item underline
1162 @kindex underline @r{(face name)}
1163 This face underlines text.
1164
1165 @item fixed-patch
1166 @kindex fixed-patch @r{(face name)}
1167 This face forces use of a particular fixed-width font.
1168
1169 @item variable-patch
1170 @kindex variable-patch @r{(face name)}
1171 This face forces use of a particular variable-width font. It's
1172 reasonable to customize this to use a different variable-width font, if
1173 you like, but you should not make it a fixed-width font.
1174 @end table
1175
1176 @defvar show-trailing-whitespace
1177 @tindex show-trailing-whitespace
1178 If this variable is non-@code{nil}, Emacs uses the
1179 @code{trailing-whitespace} face to display any spaces and tabs at the
1180 end of a line.
1181 @end defvar
1182
1183 @node Defining Faces
1184 @subsection Defining Faces
1185
1186 The way to define a new face is with @code{defface}. This creates a
1187 kind of customization item (@pxref{Customization}) which the user can
1188 customize using the Customization buffer (@pxref{Easy Customization,,,
1189 emacs, The GNU Emacs Manual}).
1190
1191 @defmac defface face spec doc [keyword value]...
1192 @tindex defface
1193 This declares @var{face} as a customizable face that defaults according
1194 to @var{spec}. You should not quote the symbol @var{face}. The
1195 argument @var{doc} specifies the face documentation. The keywords you
1196 can use in @code{defface} are the same ones that are meaningful in both
1197 @code{defgroup} and @code{defcustom} (@pxref{Common Keywords}).
1198
1199 When @code{defface} executes, it defines the face according to
1200 @var{spec}, then uses any customizations that were read from the
1201 init file (@pxref{Init File}) to override that specification.
1202
1203 The purpose of @var{spec} is to specify how the face should appear on
1204 different kinds of terminals. It should be an alist whose elements have
1205 the form @code{(@var{display} @var{atts})}. Each element's @sc{car},
1206 @var{display}, specifies a class of terminals. The element's second element,
1207 @var{atts}, is a list of face attributes and their values; it specifies
1208 what the face should look like on that kind of terminal. The possible
1209 attributes are defined in the value of @code{custom-face-attributes}.
1210
1211 The @var{display} part of an element of @var{spec} determines which
1212 frames the element applies to. If more than one element of @var{spec}
1213 matches a given frame, the first matching element is the only one used
1214 for that frame. There are two possibilities for @var{display}:
1215
1216 @table @asis
1217 @item @code{t}
1218 This element of @var{spec} matches all frames. Therefore, any
1219 subsequent elements of @var{spec} are never used. Normally
1220 @code{t} is used in the last (or only) element of @var{spec}.
1221
1222 @item a list
1223 If @var{display} is a list, each element should have the form
1224 @code{(@var{characteristic} @var{value}@dots{})}. Here
1225 @var{characteristic} specifies a way of classifying frames, and the
1226 @var{value}s are possible classifications which @var{display} should
1227 apply to. Here are the possible values of @var{characteristic}:
1228
1229 @table @code
1230 @item type
1231 The kind of window system the frame uses---either @code{x}, @code{pc}
1232 (for the MS-DOS console), @code{w32} (for MS Windows 9X/NT), or
1233 @code{tty}.
1234
1235 @item class
1236 What kinds of colors the frame supports---either @code{color},
1237 @code{grayscale}, or @code{mono}.
1238
1239 @item background
1240 The kind of background---either @code{light} or @code{dark}.
1241 @end table
1242
1243 If an element of @var{display} specifies more than one @var{value} for a
1244 given @var{characteristic}, any of those values is acceptable. If
1245 @var{display} has more than one element, each element should specify a
1246 different @var{characteristic}; then @emph{each} characteristic of the
1247 frame must match one of the @var{value}s specified for it in
1248 @var{display}.
1249 @end table
1250 @end defmac
1251
1252 Here's how the standard face @code{region} is defined:
1253
1254 @example
1255 @group
1256 (defface region
1257 `((((type tty) (class color))
1258 (:background "blue" :foreground "white"))
1259 @end group
1260 (((type tty) (class mono))
1261 (:inverse-video t))
1262 (((class color) (background dark))
1263 (:background "blue"))
1264 (((class color) (background light))
1265 (:background "lightblue"))
1266 (t (:background "gray")))
1267 @group
1268 "Basic face for highlighting the region."
1269 :group 'basic-faces)
1270 @end group
1271 @end example
1272
1273 Internally, @code{defface} uses the symbol property
1274 @code{face-defface-spec} to record the face attributes specified in
1275 @code{defface}, @code{saved-face} for the attributes saved by the user
1276 with the customization buffer, and @code{face-documentation} for the
1277 documentation string.
1278
1279 @tindex frame-background-mode
1280 @defopt frame-background-mode
1281 This option, if non-@code{nil}, specifies the background type to use for
1282 interpreting face definitions. If it is @code{dark}, then Emacs treats
1283 all frames as if they had a dark background, regardless of their actual
1284 background colors. If it is @code{light}, then Emacs treats all frames
1285 as if they had a light background.
1286 @end defopt
1287
1288 @node Face Attributes
1289 @subsection Face Attributes
1290 @cindex face attributes
1291
1292 The effect of using a face is determined by a fixed set of @dfn{face
1293 attributes}. This table lists all the face attributes, and what they
1294 mean. Note that in general, more than one face can be specified for a
1295 given piece of text; when that happens, the attributes of all the faces
1296 are merged to specify how to display the text. @xref{Merging Faces}.
1297
1298 In Emacs 21, any attribute in a face can have the value
1299 @code{unspecified}. This means the face doesn't specify that attribute.
1300 In face merging, when the first face fails to specify a particular
1301 attribute, that means the next face gets a chance. However, the
1302 @code{default} face must specify all attributes.
1303
1304 Some of these font attributes are meaningful only on certain kinds of
1305 displays---if your display cannot handle a certain attribute, the
1306 attribute is ignored. (The attributes @code{:family}, @code{:width},
1307 @code{:height}, @code{:weight}, and @code{:slant} correspond to parts of
1308 an X Logical Font Descriptor.)
1309
1310 @table @code
1311 @item :family
1312 Font family name, or fontset name (@pxref{Fontsets}). If you specify a
1313 font family name, the wild-card characters @samp{*} and @samp{?} are
1314 allowed.
1315
1316 @item :width
1317 Relative proportionate width, also known as the character set width or
1318 set width. This should be one of the symbols @code{ultra-condensed},
1319 @code{extra-condensed}, @code{condensed}, @code{semi-condensed},
1320 @code{normal}, @code{semi-expanded}, @code{expanded},
1321 @code{extra-expanded}, or @code{ultra-expanded}.
1322
1323 @item :height
1324 Font height, an integer in units of 1/10 point.
1325
1326 @item :weight
1327 Font weight---a symbol from this series (from most dense to most faint):
1328 @code{ultra-bold}, @code{extra-bold}, @code{bold}, @code{semi-bold},
1329 @code{normal}, @code{semi-light}, @code{light}, @code{extra-light},
1330 or @code{ultra-light}.
1331
1332 On a text-only terminal, any weight greater than normal is displayed as
1333 extra bright, and any weight less than normal is displayed as
1334 half-bright (This is provided the terminal supports the feature.)
1335
1336 On a text-only terminal, any weight greater than normal is displayed as
1337 extra bright, and any weight less than normal is displayed as
1338 half-bright (provided the terminal supports the feature).
1339
1340 @item :slant
1341 Font slant---one of the symbols @code{italic}, @code{oblique}, @code{normal},
1342 @code{reverse-italic}, or @code{reverse-oblique}.
1343
1344 On a text-only terminal, slanted text is displayed as half-bright, if
1345 the terminal supports the feature.
1346
1347 @item :foreground
1348 Foreground color, a string.
1349
1350 @item :background
1351 Background color, a string.
1352
1353 @item :inverse-video
1354 Whether or not characters should be displayed in inverse video. The
1355 value should be @code{t} (yes) or @code{nil} (no).
1356
1357 @item :stipple
1358 The background stipple, a bitmap.
1359
1360 The value can be a string; that should be the name of a file containing
1361 external-format X bitmap data. The file is found in the directories
1362 listed in the variable @code{x-bitmap-file-path}.
1363
1364 Alternatively, the value can specify the bitmap directly, with a list of
1365 the form @code{(@var{width} @var{height} @var{data})}. Here,
1366 @var{width} and @var{height} specify the size in pixels, and @var{data}
1367 is a string containing the raw bits of the bitmap, row by row. Each row
1368 occupies @math{(@var{width} + 7) / 8} consecutie bytes in the string
1369 (which should be a unibyte string for best results).
1370
1371 If the value is @code{nil}, that means use no stipple pattern.
1372
1373 Normally you do not need to set the stipple attribute, because it is
1374 used automatically to handle certain shades of gray.
1375
1376 @item :underline
1377 Whether or not characters should be underlined, and in what color. If
1378 the value is @code{t}, underlining uses the foreground color of the
1379 face. If the value is a string, underlining uses that color. The
1380 value @code{nil} means do not underline.
1381
1382 @item :overline
1383 Whether or not characters should be overlined, and in what color.
1384 The value is used like that of @code{:underline}.
1385
1386 @item :strike-through
1387 Whether or not characters should be strike-through, and in what
1388 color. The value is used like that of @code{:underline}.
1389
1390 @item :box
1391 Whether or not a box should be drawn around characters, its color, the
1392 width of the box lines, and 3D appearance.
1393 @end table
1394
1395 Here are the possible values of the @code{:box} attribute, and what
1396 they mean:
1397
1398 @table @asis
1399 @item @code{nil}
1400 Don't draw a box.
1401
1402 @item @code{t}
1403 Draw a box with lines of width 1, in the foreground color.
1404
1405 @item @var{color}
1406 Draw a box with lines of width 1, in color @var{color}.
1407
1408 @item @code{(:line-width @var{width} :color @var{color} :style @var{style})}
1409 This way you can explicitly specify all aspects of the box. The value
1410 @var{width} specifies the width of the lines to draw; it defaults to 1.
1411
1412 The value @var{color} specifies the color to draw with. The default is
1413 the foreground color of the face for simple boxes, and the background
1414 color of the face for 3D boxes.
1415
1416 The value @var{style} specifies whether to draw a 3D box. If it is
1417 @code{released-button}, the box looks like a 3D button that is not being
1418 pressed. If it is @code{pressed-button}, the box looks like a 3D button
1419 that is being pressed. If it is @code{nil} or omitted, a plain 2D box
1420 is used.
1421 @end table
1422
1423 The attributes @code{:overline}, @code{:strike-through} and
1424 @code{:box} are new in Emacs 21. The attributes @code{:family},
1425 @code{:height}, @code{:width}, @code{:weight}, @code{:slant} are also
1426 new; previous versions used the following attributes, now semi-obsolete,
1427 to specify some of the same information:
1428
1429 @table @code
1430 @item :font
1431 This attribute specifies the font name.
1432
1433 @item :bold
1434 A non-@code{nil} value specifies a bold font.
1435
1436 @item :italic
1437 A non-@code{nil} value specifies an italic font.
1438 @end table
1439
1440 For compatibility, you can still set these ``attributes'' in Emacs 21,
1441 even though they are not real face attributes. Here is what that does:
1442
1443 @table @code
1444 @item :font
1445 You can specify an X font name as the ``value'' of this ``attribute'';
1446 that sets the @code{:family}, @code{:width}, @code{:height},
1447 @code{:weight}, and @code{:slant} attributes according to the font name.
1448
1449 If the value is a pattern with wildcards, the first font that matches
1450 the pattern is used to set these attributes.
1451
1452 @item :bold
1453 A non-@code{nil} makes the face bold; @code{nil} makes it normal.
1454 This actually works by setting the @code{:weight} attribute.
1455
1456 @item :italic
1457 A non-@code{nil} makes the face italic; @code{nil} makes it normal.
1458 This actually works by setting the @code{:slant} attribute.
1459 @end table
1460
1461 @defvar x-bitmap-file-path
1462 This variable specifies a list of directories for searching
1463 for bitmap files, for the @code{:stipple} attribute.
1464 @end defvar
1465
1466 @defun bitmap-spec-p object
1467 This returns @code{t} if @var{object} is a valid bitmap
1468 specification, suitable for use with @code{:stipple}.
1469 It returns @code{nil} otherwise.
1470 @end defun
1471
1472 @node Attribute Functions
1473 @subsection Face Attribute Functions
1474
1475 You can modify the attributes of an existing face with the following
1476 functions. If you specify @var{frame}, they affect just that frame;
1477 otherwise, they affect all frames as well as the defaults that apply to
1478 new frames.
1479
1480 @tindex set-face-attribute
1481 @defun set-face-attribute face frame &rest arguments
1482 This function sets one or more attributes of face @var{face}
1483 for frame @var{frame}. If @var{frame} is @code{nil}, it sets
1484 the attribute for all frames, and the defaults for new frames.
1485
1486 The extra arguments @var{arguments} specify the attributes to set, and
1487 the values for them. They should consist of alternating attribute names
1488 (such as @code{:family} or @code{:underline}) and corresponding values.
1489 Thus,
1490
1491 @example
1492 (set-face-attribute 'foo nil
1493 :width :extended
1494 :weight :bold
1495 :underline "red")
1496 @end example
1497
1498 @noindent
1499 sets the attributes @code{:width}, @code{:weight} and @code{:underline}
1500 to the corresponding values.
1501 @end defun
1502
1503 @tindex face-attribute
1504 @defun face-attribute face attribute &optional frame
1505 This returns the value of the @var{attribute} attribute of face
1506 @var{face} on @var{frame}. If @var{frame} is @code{nil},
1507 that means the selected frame.
1508
1509 If @var{frame} is @code{t}, the value is the default for
1510 @var{face} for new frames.
1511
1512 For example,
1513
1514 @example
1515 (face-attribute 'bold :weight)
1516 @result{} bold
1517 @end example
1518 @end defun
1519
1520 The functions above did not exist before Emacs 21. For compatibility
1521 with older Emacs versions, you can use the following functions to set
1522 and examine the face attributes which existed in those versions.
1523
1524 @defun set-face-foreground face color &optional frame
1525 @defunx set-face-background face color &optional frame
1526 These functions set the foreground (or background, respectively) color
1527 of face @var{face} to @var{color}. The argument @var{color} should be a
1528 string, the name of a color.
1529
1530 Certain shades of gray are implemented by stipple patterns on
1531 black-and-white screens.
1532 @end defun
1533
1534 @defun set-face-stipple face pattern &optional frame
1535 This function sets the background stipple pattern of face @var{face} to
1536 @var{pattern}. The argument @var{pattern} should be the name of a
1537 stipple pattern defined by the X server, or @code{nil} meaning don't use
1538 stipple.
1539
1540 Normally there is no need to pay attention to stipple patterns, because
1541 they are used automatically to handle certain shades of gray.
1542 @end defun
1543
1544 @defun set-face-font face font &optional frame
1545 This function sets the font of face @var{face}.
1546
1547 In Emacs 21, this actually sets the attributes @code{:family},
1548 @code{:width}, @code{:height}, @code{:weight}, and @code{:slant}
1549 according to the font name @var{font}.
1550
1551 In Emacs 20, this sets the font attribute. Once you set the font
1552 explicitly, the bold and italic attributes cease to have any effect,
1553 because the precise font that you specified is used.
1554 @end defun
1555
1556 @defun set-face-bold-p face bold-p &optional frame
1557 @tindex set-face-bold-p
1558 This function specifies whether @var{face} should be bold. If
1559 @var{bold-p} is non-@code{nil}, that means yes; @code{nil} means no.
1560
1561 In Emacs 21, this sets the @code{:weight} attribute.
1562 In Emacs 20, it sets the @code{:bold} attribute.
1563 @end defun
1564
1565 @defun set-face-italic-p face italic-p &optional frame
1566 @tindex set-face-italic-p
1567 This function specifies whether @var{face} should be italic. If
1568 @var{italic-p} is non-@code{nil}, that means yes; @code{nil} means no.
1569
1570 In Emacs 21, this sets the @code{:slant} attribute.
1571 In Emacs 20, it sets the @code{:italic} attribute.
1572 @end defun
1573
1574 @defun set-face-underline-p face underline-p &optional frame
1575 This function sets the underline attribute of face @var{face}.
1576 Non-@code{nil} means do underline; @code{nil} means don't.
1577 @end defun
1578
1579 @defun invert-face face &optional frame
1580 This function inverts the @code{:inverse-video} attribute of face
1581 @var{face}. If the attribute is @code{nil}, this function sets it to
1582 @code{t}, and vice versa.
1583 @end defun
1584
1585 These functions examine the attributes of a face. If you don't
1586 specify @var{frame}, they refer to the default data for new frames.
1587 They return the symbol @code{unspecified} if the face doesn't define any
1588 value for that attribute.
1589
1590 @defun face-foreground face &optional frame
1591 @defunx face-background face &optional frame
1592 These functions return the foreground color (or background color,
1593 respectively) of face @var{face}, as a string.
1594 @end defun
1595
1596 @defun face-stipple face &optional frame
1597 This function returns the name of the background stipple pattern of face
1598 @var{face}, or @code{nil} if it doesn't have one.
1599 @end defun
1600
1601 @defun face-font face &optional frame
1602 This function returns the name of the font of face @var{face}.
1603 @end defun
1604
1605 @defun face-bold-p face &optional frame
1606 @tindex face-bold-p
1607 This function returns @code{t} if @var{face} is bold---that is, if it is
1608 bolder than normal. It returns @code{nil} otherwise.
1609 @end defun
1610
1611 @defun face-italic-p face &optional frame
1612 @tindex face-italic-p
1613 This function returns @code{t} if @var{face} is italic or oblique,
1614 @code{nil} otherwise.
1615 @end defun
1616
1617 @defun face-underline-p face &optional frame
1618 This function returns the @code{:underline} attribute of face @var{face}.
1619 @end defun
1620
1621 @defun face-inverse-video-p face &optional frame
1622 This function returns the @code{:inverse-video} attribute of face @var{face}.
1623 @end defun
1624
1625 @node Merging Faces
1626 @subsection Merging Faces for Display
1627
1628 Here are the ways to specify which faces to use for display of text:
1629
1630 @itemize @bullet
1631 @item
1632 With defaults. The @code{default} face is used as the ultimate
1633 default for all text. (In Emacs 19 and 20, the @code{default}
1634 face is used only when no other face is specified.)
1635
1636 For a mode line or header line, the face @code{modeline} or
1637 @code{header-line} is used just before @code{default}.
1638
1639 @item
1640 With text properties. A character can have a @code{face} property; if
1641 so, the faces and face attributes specified there apply. @xref{Special
1642 Properties}.
1643
1644 If the character has a @code{mouse-face} property, that is used instead
1645 of the @code{face} property when the mouse is ``near enough'' to the
1646 character.
1647
1648 @item
1649 With overlays. An overlay can have @code{face} and @code{mouse-face}
1650 properties too; they apply to all the text covered by the overlay.
1651
1652 @item
1653 With a region that is active. In Transient Mark mode, the region is
1654 highlighted with the face @code{region} (@pxref{Standard Faces}).
1655
1656 @item
1657 With special glyphs. Each glyph can specify a particular face
1658 number. @xref{Glyphs}.
1659 @end itemize
1660
1661 If these various sources together specify more than one face for a
1662 particular character, Emacs merges the attributes of the various faces
1663 specified. The attributes of the faces of special glyphs come first;
1664 then comes the face for region highlighting, if appropriate;
1665 then come attributes of faces from overlays, followed by those from text
1666 properties, and last the default face.
1667
1668 When multiple overlays cover one character, an overlay with higher
1669 priority overrides those with lower priority. @xref{Overlays}.
1670
1671 In Emacs 20, if an attribute such as the font or a color is not
1672 specified in any of the above ways, the frame's own font or color is
1673 used. In newer Emacs versions, this cannot happen, because the
1674 @code{default} face specifies all attributes---in fact, the frame's own
1675 font and colors are synonymous with those of the default face.
1676
1677 @node Font Selection
1678 @subsection Font Selection
1679
1680 @dfn{Selecting a font} means mapping the specified face attributes for
1681 a character to a font that is available on a particular display. The
1682 face attributes, as determined by face merging, specify most of the
1683 font choice, but not all. Part of the choice depends on what character
1684 it is.
1685
1686 For multibyte characters, typically each font covers only one
1687 character set. So each character set (@pxref{Character Sets}) specifies
1688 a registry and encoding to use, with the character set's
1689 @code{x-charset-registry} property. Its value is a string containing
1690 the registry and the encoding, with a dash between them:
1691
1692 @example
1693 (plist-get (charset-plist 'latin-iso8859-1)
1694 'x-charset-registry)
1695 @result{} "ISO8859-1"
1696 @end example
1697
1698 Unibyte text does not have character sets, so displaying a unibyte
1699 character takes the registry and encoding from the variable
1700 @code{face-default-registry}.
1701
1702 @defvar face-default-registry
1703 This variable specifies which registry and encoding to use in choosing
1704 fonts for unibyte characters. The value is initialized at Emacs startup
1705 time from the font the user specified for Emacs.
1706 @end defvar
1707
1708 If the face specifies a fontset name, that fontset determines a
1709 pattern for fonts of the given charset. If the face specifies a font
1710 family, a font pattern is constructed.
1711
1712 Emacs tries to find an available font for the given face attributes
1713 and character's registry and encoding. If there is a font that matches
1714 exactly, it is used, of course. The hard case is when no available font
1715 exactly fits the specification. Then Emacs looks for one that is
1716 ``close''---one attribute at a time. You can specify the order
1717 to consider the attributes.
1718
1719 @defvar face-font-selection-order
1720 @tindex face-font-selection-order
1721 This variable specifies the order of importance of the face attributes
1722 @code{:width}, @code{:height}, @code{:weight}, and @code{:slant}. The
1723 value should be a list containing those four symbols, in order of
1724 decreasing importance.
1725
1726 Font selection first finds the best available matches for the first
1727 attribute listed; then, among the fonts which are best in that way, it
1728 searches for the best matches in the second attribute, and so on.
1729
1730 The attributes @code{:weight} and @code{:width} have symbolic values in
1731 a range centered around @code{normal}. Matches that are more extreme
1732 (farther from @code{normal}) are somewhat preferred to matches that are
1733 less extreme (closer to @code{normal}); this is designed to ensure that
1734 non-normal faces contrast with normal ones, whenever possible.
1735
1736 The default is @code{(:width :height :weight :slant)}, which means first
1737 find the fonts closest to the specified @code{:width}, then---among the
1738 fonts with that width---find a best match for the specified font height,
1739 and so on.
1740
1741 One example of a case where this variable makes a difference is when the
1742 default font has no italic equivalent. With the default ordering, the
1743 @code{italic} face will use a non-italic font that is similar to the
1744 default one. But if you put @code{:slant} before @code{:height}, the
1745 @code{italic} face will use an italic font, even if its height is not
1746 quite right.
1747 @end defvar
1748
1749 @defvar face-alternative-font-family-alist
1750 @tindex face-alternative-font-family-alist
1751 This variable lets you specify alternative font families to try, if a
1752 given family is specified and doesn't exist. Each element should have
1753 this form:
1754
1755 @example
1756 (@var{family} @var{alternate-families}@dots{})
1757 @end example
1758
1759 If @var{family} is specified but not available, Emacs will try the other
1760 families given in @var{alternate-families}, one by one, until it finds a
1761 family that does exist.
1762 @end defvar
1763
1764 Emacs can make use of scalable fonts, but by default it does not use
1765 them, since the use of too many or too big scalable fonts can crash
1766 XFree86 servers.
1767
1768 @defvar scalable-fonts-allowed
1769 @tindex scalable-fonts-allowed
1770 This variable controls which scalable fonts to use. A value of
1771 @code{nil}, the default, means do not use scalable fonts. @code{t}
1772 means to use any scalable font that seems appropriate for the text.
1773
1774 Otherwise, the value must be a list of regular expressions. Then a
1775 scalable font is enabled for use if its name matches any regular
1776 expression in the list. For example,
1777
1778 @example
1779 (setq scalable-fonts-allowed '("muleindian-2$"))
1780 @end example
1781
1782 @noindent
1783 allows the use of scalable fonts with registry @code{muleindian-2}.
1784 @end example
1785 @end defvar
1786
1787 @defun clear-face-cache &optional unload-p
1788 @tindex clear-face-cache
1789 This function clears the face cache for all frames.
1790 If @var{unload-p} is non-@code{nil}, that means to unload
1791 all unused fonts as well.
1792 @end defun
1793
1794 @node Face Functions
1795 @subsection Functions for Working with Faces
1796
1797 Here are additional functions for creating and working with faces.
1798
1799 @defun make-face name
1800 This function defines a new face named @var{name}, initially with all
1801 attributes @code{nil}. It does nothing if there is already a face named
1802 @var{name}.
1803 @end defun
1804
1805 @defun face-list
1806 This function returns a list of all defined face names.
1807 @end defun
1808
1809 @defun copy-face old-face new-name &optional frame new-frame
1810 This function defines the face @var{new-name} as a copy of the existing
1811 face named @var{old-face}. It creates the face @var{new-name} if that
1812 doesn't already exist.
1813
1814 If the optional argument @var{frame} is given, this function applies
1815 only to that frame. Otherwise it applies to each frame individually,
1816 copying attributes from @var{old-face} in each frame to @var{new-face}
1817 in the same frame.
1818
1819 If the optional argument @var{new-frame} is given, then @code{copy-face}
1820 copies the attributes of @var{old-face} in @var{frame} to @var{new-name}
1821 in @var{new-frame}.
1822 @end defun
1823
1824 @defun face-id face
1825 This function returns the face number of face @var{face}.
1826 @end defun
1827
1828 @defun face-documentation face
1829 @tindex face-documentation
1830 This function returns the documentation string of face @var{face}, or
1831 @code{nil} if none was specified for it.
1832 @end defun
1833
1834 @defun face-equal face1 face2 &optional frame
1835 This returns @code{t} if the faces @var{face1} and @var{face2} have the
1836 same attributes for display.
1837 @end defun
1838
1839 @defun face-differs-from-default-p face &optional frame
1840 This returns @code{t} if the face @var{face} displays differently from
1841 the default face. A face is considered to be ``the same'' as the
1842 default face if each attribute is either the same as that of the default
1843 face, or unspecified (meaning to inherit from the default).
1844 @end defun
1845
1846 @node Auto Faces
1847 @subsection Automatic Face Assignment
1848 @cindex automatic face assignment
1849 @cindex faces, automatic choice
1850
1851 @cindex Font-Lock mode
1852 Starting with Emacs 21, a hook is available for automatically
1853 assigning faces to text in the buffer. This hook is used for part of
1854 the implementation of Font-Lock mode.
1855
1856 @tindex fontification-functions
1857 @defvar fontification-functions
1858 This variable holds a list of functions that are called by Emacs
1859 redisplay as needed to assign faces automatically to text in the buffer.
1860
1861 The functions are called in the order listed, with one argument, a
1862 buffer position @var{pos}. Each function should attempt to assign faces
1863 to the text in the current buffer starting at @var{pos}.
1864
1865 Each function should record the faces they assign by setting the
1866 @code{face} property. It should also add a non-@code{nil}
1867 @code{fontified} property for all the text it has assigned faces to.
1868 That property tells redisplay that faces have been assigned to that text
1869 already.
1870
1871 It is probably a good idea for each function to do nothing if the
1872 character after @var{pos} already has a non-@code{nil} @code{fontified}
1873 property, but this is not required. If one function overrides the
1874 assignments made by a previous one, the properties as they are
1875 after the last function finishes are the ones that really matter.
1876
1877 For efficiency, we recommend writing these functions so that they
1878 usually assign faces to around 400 to 600 characters at each call.
1879 @end defvar
1880
1881 @node Font Lookup
1882 @subsection Looking Up Fonts
1883
1884 @defun x-list-fonts pattern &optional face frame maximum
1885 This function returns a list of available font names that match
1886 @var{pattern}. If the optional arguments @var{face} and @var{frame} are
1887 specified, then the list is limited to fonts that are the same size as
1888 @var{face} currently is on @var{frame}.
1889
1890 The argument @var{pattern} should be a string, perhaps with wildcard
1891 characters: the @samp{*} character matches any substring, and the
1892 @samp{?} character matches any single character. Pattern matching
1893 of font names ignores case.
1894
1895 If you specify @var{face} and @var{frame}, @var{face} should be a face name
1896 (a symbol) and @var{frame} should be a frame.
1897
1898 The optional argument @var{maximum} sets a limit on how many fonts to
1899 return. If this is non-@code{nil}, then the return value is truncated
1900 after the first @var{maximum} matching fonts. Specifying a small value
1901 for @var{maximum} can make this function much faster, in cases where
1902 many fonts match the pattern.
1903 @end defun
1904
1905 These additional functions are available starting in Emacs 21.
1906
1907 @defun x-family-fonts &optional family frame
1908 @tindex x-family-fonts
1909 This function returns a list describing the available fonts for family
1910 @var{family} on @var{frame}. If @var{family} is omitted or @code{nil},
1911 this list applies to all families, and therefore, it contains all
1912 available fonts. Otherwise, @var{family} must be a string; it may
1913 contain the wildcards @samp{?} and @samp{*}.
1914
1915 The list describes the display that @var{frame} is on; if @var{frame} is
1916 omitted or @code{nil}, it applies to the selected frame's display.
1917
1918 The list contains a vector of the following form for each font:
1919
1920 @example
1921 [@var{family} @var{width} @var{point-size} @var{weight} @var{slant}
1922 @var{fixed-p} @var{full} @var{registry-and-encoding}]
1923 @end example
1924
1925 The first five elements correspond to face attributes; if you
1926 specify these attributes for a face, it will use this font.
1927
1928 The last three elements give additional information about the font.
1929 @var{fixed-p} is non-nil if the font is fixed-pitch. @var{full} is the
1930 full name of the font, and @var{registry-and-encoding} is a string
1931 giving the registry and encoding of the font.
1932
1933 The result list is sorted according to the current face font sort order.
1934 @end defun
1935
1936 @defun x-font-family-list &optional frame
1937 @tindex x-font-family-list
1938 This function returns a list of the font families available for
1939 @var{frame}'s display. If @var{frame} is omitted or @code{nil}, it
1940 describes the selected frame's display.
1941
1942 The value is a list of elements of this form:
1943
1944 @example
1945 (@var{family} . @var{fixed-p})
1946 @end example
1947
1948 @noindent
1949 Here @var{family} is a font family, and @var{fixed-p} is
1950 non-@code{nil} if fonts of that family are fixed-pitch.
1951 @end defun
1952
1953 @defvar font-list-limit
1954 @tindex font-list-limit
1955 This variable specifies maximum number of fonts to consider in font
1956 matching. The function @code{x-family-fonts} will not return more than
1957 that many fonts, and font selection will consider only that many fonts
1958 when searching a matching font for face attributes. The default is
1959 currently 100.
1960 @end defvar
1961
1962 @node Fontsets
1963 @subsection Fontsets
1964
1965 A @dfn{fontset} is a list of fonts, each assigned to a range of
1966 character codes. An individual font cannot display the whole range of
1967 characters that Emacs supports, but a fontset can. Fontsets have names,
1968 just as fonts do, and you can use a fontset name in place of a font name
1969 when you specify the ``font'' for a frame or a face. Here is
1970 information about defining a fontset under Lisp program control.
1971
1972 @defun create-fontset-from-fontset-spec fontset-spec &optional style-variant-p noerror
1973 This function defines a new fontset according to the specification
1974 string @var{fontset-spec}. The string should have this format:
1975
1976 @smallexample
1977 @var{fontpattern}, @r{[}@var{charsetname}:@var{fontname}@r{]@dots{}}
1978 @end smallexample
1979
1980 @noindent
1981 Whitespace characters before and after the commas are ignored.
1982
1983 The first part of the string, @var{fontpattern}, should have the form of
1984 a standard X font name, except that the last two fields should be
1985 @samp{fontset-@var{alias}}.
1986
1987 The new fontset has two names, one long and one short. The long name is
1988 @var{fontpattern} in its entirety. The short name is
1989 @samp{fontset-@var{alias}}. You can refer to the fontset by either
1990 name. If a fontset with the same name already exists, an error is
1991 signaled, unless @var{noerror} is non-@code{nil}, in which case this
1992 function does nothing.
1993
1994 If optional argument @var{style-variant-p} is non-@code{nil}, that says
1995 to create bold, italic and bold-italic variants of the fontset as well.
1996 These variant fontsets do not have a short name, only a long one, which
1997 is made by altering @var{fontpattern} to indicate the bold or italic
1998 status.
1999
2000 The specification string also says which fonts to use in the fontset.
2001 See below for the details.
2002 @end defun
2003
2004 The construct @samp{@var{charset}:@var{font}} specifies which font to
2005 use (in this fontset) for one particular character set. Here,
2006 @var{charset} is the name of a character set, and @var{font} is the font
2007 to use for that character set. You can use this construct any number of
2008 times in the specification string.
2009
2010 For the remaining character sets, those that you don't specify
2011 explicitly, Emacs chooses a font based on @var{fontpattern}: it replaces
2012 @samp{fontset-@var{alias}} with a value that names one character set.
2013 For the @sc{ascii} character set, @samp{fontset-@var{alias}} is replaced
2014 with @samp{ISO8859-1}.
2015
2016 In addition, when several consecutive fields are wildcards, Emacs
2017 collapses them into a single wildcard. This is to prevent use of
2018 auto-scaled fonts. Fonts made by scaling larger fonts are not usable
2019 for editing, and scaling a smaller font is not useful because it is
2020 better to use the smaller font in its own size, which Emacs does.
2021
2022 Thus if @var{fontpattern} is this,
2023
2024 @example
2025 -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24
2026 @end example
2027
2028 @noindent
2029 the font specification for ASCII characters would be this:
2030
2031 @example
2032 -*-fixed-medium-r-normal-*-24-*-ISO8859-1
2033 @end example
2034
2035 @noindent
2036 and the font specification for Chinese GB2312 characters would be this:
2037
2038 @example
2039 -*-fixed-medium-r-normal-*-24-*-gb2312*-*
2040 @end example
2041
2042 You may not have any Chinese font matching the above font
2043 specification. Most X distributions include only Chinese fonts that
2044 have @samp{song ti} or @samp{fangsong ti} in the @var{family} field. In
2045 such a case, @samp{Fontset-@var{n}} can be specified as below:
2046
2047 @smallexample
2048 Emacs.Fontset-0: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24,\
2049 chinese-gb2312:-*-*-medium-r-normal-*-24-*-gb2312*-*
2050 @end smallexample
2051
2052 @noindent
2053 Then, the font specifications for all but Chinese GB2312 characters have
2054 @samp{fixed} in the @var{family} field, and the font specification for
2055 Chinese GB2312 characters has a wild card @samp{*} in the @var{family}
2056 field.
2057
2058 @node Display Property
2059 @section The @code{display} Property
2060 @cindex display specification
2061 @kindex display @r{(text property)}
2062
2063 The @code{display} text property (or overlay property) is used to
2064 insert images into text, and also control other aspects of how text
2065 displays. These features are available starting in Emacs 21. The value
2066 of the @code{display} property should be a display specification, or a
2067 list or vector containing several display specifications. The rest of
2068 this section describes several kinds of display specifications and what
2069 they mean.
2070
2071 @menu
2072 * Specified Space:: Displaying one space with a specified width.
2073 * Other Display Specs:: Displaying an image; magnifying text; moving it
2074 up or down on the page; adjusting the width
2075 of spaces within text.
2076 * Display Margins:: Displaying text or images to the side of the main text.
2077 * Conditional Display:: Making any of the above features conditional
2078 depending on some Lisp expression.
2079 @end menu
2080
2081 @node Specified Space
2082 @subsection Specified Spaces
2083 @cindex spaces, specified height or width
2084 @cindex specified spaces
2085 @cindex variable-width spaces
2086
2087 To display a space of specified width and/or height, use a display
2088 specification of the form @code{(space . @var{props})}, where
2089 @var{props} is a property list (a list of alternating properties and
2090 values). You can put this property on one or more consecutive
2091 characters; a space of the specified height and width is displayed in
2092 place of @emph{all} of those characters. These are the properties you
2093 can use to specify the weight of the space:
2094
2095 @table @code
2096 @item :width @var{width}
2097 Specifies that the space width should be @var{width} times the normal
2098 character width. @var{width} can be an integer or floating point
2099 number.
2100
2101 @item :relative-width @var{factor}
2102 Specifies that the width of the stretch should be computed from the
2103 first character in the group of consecutive characters that have the
2104 same @code{display} property. The space width is the width of that
2105 character, multiplied by @var{factor}.
2106
2107 @item :align-to @var{hpos}
2108 Specifies that the space should be wide enough to reach @var{hpos}. The
2109 value @var{hpos} is measured in units of the normal character width. It
2110 may be an interer or a floating point number.
2111 @end table
2112
2113 Exactly one of the above properties should be used. You can also
2114 specify the height of the space, with other properties:
2115
2116 @table @code
2117 @item :height @var{height}
2118 Specifies the height of the space, as @var{height},
2119 measured in terms of the normal line height.
2120
2121 @item :relative-height @var{factor}
2122 Specifies the height of the space, multiplying the ordinary height
2123 of the text having this display specification by @var{factor}.
2124
2125 @item :ascent @var{ascent}
2126 Specifies that @var{ascent} percent of the height of the space should be
2127 considered as the ascent of the space---that is, the part above the
2128 baseline. The value of @var{ascent} must be a non-negative number no
2129 greater than 100.
2130 @end table
2131
2132 You should not use both @code{:height} and @code{:relative-height}
2133 together.
2134
2135 @node Other Display Specs
2136 @subsection Other Display Specifications
2137
2138 @table @code
2139 @item (image . @var{image-props})
2140 This is in fact an image descriptor (@pxref{Images}). When used as a
2141 display specification, it means to display the image instead of the text
2142 that has the display specification.
2143
2144 @item (space-width @var{factor})
2145 This display specification affects all the space characters within the
2146 text that has the specification. It displays all of these spaces
2147 @var{factor} times as wide as normal. The element @var{factor} should
2148 be an integer or float. Characters other than spaces are not affected
2149 at all; in particular, this has no effect on tab characters.
2150
2151 @item (height @var{height})
2152 This display specification makes the text taller or shorter.
2153 Here are the possibilities for @var{height}:
2154
2155 @table @asis
2156 @item @code{(+ @var{n})}
2157 This means to use a font that is @var{n} steps larger. A ``step'' is
2158 defined by the set of available fonts---specifically, those that match
2159 what was otherwise specified for this text, in all attributes except
2160 height. Each size for which a suitable font is available counts as
2161 another step. @var{n} should be an integer.
2162
2163 @item @code{(- @var{n})}
2164 This means to use a font that is @var{n} steps smaller.
2165
2166 @item a number, @var{factor}
2167 A number, @var{factor}, means to use a font that is @var{factor} times
2168 as tall as the default font.
2169
2170 @item a symbol, @var{function}
2171 A symbol is a function to compute the height. It is called with the
2172 current height as argument, and should return the new height to use.
2173
2174 @item anything else, @var{form}
2175 If the @var{height} value doesn't fit the previous possibilities, it is
2176 a form. Emacs evaluates it to get the new height, with the symbol
2177 @code{height} bound to the current specified font height.
2178 @end table
2179
2180 @item (raise @var{factor})
2181 This kind of display specification raises or lowers the text
2182 it applies to, relative to the baseline of the line.
2183
2184 @var{factor} must be a number, which is interpreted as a multiple of the
2185 height of the affected text. If it is positive, that means to display
2186 the characters raised. If it is negative, that means to display them
2187 lower down.
2188
2189 If the text also has a @code{height} display specification, that does
2190 not affect the amount of raising or lowering, which is based on the
2191 faces used for the text.
2192 @end table
2193
2194 @node Display Margins
2195 @subsection Displaying in the Margins
2196 @cindex display margins
2197 @cindex margins, display
2198
2199 A buffer can have blank areas called @dfn{display margins} on the left
2200 and on the right. Ordinary text never appears in these areas, but you
2201 can put things into the display margins using the @code{display}
2202 property.
2203
2204 To put text in the left or right display margin of the window, use a
2205 display specification of the form @code{(margin right-margin)} or
2206 @code{(margin left-margin)} on it. To put an image in a display margin,
2207 use that display specification along with the display specification for
2208 the image.
2209
2210 Before the display margins can display anything, you must give
2211 them a nonzero width. The usual way to do that is to set these
2212 variables:
2213
2214 @defvar left-margin-width
2215 @tindex left-margin-width
2216 This variable specifies the width of the left margin.
2217 It is buffer-local in all buffers.
2218 @end defvar
2219
2220 @defvar right-margin-width
2221 @tindex right-margin-width
2222 This variable specifies the width of the right margin.
2223 It is buffer-local in all buffers.
2224 @end defvar
2225
2226 Setting these variables does not immediately affect the window. These
2227 variables are checked when a new buffer is displayed in the window.
2228 Thus, you can make changes take effect by calling
2229 @code{set-window-buffer}.
2230
2231 You can also set the margin widths immediately.
2232
2233 @defun set-window-margins window left right
2234 @tindex set-window-margins
2235 This function specifies the margin widths for window @var{window}.
2236 The argument @var{left} controls the left margin and
2237 @var{right} controls the right margin.
2238 @end defun
2239
2240 @defun window-margins &optional window
2241 @tindex window-margins
2242 This function returns the left and right margins of @var{window}
2243 as a cons cell of the form @code{(@var{left} . @var{right})}.
2244 If @var{window} is @code{nil}, the selected window is used.
2245 @end defun
2246
2247 @node Conditional Display
2248 @subsection Conditional Display Specifications
2249 @cindex conditional display specifications
2250
2251 You can make any display specification conditional. To do that,
2252 package it in another list of the form @code{(when @var{condition}
2253 @var{spec})}. Then the specification @var{spec} applies only when
2254 @var{condition} evaluates to a non-@code{nil} value. During the
2255 evaluation, point is temporarily set at the end position of the text
2256 having this conditional display specification.
2257
2258 @node Images
2259 @section Images
2260 @cindex images in buffers
2261
2262 To display an image in an Emacs buffer, you must first create an image
2263 descriptor, then use it as a display specifier in the @code{display}
2264 property of text that is displayed (@pxref{Display Property}). Like the
2265 @code{display} property, this feature is available starting in Emacs 21.
2266
2267 Emacs can display a number of different image formats; some of them
2268 are supported only if particular support libraries are installed on your
2269 machine. The supported image formats include XBM, XPM (needing the
2270 libraries @code{libXpm} version 3.4k and @code{libz}), GIF (needing
2271 @code{libungif} 4.1.0), Postscript, PBM, JPEG (needing the
2272 @code{libjpeg} library version v6a), TIFF (needing @code{libtiff} v3.4),
2273 and PNG (needing @code{libpng} 1.0.2).
2274
2275 You specify one of these formats with an image type symbol. The image
2276 type symbols are @code{xbm}, @code{xpm}, @code{gif}, @code{postscript},
2277 @code{pbm}, @code{jpeg}, @code{tiff}, and @code{png}.
2278
2279 @defvar image-types
2280 This variable contains a list of those image type symbols that are
2281 supported in the current configuration.
2282 @end defvar
2283
2284 @menu
2285 * Image Descriptors:: How to specify an image for use in @code{:display}.
2286 * XBM Images:: Special features for XBM format.
2287 * XPM Images:: Special features for XPM format.
2288 * GIF Images:: Special features for GIF format.
2289 * Postscript Images:: Special features for Postscript format.
2290 * Other Image Types:: Various other formats are supported.
2291 * Defining Images:: Convenient ways to define an image for later use.
2292 * Showing Images:: Convenient ways to display an image once it is defined.
2293 * Image Cache:: Internal mechanisms of image display.
2294 @end menu
2295
2296 @node Image Descriptors
2297 @subsection Image Descriptors
2298 @cindex image descriptor
2299
2300 An image description is a list of the form @code{(image
2301 . @var{props})}, where @var{props} is a property list containing
2302 alternating keyword symbols (symbols whose names start with a colon) and
2303 their values. You can use any Lisp object as a property, but the only
2304 properties that have any special meaning are certain symbols, all of
2305 them keywords.
2306
2307 Every image descriptor must contain the property @code{:type
2308 @var{type}} to specify the format of the image. The value of @var{type}
2309 should be an image type symbol; for example, @code{xpm} for an image in
2310 XPM format.
2311
2312 Here is a list of other properties that are meaningful for all image
2313 types:
2314
2315 @table @code
2316 @item :ascent @var{ascent}
2317 The @code{:ascent} property specifies the percentage of the image's
2318 height to use for its ascent---that is, the part above the baseline. The
2319 value, @var{ascent}, must be a number in the range 0 to 100. If this
2320 property is omitted, it defaults to 50.
2321
2322 @item :margin @var{margin}
2323 The @code{:margin} property specifies how many pixels to add as an extra
2324 margin around the image. The value, @var{margin}, must be a
2325 non-negative number; if it is not specified, the default is zero.
2326
2327 @item :relief @var{relief}
2328 The @code{:relief} property, if non-@code{nil}, adds a shadow rectangle
2329 around the image. The value, @var{relief}, specifies the width of the
2330 shadow lines, in pixels. If @var{relief} is negative, shadows are drawn
2331 so that the image appears as a pressed button; otherwise, it appears as
2332 an unpressed button.
2333
2334 @item :algorithm @var{algorithm}
2335 The @code{:algorithm} property, if non-@code{nil}, specifies a
2336 conversion algorithm that should be applied to the image before it is
2337 displayed; the value, @var{algorithm}, specifies which algorithm.
2338
2339 Currently, the only meaningful value for @var{algorithm} (aside from
2340 @code{nil}) is @code{laplace}; this applies the Laplace edge detection
2341 algorithm, which blurs out small differences in color while highlighting
2342 larger differences. People sometimes consider this useful for
2343 displaying the image for a ``disabled'' button.
2344
2345 @item :heuristic-mask @var{transparent-color}
2346 The @code{:heuristic-mask} property, if non-@code{nil}, specifies that a
2347 certain color in the image should be transparent. Each pixel where this
2348 color appears will actually allow the frame's background to show
2349 through.
2350
2351 If @var{transparent-color} is @code{t}, then determine the transparent
2352 color by looking at the four corners of the image. This uses the color
2353 that occurs most frequently near the corners as the transparent color.
2354
2355 Otherwise, @var{heuristic-mask} should specify the transparent color
2356 directly, as a list of three integers in the form @code{(@var{red}
2357 @var{green} @var{blue})}.
2358
2359 @item :file @var{file}
2360 The @code{:file} property specifies to load the image from file
2361 @var{file}. If @var{file} is not an absolute file name, it is expanded
2362 in @code{data-directory}.
2363
2364 @item :data @var{data}
2365 The @code{:data} property specifies the actual contents of the image.
2366 Each image must use either @code{:data} or @code{:file}, but not both.
2367 However, only certain image types support @code{:data}; for other types,
2368 you must use @code{:file}.
2369
2370 The formats that support @code{:data} include XBM and XPM.
2371 Before using @code{:data}, see the section describing the specific
2372 format you wish to use for further information.
2373 @end table
2374
2375 @node XBM Images
2376 @subsection XBM Images
2377 @cindex XBM
2378
2379 To use XBM format, specify @code{xbm} as the image type. This image
2380 format doesn't require an external library, so images of this type are
2381 always supported.
2382
2383 Additional image properties supported for the @code{xbm} image type are:
2384
2385 @table @code
2386 @item :foreground @var{foreground}
2387 The value, @var{foreground}, should be a string specifying the image
2388 foreground color. This color is used for each pixel in the XBM that is
2389 1. The default is the frame's foreground color.
2390
2391 @item :background @var{background}
2392 The value, @var{background}, should be a string specifying the image
2393 background color. This color is used for each pixel in the XBM that is
2394 0. The default is the frame's background color.
2395 @end table
2396
2397 You can specify an XBM image using data within Emacs instead
2398 of an external file. To do this, don't use @code{:file}; instead,
2399 use the following three properties (all of them):
2400
2401 @table @code
2402 @item :width @var{width}
2403 The value, @var{width}, specifies the width the image in pixels.
2404
2405 @item :height @var{height}
2406 The value, @var{height}, specifies the height of the image in pixels.
2407
2408 @item :data @var{data}
2409 The value, @var{data}, is normally a string or a bool-vector. Either
2410 way, it must contain enough bits for the area of the image: at least
2411 @var{width} * @code{height}.
2412
2413 Alternatively, @var{data} can be a vector of strings or bool-vectors,
2414 each specifying one line of the image.
2415 @end table
2416
2417 @node XPM Images
2418 @subsection XPM Images
2419 @cindex XPM
2420
2421 To use XPM format, specify @code{xpm} as the image type. These
2422 additional image properties are meaningful with the @code{xpm} image
2423 type:
2424
2425 @table @code
2426 @item :color-symbols @var{symbols}
2427 The value, @var{symbols}, should be an alist whose elements have the
2428 form @code{(@var{name} . @var{color})}. In each element, @var{name} is
2429 the name of a color as it appears in the image file, and @var{color}
2430 specifies the actual color to use for displaying that name.
2431
2432 @item :data @var{data}
2433 XPM images can be displayed from data instead of files. In that case,
2434 use the @code{:data} property instead of the @code{:file} property.
2435
2436 The value @var{data} must be a string containing an XPM image. The
2437 contents of the string have same format as an external XPM file.
2438 @end table
2439
2440 @node GIF Images
2441 @subsection GIF Images
2442 @cindex GIF
2443
2444 For GIF images, specify image type @code{gif}. Because of the patents
2445 in the US covering the LZW algorithm, the continued use of GIF format is
2446 a problem for the whole Internet; to end this problem, it is a good idea
2447 for everyone, even outside the US, to stop using GIFS right away
2448 (@uref{http://www.burnallgifs.org/}). But if you still want to use
2449 them, Emacs can display them.
2450
2451 @table @code
2452 @item :index @var{index}
2453 You can use @code{:index} to specify one image from a GIF file that
2454 contains more than one image. This property specifies use of image
2455 number @var{index} from the file. An error is signaled if the GIF file
2456 doesn't contain an image with index @var{index}.
2457 @end table
2458
2459 @ignore
2460 This could be used to implement limited support for animated GIFs.
2461 For example, the following function displays a multi-image GIF file
2462 at point-min in the current buffer, switching between sub-images
2463 every 0.1 seconds.
2464
2465 (defun show-anim (file max)
2466 "Display multi-image GIF file FILE which contains MAX subimages."
2467 (display-anim (current-buffer) file 0 max t))
2468
2469 (defun display-anim (buffer file idx max first-time)
2470 (when (= idx max)
2471 (setq idx 0))
2472 (let ((img (create-image file nil :image idx)))
2473 (save-excursion
2474 (set-buffer buffer)
2475 (goto-char (point-min))
2476 (unless first-time (delete-char 1))
2477 (insert-image img))
2478 (run-with-timer 0.1 nil 'display-anim buffer file (1+ idx) max nil)))
2479 @end ignore
2480
2481 @node Postscript Images
2482 @subsection Postscript Images
2483 @cindex Postscript images
2484
2485 To use Postscript for an image, specify image type @code{postscript}.
2486 This works only if you have Ghostscript installed. You must always use
2487 these three properties:
2488
2489 @table @code
2490 @item :pt-width @var{width}
2491 The value, @var{width}, specifies the width of the image measured in
2492 points (1/72 inch). @var{width} must be an integer.
2493
2494 @item :pt-height @var{height}
2495 The value, @var{height}, specifies the height of the image in points
2496 (1/72 inch). @var{height} must be an integer.
2497
2498 @item :bounding-box @var{box}
2499 The value, @var{box}, must be a list or vector of four integers, which
2500 specifying the bounding box of the Postscript image, analogous to the
2501 @samp{BoundingBox} comment found in Postscript files.
2502
2503 @example
2504 %%BoundingBox: 22 171 567 738
2505 @end example
2506 @end table
2507
2508 @node Other Image Types
2509 @subsection Other Image Types
2510 @cindex PBM
2511
2512 For PBM images, specify image type @code{pbm}. Color, gray-scale and
2513 monochromatic images are supported.
2514
2515 For JPEG images, specify image type @code{jpeg}. There are no
2516 additional image properties defined.
2517
2518 For TIFF images, specify image type @code{tiff}.
2519
2520 For PNG images, specify image type @code{png}.
2521
2522 @node Defining Images
2523 @subsection Defining Images
2524
2525 The functions @code{create-image} and @code{defimage} provide
2526 convenient ways to create image descriptors.
2527
2528 @defun create-image file &optional type &rest props
2529 @tindex create-image
2530 This function creates and returns an image descriptor which uses the
2531 data in @var{file}.
2532
2533 The optional argument @var{type} is a symbol specifying the image type.
2534 If @var{type} is omitted or @code{nil}, @code{create-image} tries to
2535 determine the image type from the file's first few bytes, or else
2536 from the file's name.
2537
2538 The remaining arguments, @var{props}, specify additional image
2539 properties---for example,
2540
2541 @example
2542 (create-image "foo.xpm" 'xpm :heuristic-mask t)
2543 @end example
2544
2545 The function returns @code{nil} if images of this type are not
2546 supported. Otherwise it returns an image descriptor.
2547 @end defun
2548
2549 @defmac defimage variable doc &rest specs
2550 @tindex defimage
2551 This macro defines @var{variable} as an image name. The second argument,
2552 @var{doc}, is an optional documentation string. The remaining
2553 arguments, @var{specs}, specify alternative ways to display the image.
2554
2555 Each argument in @var{specs} has the form of a property list, and each
2556 one should specify at least the @code{:type} property and the
2557 @code{:file} property. Here is an example:
2558
2559 @example
2560 (defimage test-image
2561 '((:type xpm :file "~/test1.xpm")
2562 (:type xbm :file "~/test1.xbm")))
2563 @end example
2564
2565 @code{defimage} tests each argument, one by one, to see if it is
2566 usable---that is, if the type is supported and the file exists. The
2567 first usable argument is used to make an image descriptor which is
2568 stored in the variable @var{variable}.
2569
2570 If none of the alternatives will work, then @var{variable} is defined
2571 as @code{nil}.
2572 @end defmac
2573
2574 @node Showing Images
2575 @subsection Showing Images
2576
2577 You can use an image descriptor by setting up the @code{display}
2578 property yourself, but it is easier to use the functions in this
2579 section.
2580
2581 @defun insert-image image string &optional area
2582 This function inserts @var{image} in the current buffer at point. The
2583 value @var{image} should be an image descriptor; it could be a value
2584 returned by @code{create-image}, or the value of a symbol defined with
2585 @code{defimage}. The argument @var{string} specifies the text to put in
2586 the buffer to hold the image.
2587
2588 The argument @var{area} specifies whether to put the image in a margin.
2589 If it is @code{left-margin}, the image appears in the left margin;
2590 @code{right-margin} specifies the right margin. If @var{area} is
2591 @code{nil} or omitted, the image is displayed at point within the
2592 buffer's text.
2593
2594 Internally, this function inserts @var{string} in the buffer, and gives
2595 it a @code{display} property which specifies @var{image}. @xref{Display
2596 Property}.
2597 @end defun
2598
2599 @defun put-image image pos string &optional area
2600 This function puts image @var{image} in front of @var{pos} in the
2601 current buffer. The argument @var{pos} should be an integer or a
2602 marker. It specifies the buffer position where the image should appear.
2603 The argument @var{string} specifies the text that should hold the image.
2604
2605 The argument @var{image} must be an image descriptor, perhaps returned
2606 by @code{create-image} or stored by @code{defimage}.
2607
2608 The argument @var{area} specifies whether to put the image in a margin.
2609 If it is @code{left-margin}, the image appears in the left margin;
2610 @code{right-margin} specifies the right margin. If @var{area} is
2611 @code{nil} or omitted, the image is displayed at point within the
2612 buffer's text.
2613
2614 Internally, this function creates an overlay, and gives it a
2615 @code{before-string} property containing text that has a @code{display}
2616 property whose value is the image. (Whew!)
2617 @end defun
2618
2619 @defun remove-images start end &optional buffer
2620 This function removes images in @var{buffer} between positions
2621 @var{start} and @var{end}. If @var{buffer} is omitted or @code{nil},
2622 images are removed from the current buffer.
2623
2624 This remove only images that were put into @var{buffer} the way
2625 @code{put-image} does it, not images that were inserted with
2626 @code{insert-image} or in other ways.
2627 @end defun
2628
2629 @node Image Cache
2630 @subsection Image Cache
2631
2632 Emacs stores images in an image cache when it displays them, so it can
2633 display them again more efficiently. It removes an image from the cache
2634 when it hasn't been displayed for a specified period of time.
2635
2636 @defvar image-cache-eviction-delay
2637 @tindex image-cache-eviction-delay
2638 This variable specifies the number of seconds an image can remain in the
2639 cache without being displayed. When an image is not displayed for this
2640 length of time, Emacs removes it from the image cache.
2641
2642 If the value is @code{nil}, Emacs does not remove images from the cache
2643 except when you explicitly clear it. This mode can be useful for
2644 debugging.
2645 @end defvar
2646
2647 @defun clear-image-cache &optional frame
2648 @tindex clear-image-cache
2649 This function clears the image cache. If @var{frame} is non-@code{nil},
2650 only the cache for that frame is cleared. Otherwise all frames' caches
2651 are cleared.
2652 @end defun
2653 @node Blinking
2654 @section Blinking Parentheses
2655 @cindex parenthesis matching
2656 @cindex blinking
2657 @cindex balancing parentheses
2658 @cindex close parenthesis
2659
2660 This section describes the mechanism by which Emacs shows a matching
2661 open parenthesis when the user inserts a close parenthesis.
2662
2663 @defvar blink-paren-function
2664 The value of this variable should be a function (of no arguments) to
2665 be called whenever a character with close parenthesis syntax is inserted.
2666 The value of @code{blink-paren-function} may be @code{nil}, in which
2667 case nothing is done.
2668 @end defvar
2669
2670 @defopt blink-matching-paren
2671 If this variable is @code{nil}, then @code{blink-matching-open} does
2672 nothing.
2673 @end defopt
2674
2675 @defopt blink-matching-paren-distance
2676 This variable specifies the maximum distance to scan for a matching
2677 parenthesis before giving up.
2678 @end defopt
2679
2680 @defopt blink-matching-delay
2681 This variable specifies the number of seconds for the cursor to remain
2682 at the matching parenthesis. A fraction of a second often gives
2683 good results, but the default is 1, which works on all systems.
2684 @end defopt
2685
2686 @deffn Command blink-matching-open
2687 This function is the default value of @code{blink-paren-function}. It
2688 assumes that point follows a character with close parenthesis syntax and
2689 moves the cursor momentarily to the matching opening character. If that
2690 character is not already on the screen, it displays the character's
2691 context in the echo area. To avoid long delays, this function does not
2692 search farther than @code{blink-matching-paren-distance} characters.
2693
2694 Here is an example of calling this function explicitly.
2695
2696 @smallexample
2697 @group
2698 (defun interactive-blink-matching-open ()
2699 @c Do not break this line! -- rms.
2700 @c The first line of a doc string
2701 @c must stand alone.
2702 "Indicate momentarily the start of sexp before point."
2703 (interactive)
2704 @end group
2705 @group
2706 (let ((blink-matching-paren-distance
2707 (buffer-size))
2708 (blink-matching-paren t))
2709 (blink-matching-open)))
2710 @end group
2711 @end smallexample
2712 @end deffn
2713
2714 @node Inverse Video
2715 @section Inverse Video
2716 @cindex Inverse Video
2717
2718 @defopt inverse-video
2719 @cindex highlighting
2720 This variable controls whether Emacs uses inverse video for all text
2721 on the screen. Non-@code{nil} means yes, @code{nil} means no. The
2722 default is @code{nil}.
2723 @end defopt
2724
2725 @defopt mode-line-inverse-video
2726 This variable controls the use of inverse video for mode lines and menu
2727 bars. If it is non-@code{nil}, then these lines are displayed in
2728 inverse video. Otherwise, they lines are displayed normally, just like
2729 other text. The default is @code{t}.
2730
2731 For window frames, this feature actually applies the face named
2732 @code{mode-line}; that face is normally set up as the inverse of the
2733 default face, unless you change it.
2734 @end defopt
2735
2736 @node Usual Display
2737 @section Usual Display Conventions
2738
2739 The usual display conventions define how to display each character
2740 code. You can override these conventions by setting up a display table
2741 (@pxref{Display Tables}). Here are the usual display conventions:
2742
2743 @itemize @bullet
2744 @item
2745 Character codes 32 through 126 map to glyph codes 32 through 126.
2746 Normally this means they display as themselves.
2747
2748 @item
2749 Character code 9 is a horizontal tab. It displays as whitespace
2750 up to a position determined by @code{tab-width}.
2751
2752 @item
2753 Character code 10 is a newline.
2754
2755 @item
2756 All other codes in the range 0 through 31, and code 127, display in one
2757 of two ways according to the value of @code{ctl-arrow}. If it is
2758 non-@code{nil}, these codes map to sequences of two glyphs, where the
2759 first glyph is the @sc{ascii} code for @samp{^}. (A display table can
2760 specify a glyph to use instead of @samp{^}.) Otherwise, these codes map
2761 just like the codes in the range 128 to 255.
2762
2763 On MS-DOS terminals, Emacs arranges by default for the character code
2764 127 to be mapped to the glyph code 127, which normally displays as an
2765 empty polygon. This glyph is used to display non-@sc{ascii} characters
2766 that the MS-DOS terminal doesn't support. @xref{MS-DOS and MULE,,,
2767 emacs, The GNU Emacs Manual}.
2768
2769 @item
2770 Character codes 128 through 255 map to sequences of four glyphs, where
2771 the first glyph is the @sc{ascii} code for @samp{\}, and the others are
2772 digit characters representing the character code in octal. (A display
2773 table can specify a glyph to use instead of @samp{\}.)
2774
2775 @item
2776 Multibyte character codes above 256 are displayed as themselves, or as a
2777 question mark or empty box if the terminal cannot display that
2778 character.
2779 @end itemize
2780
2781 The usual display conventions apply even when there is a display
2782 table, for any character whose entry in the active display table is
2783 @code{nil}. Thus, when you set up a display table, you need only
2784 specify the characters for which you want special behavior.
2785
2786 These display rules apply to carriage return (character code 13), when
2787 it appears in the buffer. But that character may not appear in the
2788 buffer where you expect it, if it was eliminated as part of end-of-line
2789 conversion (@pxref{Coding System Basics}).
2790
2791 These variables affect the way certain characters are displayed on the
2792 screen. Since they change the number of columns the characters occupy,
2793 they also affect the indentation functions. These variables also affect
2794 how the mode line is displayed; if you want to force redisplay of the
2795 mode line using the new values, call the function
2796 @code{force-mode-line-update} (@pxref{Mode Line Format}).
2797
2798 @defopt ctl-arrow
2799 @cindex control characters in display
2800 This buffer-local variable controls how control characters are
2801 displayed. If it is non-@code{nil}, they are displayed as a caret
2802 followed by the character: @samp{^A}. If it is @code{nil}, they are
2803 displayed as a backslash followed by three octal digits: @samp{\001}.
2804 @end defopt
2805
2806 @c Following may have overfull hbox.
2807 @defvar default-ctl-arrow
2808 The value of this variable is the default value for @code{ctl-arrow} in
2809 buffers that do not override it. @xref{Default Value}.
2810 @end defvar
2811
2812 @defopt tab-width
2813 The value of this variable is the spacing between tab stops used for
2814 displaying tab characters in Emacs buffers. The value is in units of
2815 columns, and the default is 8. Note that this feature is completely
2816 independent of the user-settable tab stops used by the command
2817 @code{tab-to-tab-stop}. @xref{Indent Tabs}.
2818 @end defopt
2819
2820 @node Display Tables
2821 @section Display Tables
2822
2823 @cindex display table
2824 You can use the @dfn{display table} feature to control how all possible
2825 character codes display on the screen. This is useful for displaying
2826 European languages that have letters not in the @sc{ascii} character
2827 set.
2828
2829 The display table maps each character code into a sequence of
2830 @dfn{glyphs}, each glyph being a graphic that takes up one character
2831 position on the screen. You can also define how to display each glyph
2832 on your terminal, using the @dfn{glyph table}.
2833
2834 Display tables affect how the mode line is displayed; if you want to
2835 force redisplay of the mode line using a new display table, call
2836 @code{force-mode-line-update} (@pxref{Mode Line Format}).
2837
2838 @menu
2839 * Display Table Format:: What a display table consists of.
2840 * Active Display Table:: How Emacs selects a display table to use.
2841 * Glyphs:: How to define a glyph, and what glyphs mean.
2842 @end menu
2843
2844 @node Display Table Format
2845 @subsection Display Table Format
2846
2847 A display table is actually a char-table (@pxref{Char-Tables}) with
2848 @code{display-table} as its subtype.
2849
2850 @defun make-display-table
2851 This creates and returns a display table. The table initially has
2852 @code{nil} in all elements.
2853 @end defun
2854
2855 The ordinary elements of the display table are indexed by character
2856 codes; the element at index @var{c} says how to display the character
2857 code @var{c}. The value should be @code{nil} or a vector of glyph
2858 values (@pxref{Glyphs}). If an element is @code{nil}, it says to
2859 display that character according to the usual display conventions
2860 (@pxref{Usual Display}).
2861
2862 If you use the display table to change the display of newline
2863 characters, the whole buffer will be displayed as one long ``line.''
2864
2865 The display table also has six ``extra slots'' which serve special
2866 purposes. Here is a table of their meanings; @code{nil} in any slot
2867 means to use the default for that slot, as stated below.
2868
2869 @table @asis
2870 @item 0
2871 The glyph for the end of a truncated screen line (the default for this
2872 is @samp{$}). @xref{Glyphs}. Newer Emacs versions, on some platforms,
2873 display arrows to indicate truncation---the display table has no effect
2874 in these situations.
2875 @item 1
2876 The glyph for the end of a continued line (the default is @samp{\}).
2877 Newer Emacs versions, on some platforms, display curved arrows to
2878 indicate truncation---the display table has no effect in these
2879 situations.
2880 @item 2
2881 The glyph for indicating a character displayed as an octal character
2882 code (the default is @samp{\}).
2883 @item 3
2884 The glyph for indicating a control character (the default is @samp{^}).
2885 @item 4
2886 A vector of glyphs for indicating the presence of invisible lines (the
2887 default is @samp{...}). @xref{Selective Display}.
2888 @item 5
2889 The glyph used to draw the border between side-by-side windows (the
2890 default is @samp{|}). @xref{Splitting Windows}. This takes effect only
2891 when there are no scroll bars; if scroll bars are supported and in use,
2892 a scroll bar separates the two windows.
2893 @end table
2894
2895 For example, here is how to construct a display table that mimics the
2896 effect of setting @code{ctl-arrow} to a non-@code{nil} value:
2897
2898 @example
2899 (setq disptab (make-display-table))
2900 (let ((i 0))
2901 (while (< i 32)
2902 (or (= i ?\t) (= i ?\n)
2903 (aset disptab i (vector ?^ (+ i 64))))
2904 (setq i (1+ i)))
2905 (aset disptab 127 (vector ?^ ??)))
2906 @end example
2907
2908 @defun display-table-slot display-table slot
2909 @tindex display-table-slot
2910 This function returns the value of the extra slot @var{slot} of
2911 @var{display-table}. The argument @var{slot} may be a number from 0 to
2912 5 inclusive, or a slot name (symbol). Valid symbols are
2913 @code{truncation}, @code{wrap}, @code{escape}, @code{control},
2914 @code{selective-display}, and @code{vertical-border}.
2915 @end defun
2916
2917 @defun set-display-table-slot display-table slot value
2918 @tindex set-display-table-slot
2919 This function stores @var{value} in the extra slot @var{slot} of
2920 @var{display-table}. The argument @var{slot} may be a number from 0 to
2921 5 inclusive, or a slot name (symbol). Valid symbols are
2922 @code{truncation}, @code{wrap}, @code{escape}, @code{control},
2923 @code{selective-display}, and @code{vertical-border}.
2924 @end defun
2925
2926 @defun describe-display-table display-table
2927 @tindex describe-display-table
2928 This function displays a description of the display table
2929 @var{display-table} in a help buffer.
2930 @end defun
2931
2932 @deffn Command describe-current-display-table
2933 @tindex describe-current-display-table
2934 This command displays a description of the current display table in a
2935 help buffer.
2936 @end deffn
2937
2938 @node Active Display Table
2939 @subsection Active Display Table
2940 @cindex active display table
2941
2942 Each window can specify a display table, and so can each buffer. When
2943 a buffer @var{b} is displayed in window @var{w}, display uses the
2944 display table for window @var{w} if it has one; otherwise, the display
2945 table for buffer @var{b} if it has one; otherwise, the standard display
2946 table if any. The display table chosen is called the @dfn{active}
2947 display table.
2948
2949 @defun window-display-table window
2950 This function returns @var{window}'s display table, or @code{nil}
2951 if @var{window} does not have an assigned display table.
2952 @end defun
2953
2954 @defun set-window-display-table window table
2955 This function sets the display table of @var{window} to @var{table}.
2956 The argument @var{table} should be either a display table or
2957 @code{nil}.
2958 @end defun
2959
2960 @defvar buffer-display-table
2961 This variable is automatically buffer-local in all buffers; its value in
2962 a particular buffer specifies the display table for that buffer. If it
2963 is @code{nil}, that means the buffer does not have an assigned display
2964 table.
2965 @end defvar
2966
2967 @defvar standard-display-table
2968 This variable's value is the default display table, used whenever a
2969 window has no display table and neither does the buffer displayed in
2970 that window. This variable is @code{nil} by default.
2971 @end defvar
2972
2973 If there is no display table to use for a particular window---that is,
2974 if the window specifies none, its buffer specifies none, and
2975 @code{standard-display-table} is @code{nil}---then Emacs uses the usual
2976 display conventions for all character codes in that window. @xref{Usual
2977 Display}.
2978
2979 A number of functions for changing the standard display table
2980 are defined in the library @file{disp-table}.
2981
2982 @node Glyphs
2983 @subsection Glyphs
2984
2985 @cindex glyph
2986 A @dfn{glyph} is a generalization of a character; it stands for an
2987 image that takes up a single character position on the screen. Glyphs
2988 are represented in Lisp as integers, just as characters are.
2989
2990 @cindex glyph table
2991 The meaning of each integer, as a glyph, is defined by the glyph
2992 table, which is the value of the variable @code{glyph-table}.
2993
2994 @defvar glyph-table
2995 The value of this variable is the current glyph table. It should be a
2996 vector; the @var{g}th element defines glyph code @var{g}. If the value
2997 is @code{nil} instead of a vector, then all glyphs are simple (see
2998 below).
2999 @end defvar
3000
3001 Here are the possible types of elements in the glyph table:
3002
3003 @table @asis
3004 @item @var{string}
3005 Send the characters in @var{string} to the terminal to output
3006 this glyph. This alternative is available on character terminals,
3007 but not under a window system.
3008
3009 @item @var{integer}
3010 Define this glyph code as an alias for glyph code @var{integer}. You
3011 can use an alias to specify a face code for the glyph; see below.
3012
3013 @item @code{nil}
3014 This glyph is simple. On an ordinary terminal, the glyph code mod
3015 524288 is the character to output. In a window system, the glyph code
3016 mod 524288 is the character to output, and the glyph code divided by
3017 524288 specifies the face number (@pxref{Face Functions}) to use while
3018 outputting it. (524288 is
3019 @ifinfo
3020 2**19.)
3021 @end ifinfo
3022 @tex
3023 $2^{19}$.)
3024 @end tex
3025 @xref{Faces}.
3026 @end table
3027
3028 If a glyph code is greater than or equal to the length of the glyph
3029 table, that code is automatically simple.
3030
3031 @defun create-glyph string
3032 @tindex create-glyph
3033 This function returns a newly-allocated glyph code which is set up to
3034 display by sending @var{string} to the terminal.
3035 @end defun
3036
3037 @node Beeping
3038 @section Beeping
3039 @cindex beeping
3040 @cindex bell
3041
3042 This section describes how to make Emacs ring the bell (or blink the
3043 screen) to attract the user's attention. Be conservative about how
3044 often you do this; frequent bells can become irritating. Also be
3045 careful not to use just beeping when signaling an error is more
3046 appropriate. (@xref{Errors}.)
3047
3048 @defun ding &optional do-not-terminate
3049 @cindex keyboard macro termination
3050 This function beeps, or flashes the screen (see @code{visible-bell} below).
3051 It also terminates any keyboard macro currently executing unless
3052 @var{do-not-terminate} is non-@code{nil}.
3053 @end defun
3054
3055 @defun beep &optional do-not-terminate
3056 This is a synonym for @code{ding}.
3057 @end defun
3058
3059 @defopt visible-bell
3060 This variable determines whether Emacs should flash the screen to
3061 represent a bell. Non-@code{nil} means yes, @code{nil} means no. This
3062 is effective on a window system, and on a character-only terminal
3063 provided the terminal's Termcap entry defines the visible bell
3064 capability (@samp{vb}).
3065 @end defopt
3066
3067 @defvar ring-bell-function
3068 @tindex ring-bell-function
3069 If this is non-@code{nil}, it specifies how Emacs should ``ring the
3070 bell.'' Its value should be a function of no arguments. If this is
3071 non-@code{nil}, it takes precedence over the @code{visible-bell}
3072 variable.
3073 @end defvar
3074
3075 @node Window Systems
3076 @section Window Systems
3077
3078 Emacs works with several window systems, most notably the X Window
3079 System. Both Emacs and X use the term ``window'', but use it
3080 differently. An Emacs frame is a single window as far as X is
3081 concerned; the individual Emacs windows are not known to X at all.
3082
3083 @defvar window-system
3084 This variable tells Lisp programs what window system Emacs is running
3085 under. The possible values are
3086
3087 @table @code
3088 @item x
3089 @cindex X Window System
3090 Emacs is displaying using X.
3091 @item pc
3092 Emacs is displaying using MS-DOS.
3093 @item w32
3094 Emacs is displaying using Windows NT or Windows 9x.
3095 @item mac
3096 Emacs is displaying using a Macintosh.
3097 @item nil
3098 Emacs is using a character-based terminal.
3099 @end table
3100 @end defvar
3101
3102 @defvar window-setup-hook
3103 This variable is a normal hook which Emacs runs after handling the
3104 initialization files. Emacs runs this hook after it has completed
3105 loading your init file, the default initialization file (if
3106 any), and the terminal-specific Lisp code, and running the hook
3107 @code{term-setup-hook}.
3108
3109 This hook is used for internal purposes: setting up communication with
3110 the window system, and creating the initial window. Users should not
3111 interfere with it.
3112 @end defvar