]> code.delx.au - gnu-emacs/blob - lispref/display.texi
*** empty log message ***
[gnu-emacs] / 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 pixmap-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
1786 @defun clear-face-cache &optional unload-p
1787 @tindex clear-face-cache
1788 This function clears the face cache for all frames.
1789 If @var{unload-p} is non-@code{nil}, that means to unload
1790 all unused fonts as well.
1791 @end defun
1792
1793 @node Face Functions
1794 @subsection Functions for Working with Faces
1795
1796 Here are additional functions for creating and working with faces.
1797
1798 @defun make-face name
1799 This function defines a new face named @var{name}, initially with all
1800 attributes @code{nil}. It does nothing if there is already a face named
1801 @var{name}.
1802 @end defun
1803
1804 @defun face-list
1805 This function returns a list of all defined face names.
1806 @end defun
1807
1808 @defun copy-face old-face new-name &optional frame new-frame
1809 This function defines the face @var{new-name} as a copy of the existing
1810 face named @var{old-face}. It creates the face @var{new-name} if that
1811 doesn't already exist.
1812
1813 If the optional argument @var{frame} is given, this function applies
1814 only to that frame. Otherwise it applies to each frame individually,
1815 copying attributes from @var{old-face} in each frame to @var{new-face}
1816 in the same frame.
1817
1818 If the optional argument @var{new-frame} is given, then @code{copy-face}
1819 copies the attributes of @var{old-face} in @var{frame} to @var{new-name}
1820 in @var{new-frame}.
1821 @end defun
1822
1823 @defun face-id face
1824 This function returns the face number of face @var{face}.
1825 @end defun
1826
1827 @defun face-documentation face
1828 @tindex face-documentation
1829 This function returns the documentation string of face @var{face}, or
1830 @code{nil} if none was specified for it.
1831 @end defun
1832
1833 @defun face-equal face1 face2 &optional frame
1834 This returns @code{t} if the faces @var{face1} and @var{face2} have the
1835 same attributes for display.
1836 @end defun
1837
1838 @defun face-differs-from-default-p face &optional frame
1839 This returns @code{t} if the face @var{face} displays differently from
1840 the default face. A face is considered to be ``the same'' as the
1841 default face if each attribute is either the same as that of the default
1842 face, or unspecified (meaning to inherit from the default).
1843 @end defun
1844
1845 @node Auto Faces
1846 @subsection Automatic Face Assignment
1847 @cindex automatic face assignment
1848 @cindex faces, automatic choice
1849
1850 @cindex Font-Lock mode
1851 Starting with Emacs 21, a hook is available for automatically
1852 assigning faces to text in the buffer. This hook is used for part of
1853 the implementation of Font-Lock mode.
1854
1855 @tindex fontification-functions
1856 @defvar fontification-functions
1857 This variable holds a list of functions that are called by Emacs
1858 redisplay as needed to assign faces automatically to text in the buffer.
1859
1860 The functions are called in the order listed, with one argument, a
1861 buffer position @var{pos}. Each function should attempt to assign faces
1862 to the text in the current buffer starting at @var{pos}.
1863
1864 Each function should record the faces they assign by setting the
1865 @code{face} property. It should also add a non-@code{nil}
1866 @code{fontified} property for all the text it has assigned faces to.
1867 That property tells redisplay that faces have been assigned to that text
1868 already.
1869
1870 It is probably a good idea for each function to do nothing if the
1871 character after @var{pos} already has a non-@code{nil} @code{fontified}
1872 property, but this is not required. If one function overrides the
1873 assignments made by a previous one, the properties as they are
1874 after the last function finishes are the ones that really matter.
1875
1876 For efficiency, we recommend writing these functions so that they
1877 usually assign faces to around 400 to 600 characters at each call.
1878 @end defvar
1879
1880 @node Font Lookup
1881 @subsection Looking Up Fonts
1882
1883 @defun x-list-fonts pattern &optional face frame maximum
1884 This function returns a list of available font names that match
1885 @var{pattern}. If the optional arguments @var{face} and @var{frame} are
1886 specified, then the list is limited to fonts that are the same size as
1887 @var{face} currently is on @var{frame}.
1888
1889 The argument @var{pattern} should be a string, perhaps with wildcard
1890 characters: the @samp{*} character matches any substring, and the
1891 @samp{?} character matches any single character. Pattern matching
1892 of font names ignores case.
1893
1894 If you specify @var{face} and @var{frame}, @var{face} should be a face name
1895 (a symbol) and @var{frame} should be a frame.
1896
1897 The optional argument @var{maximum} sets a limit on how many fonts to
1898 return. If this is non-@code{nil}, then the return value is truncated
1899 after the first @var{maximum} matching fonts. Specifying a small value
1900 for @var{maximum} can make this function much faster, in cases where
1901 many fonts match the pattern.
1902 @end defun
1903
1904 These additional functions are available starting in Emacs 21.
1905
1906 @defun x-family-fonts &optional family frame
1907 @tindex x-family-fonts
1908 This function returns a list describing the available fonts for family
1909 @var{family} on @var{frame}. If @var{family} is omitted or @code{nil},
1910 this list applies to all families, and therefore, it contains all
1911 available fonts. Otherwise, @var{family} must be a string; it may
1912 contain the wildcards @samp{?} and @samp{*}.
1913
1914 The list describes the display that @var{frame} is on; if @var{frame} is
1915 omitted or @code{nil}, it applies to the selected frame's display.
1916
1917 The list contains a vector of the following form for each font:
1918
1919 @example
1920 [@var{family} @var{width} @var{point-size} @var{weight} @var{slant}
1921 @var{fixed-p} @var{full} @var{registry-and-encoding}]
1922 @end example
1923
1924 The first five elements correspond to face attributes; if you
1925 specify these attributes for a face, it will use this font.
1926
1927 The last three elements give additional information about the font.
1928 @var{fixed-p} is non-nil if the font is fixed-pitch. @var{full} is the
1929 full name of the font, and @var{registry-and-encoding} is a string
1930 giving the registry and encoding of the font.
1931
1932 The result list is sorted according to the current face font sort order.
1933 @end defun
1934
1935 @defun x-font-family-list &optional frame
1936 @tindex x-font-family-list
1937 This function returns a list of the font families available for
1938 @var{frame}'s display. If @var{frame} is omitted or @code{nil}, it
1939 describes the selected frame's display.
1940
1941 The value is a list of elements of this form:
1942
1943 @example
1944 (@var{family} . @var{fixed-p})
1945 @end example
1946
1947 @noindent
1948 Here @var{family} is a font family, and @var{fixed-p} is
1949 non-@code{nil} if fonts of that family are fixed-pitch.
1950 @end defun
1951
1952 @defvar font-list-limit
1953 @tindex font-list-limit
1954 This variable specifies maximum number of fonts to consider in font
1955 matching. The function @code{x-family-fonts} will not return more than
1956 that many fonts, and font selection will consider only that many fonts
1957 when searching a matching font for face attributes. The default is
1958 currently 100.
1959 @end defvar
1960
1961 @node Fontsets
1962 @subsection Fontsets
1963
1964 A @dfn{fontset} is a list of fonts, each assigned to a range of
1965 character codes. An individual font cannot display the whole range of
1966 characters that Emacs supports, but a fontset can. Fontsets have names,
1967 just as fonts do, and you can use a fontset name in place of a font name
1968 when you specify the ``font'' for a frame or a face. Here is
1969 information about defining a fontset under Lisp program control.
1970
1971 @defun create-fontset-from-fontset-spec fontset-spec &optional style-variant-p noerror
1972 This function defines a new fontset according to the specification
1973 string @var{fontset-spec}. The string should have this format:
1974
1975 @smallexample
1976 @var{fontpattern}, @r{[}@var{charsetname}:@var{fontname}@r{]@dots{}}
1977 @end smallexample
1978
1979 @noindent
1980 Whitespace characters before and after the commas are ignored.
1981
1982 The first part of the string, @var{fontpattern}, should have the form of
1983 a standard X font name, except that the last two fields should be
1984 @samp{fontset-@var{alias}}.
1985
1986 The new fontset has two names, one long and one short. The long name is
1987 @var{fontpattern} in its entirety. The short name is
1988 @samp{fontset-@var{alias}}. You can refer to the fontset by either
1989 name. If a fontset with the same name already exists, an error is
1990 signaled, unless @var{noerror} is non-@code{nil}, in which case this
1991 function does nothing.
1992
1993 If optional argument @var{style-variant-p} is non-@code{nil}, that says
1994 to create bold, italic and bold-italic variants of the fontset as well.
1995 These variant fontsets do not have a short name, only a long one, which
1996 is made by altering @var{fontpattern} to indicate the bold or italic
1997 status.
1998
1999 The specification string also says which fonts to use in the fontset.
2000 See below for the details.
2001 @end defun
2002
2003 The construct @samp{@var{charset}:@var{font}} specifies which font to
2004 use (in this fontset) for one particular character set. Here,
2005 @var{charset} is the name of a character set, and @var{font} is the font
2006 to use for that character set. You can use this construct any number of
2007 times in the specification string.
2008
2009 For the remaining character sets, those that you don't specify
2010 explicitly, Emacs chooses a font based on @var{fontpattern}: it replaces
2011 @samp{fontset-@var{alias}} with a value that names one character set.
2012 For the @sc{ascii} character set, @samp{fontset-@var{alias}} is replaced
2013 with @samp{ISO8859-1}.
2014
2015 In addition, when several consecutive fields are wildcards, Emacs
2016 collapses them into a single wildcard. This is to prevent use of
2017 auto-scaled fonts. Fonts made by scaling larger fonts are not usable
2018 for editing, and scaling a smaller font is not useful because it is
2019 better to use the smaller font in its own size, which Emacs does.
2020
2021 Thus if @var{fontpattern} is this,
2022
2023 @example
2024 -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24
2025 @end example
2026
2027 @noindent
2028 the font specification for ASCII characters would be this:
2029
2030 @example
2031 -*-fixed-medium-r-normal-*-24-*-ISO8859-1
2032 @end example
2033
2034 @noindent
2035 and the font specification for Chinese GB2312 characters would be this:
2036
2037 @example
2038 -*-fixed-medium-r-normal-*-24-*-gb2312*-*
2039 @end example
2040
2041 You may not have any Chinese font matching the above font
2042 specification. Most X distributions include only Chinese fonts that
2043 have @samp{song ti} or @samp{fangsong ti} in the @var{family} field. In
2044 such a case, @samp{Fontset-@var{n}} can be specified as below:
2045
2046 @smallexample
2047 Emacs.Fontset-0: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24,\
2048 chinese-gb2312:-*-*-medium-r-normal-*-24-*-gb2312*-*
2049 @end smallexample
2050
2051 @noindent
2052 Then, the font specifications for all but Chinese GB2312 characters have
2053 @samp{fixed} in the @var{family} field, and the font specification for
2054 Chinese GB2312 characters has a wild card @samp{*} in the @var{family}
2055 field.
2056
2057 @node Display Property
2058 @section The @code{display} Property
2059 @cindex display specification
2060 @kindex display @r{(text property)}
2061
2062 The @code{display} text property (or overlay property) is used to
2063 insert images into text, and also control other aspects of how text
2064 displays. These features are available starting in Emacs 21. The value
2065 of the @code{display} property should be a display specification, or a
2066 list or vector containing several display specifications. The rest of
2067 this section describes several kinds of display specifications and what
2068 they mean.
2069
2070 @menu
2071 * Specified Space:: Displaying one space with a specified width.
2072 * Other Display Specs:: Displaying an image; magnifying text; moving it
2073 up or down on the page; adjusting the width
2074 of spaces within text.
2075 * Display Margins:: Displaying text or images to the side of the main text.
2076 * Conditional Display:: Making any of the above features conditional
2077 depending on some Lisp expression.
2078 @end menu
2079
2080 @node Specified Space
2081 @subsection Specified Spaces
2082 @cindex spaces, specified height or width
2083 @cindex specified spaces
2084 @cindex variable-width spaces
2085
2086 To display a space of specified width and/or height, use a display
2087 specification of the form @code{(space . @var{props})}, where
2088 @var{props} is a property list (a list of alternating properties and
2089 values). You can put this property on one or more consecutive
2090 characters; a space of the specified height and width is displayed in
2091 place of @emph{all} of those characters. These are the properties you
2092 can use to specify the weight of the space:
2093
2094 @table @code
2095 @item :width @var{width}
2096 Specifies that the space width should be @var{width} times the normal
2097 character width. @var{width} can be an integer or floating point
2098 number.
2099
2100 @item :relative-width @var{factor}
2101 Specifies that the width of the stretch should be computed from the
2102 first character in the group of consecutive characters that have the
2103 same @code{display} property. The space width is the width of that
2104 character, multiplied by @var{factor}.
2105
2106 @item :align-to @var{hpos}
2107 Specifies that the space should be wide enough to reach @var{hpos}. The
2108 value @var{hpos} is measured in units of the normal character width. It
2109 may be an interer or a floating point number.
2110 @end table
2111
2112 Exactly one of the above properties should be used. You can also
2113 specify the height of the space, with other properties:
2114
2115 @table @code
2116 @item :height @var{height}
2117 Specifies the height of the space, as @var{height},
2118 measured in terms of the normal line height.
2119
2120 @item :relative-height @var{factor}
2121 Specifies the height of the space, multiplying the ordinary height
2122 of the text having this display specification by @var{factor}.
2123
2124 @item :ascent @var{ascent}
2125 Specifies that @var{ascent} percent of the height of the space should be
2126 considered as the ascent of the space---that is, the part above the
2127 baseline. The value of @var{ascent} must be a non-negative number no
2128 greater than 100.
2129 @end table
2130
2131 You should not use both @code{:height} and @code{:relative-height}
2132 together.
2133
2134 @node Other Display Specs
2135 @subsection Other Display Specifications
2136
2137 @table @code
2138 @item (image . @var{image-props})
2139 This is in fact an image descriptor (@pxref{Images}). When used as a
2140 display specification, it means to display the image instead of the text
2141 that has the display specification.
2142
2143 @item (space-width @var{factor})
2144 This display specification affects all the space characters within the
2145 text that has the specification. It displays all of these spaces
2146 @var{factor} times as wide as normal. The element @var{factor} should
2147 be an integer or float. Characters other than spaces are not affected
2148 at all; in particular, this has no effect on tab characters.
2149
2150 @item (height @var{height})
2151 This display specification makes the text taller or shorter.
2152 Here are the possibilities for @var{height}:
2153
2154 @table @asis
2155 @item @code{(+ @var{n})}
2156 This means to use a font that is @var{n} steps larger. A ``step'' is
2157 defined by the set of available fonts---specifically, those that match
2158 what was otherwise specified for this text, in all attributes except
2159 height. Each size for which a suitable font is available counts as
2160 another step. @var{n} should be an integer.
2161
2162 @item @code{(- @var{n})}
2163 This means to use a font that is @var{n} steps smaller.
2164
2165 @item a number, @var{factor}
2166 A number, @var{factor}, means to use a font that is @var{factor} times
2167 as tall as the default font.
2168
2169 @item a symbol, @var{function}
2170 A symbol is a function to compute the height. It is called with the
2171 current height as argument, and should return the new height to use.
2172
2173 @item anything else, @var{form}
2174 If the @var{height} value doesn't fit the previous possibilities, it is
2175 a form. Emacs evaluates it to get the new height, with the symbol
2176 @code{height} bound to the current specified font height.
2177 @end table
2178
2179 @item (raise @var{factor})
2180 This kind of display specification raises or lowers the text
2181 it applies to, relative to the baseline of the line.
2182
2183 @var{factor} must be a number, which is interpreted as a multiple of the
2184 height of the affected text. If it is positive, that means to display
2185 the characters raised. If it is negative, that means to display them
2186 lower down.
2187
2188 If the text also has a @code{height} display specification, that does
2189 not affect the amount of raising or lowering, which is based on the
2190 faces used for the text.
2191 @end table
2192
2193 @node Display Margins
2194 @subsection Displaying in the Margins
2195 @cindex display margins
2196 @cindex margins, display
2197
2198 A buffer can have blank areas called @dfn{display margins} on the left
2199 and on the right. Ordinary text never appears in these areas, but you
2200 can put things into the display margins using the @code{display}
2201 property.
2202
2203 To put text in the left or right display margin of the window, use a
2204 display specification of the form @code{(margin right-margin)} or
2205 @code{(margin left-margin)} on it. To put an image in a display margin,
2206 use that display specification along with the display specification for
2207 the image.
2208
2209 Before the display margins can display anything, you must give
2210 them a nonzero width. The usual way to do that is to set these
2211 variables:
2212
2213 @defvar left-margin-width
2214 @tindex left-margin-width
2215 This variable specifies the width of the left margin.
2216 It is buffer-local in all buffers.
2217 @end defvar
2218
2219 @defvar right-margin-width
2220 @tindex right-margin-width
2221 This variable specifies the width of the right margin.
2222 It is buffer-local in all buffers.
2223 @end defvar
2224
2225 Setting these variables does not immediately affect the window. These
2226 variables are checked when a new buffer is displayed in the window.
2227 Thus, you can make changes take effect by calling
2228 @code{set-window-buffer}.
2229
2230 You can also set the margin widths immediately.
2231
2232 @defun set-window-margins window left right
2233 @tindex set-window-margins
2234 This function specifies the margin widths for window @var{window}.
2235 The argument @var{left} controls the left margin and
2236 @var{right} controls the right margin.
2237 @end defun
2238
2239 @defun window-margins &optional window
2240 @tindex window-margins
2241 This function returns the left and right margins of @var{window}
2242 as a cons cell of the form @code{(@var{left} . @var{right})}.
2243 If @var{window} is @code{nil}, the selected window is used.
2244 @end defun
2245
2246 @node Conditional Display
2247 @subsection Conditional Display Specifications
2248 @cindex conditional display specifications
2249
2250 You can make any display specification conditional. To do that,
2251 package it in another list of the form @code{(when @var{condition}
2252 @var{spec})}. Then the specification @var{spec} applies only when
2253 @var{condition} evaluates to a non-@code{nil} value. During the
2254 evaluation, point is temporarily set at the end position of the text
2255 having this conditional display specification.
2256
2257 @node Images
2258 @section Images
2259 @cindex images in buffers
2260
2261 To display an image in an Emacs buffer, you must first create an image
2262 descriptor, then use it as a display specifier in the @code{display}
2263 property of text that is displayed (@pxref{Display Property}). Like the
2264 @code{display} property, this feature is available starting in Emacs 21.
2265
2266 Emacs can display a number of different image formats; some of them
2267 are supported only if particular support libraries are installed on your
2268 machine. The supported image formats include XBM, XPM (needing the
2269 libraries @code{libXpm} version 3.4k and @code{libz}), GIF (needing
2270 @code{libungif} 4.1.0), Postscript, PBM, JPEG (needing the
2271 @code{libjpeg} library version v6a), TIFF (needing @code{libtiff} v3.4),
2272 and PNG (needing @code{libpng} 1.0.2).
2273
2274 You specify one of these formats with an image type symbol. The image
2275 type symbols are @code{xbm}, @code{xpm}, @code{gif}, @code{postscript},
2276 @code{pbm}, @code{jpeg}, @code{tiff}, and @code{png}.
2277
2278 @defvar image-types
2279 This variable contains a list of those image type symbols that are
2280 supported in the current configuration.
2281 @end defvar
2282
2283 @menu
2284 * Image Descriptors:: How to specify an image for use in @code{:display}.
2285 * XBM Images:: Special features for XBM format.
2286 * XPM Images:: Special features for XPM format.
2287 * GIF Images:: Special features for GIF format.
2288 * Postscript Images:: Special features for Postscript format.
2289 * Other Image Types:: Various other formats are supported.
2290 * Defining Images:: Convenient ways to define an image for later use.
2291 * Showing Images:: Convenient ways to display an image once it is defined.
2292 * Image Cache:: Internal mechanisms of image display.
2293 @end menu
2294
2295 @node Image Descriptors
2296 @subsection Image Descriptors
2297 @cindex image descriptor
2298
2299 An image description is a list of the form @code{(image
2300 . @var{props})}, where @var{props} is a property list containing
2301 alternating keyword symbols (symbols whose names start with a colon) and
2302 their values. Every image descriptor must contain the property
2303 @code{:type @var{type}} to specify the format of the image. The value
2304 of @var{type} should be an image type symbol; for example, @code{xpm}
2305 for an image in XPM format.
2306
2307 Here is a list of other properties that are meaningful for all image
2308 types:
2309
2310 @table @code
2311 @item :ascent @var{ascent}
2312 The @code{:ascent} property specifies the percentage of the image's
2313 height to use for its ascent---that is, the part above the baseline. The
2314 value, @var{ascent}, must be a number in the range 0 to 100. If this
2315 property is omitted, it defaults to 50.
2316
2317 @item :margin @var{margin}
2318 The @code{:margin} property specifies how many pixels to add as an extra
2319 margin around the image. The value, @var{margin}, must be a
2320 non-negative number; if it is not specified, the default is zero.
2321
2322 @item :relief @var{relief}
2323 The @code{:relief} property, if non-@code{nil}, adds a shadow rectangle
2324 around the image. The value, @var{relief}, specifies the width of the
2325 shadow lines, in pixels. If @var{relief} is negative, shadows are drawn
2326 so that the image appears as a pressed button; otherwise, it appears as
2327 an unpressed button.
2328
2329 @item :algorithm @var{algorithm}
2330 The @code{:algorithm} property, if non-@code{nil}, specifies a
2331 conversion algorithm that should be applied to the image before it is
2332 displayed; the value, @var{algorithm}, specifies which algorithm.
2333
2334 Currently, the only meaningful value for @var{algorithm} (aside from
2335 @code{nil}) is @code{laplace}; this applies the Laplace edge detection
2336 algorithm, which blurs out small differences in color while highlighting
2337 larger differences. People sometimes consider this useful for
2338 displaying the image for a ``disabled'' button.
2339
2340 @item :heuristic-mask @var{transparent-color}
2341 The @code{:heuristic-mask} property, if non-@code{nil}, specifies that a
2342 certain color in the image should be transparent. Each pixel where this
2343 color appears will actually allow the frame's background to show
2344 through.
2345
2346 If @var{transparent-color} is @code{t}, then determine the transparent
2347 color by looking at the four corners of the image. This uses the color
2348 that occurs most frequently near the corners as the transparent color.
2349
2350 Otherwise, @var{heuristic-mask} should specify the transparent color
2351 directly, as a list of three integers in the form @code{(@var{red}
2352 @var{green} @var{blue})}.
2353
2354 @item :file @var{file}
2355 The @code{:file} property specifies to load the image from file
2356 @var{file}. If @var{file} is not an absolute file name, it is expanded
2357 in @code{data-directory}.
2358
2359 @item :data @var{data}
2360 The @code{:data} property specifies the actual contents of the image.
2361 Each image must use either @code{:data} or @code{:file}, but not both.
2362 However, only certain image types support @code{:data}; for other types,
2363 you must use @code{:file}.
2364
2365 The formats that support @code{:data} include XBM and XPM.
2366 Before using @code{:data}, see the section describing the specific
2367 format you wish to use for further information.
2368 @end table
2369
2370 @node XBM Images
2371 @subsection XBM Images
2372 @cindex XBM
2373
2374 To use XBM format, specify @code{xbm} as the image type. This image
2375 format doesn't require an external library, so images of this type are
2376 always supported.
2377
2378 Additional image properties supported for the @code{xbm} image type are:
2379
2380 @table @code
2381 @item :foreground @var{foreground}
2382 The value, @var{foreground}, should be a string specifying the image
2383 foreground color. This color is used for each pixel in the XBM that is
2384 1. The default is the frame's foreground color.
2385
2386 @item :background @var{background}
2387 The value, @var{background}, should be a string specifying the image
2388 background color. This color is used for each pixel in the XBM that is
2389 0. The default is the frame's background color.
2390 @end table
2391
2392 You can specify an XBM image using data within Emacs instead
2393 of an external file. To do this, don't use @code{:file}; instead,
2394 use the following three properties (all of them):
2395
2396 @table @code
2397 @item :width @var{width}
2398 The value, @var{width}, specifies the width the image in pixels.
2399
2400 @item :height @var{height}
2401 The value, @var{height}, specifies the height of the image in pixels.
2402
2403 @item :data @var{data}
2404 The value, @var{data}, is normally a string or a bool-vector. Either
2405 way, it must contain enough bits for the area of the image: at least
2406 @var{width} * @code{height}.
2407
2408 Alternatively, @var{data} can be a vector of strings or bool-vectors,
2409 each specifying one line of the image.
2410 @end table
2411
2412 @node XPM Images
2413 @subsection XPM Images
2414 @cindex XPM
2415
2416 To use XPM format, specify @code{xpm} as the image type. These
2417 additional image properties are meaningful with the @code{xpm} image
2418 type:
2419
2420 @table @code
2421 @item :color-symbols @var{symbols}
2422 The value, @var{symbols}, should be an alist whose elements have the
2423 form @code{(@var{name} . @var{color})}. In each element, @var{name} is
2424 the name of a color as it appears in the image file, and @var{color}
2425 specifies the actual color to use for displaying that name.
2426
2427 @item :data @var{data}
2428 XPM images can be displayed from data instead of files. In that case,
2429 use the @code{:data} property instead of the @code{:file} property.
2430
2431 The value @var{data} must be a string containing an XPM image. The
2432 contents of the string have same format as an external XPM file.
2433 @end table
2434
2435 @node GIF Images
2436 @subsection GIF Images
2437 @cindex GIF
2438
2439 For GIF images, specify image type @code{gif}. Because of the patents
2440 in the US covering the LZW algorithm, the continued use of GIF format is
2441 a problem for the whole Internet; to end this problem, it is a good idea
2442 for everyone, even outside the US, to stop using GIFS right away
2443 (@uref{http://www.burnallgifs.org/}). But if you still want to use
2444 them, Emacs can display them.
2445
2446 @table @code
2447 @item :index @var{index}
2448 You can use @code{:index} to specify one image from a GIF file that
2449 contains more than one image. This property specifies use of image
2450 number @var{index} from the file. An error is signaled if the GIF file
2451 doesn't contain an image with index @var{index}.
2452 @end table
2453
2454 @ignore
2455 This could be used to implement limited support for animated GIFs.
2456 For example, the following function displays a multi-image GIF file
2457 at point-min in the current buffer, switching between sub-images
2458 every 0.1 seconds.
2459
2460 (defun show-anim (file max)
2461 "Display multi-image GIF file FILE which contains MAX subimages."
2462 (display-anim (current-buffer) file 0 max t))
2463
2464 (defun display-anim (buffer file idx max first-time)
2465 (when (= idx max)
2466 (setq idx 0))
2467 (let ((img (create-image file nil :image idx)))
2468 (save-excursion
2469 (set-buffer buffer)
2470 (goto-char (point-min))
2471 (unless first-time (delete-char 1))
2472 (insert-image img))
2473 (run-with-timer 0.1 nil 'display-anim buffer file (1+ idx) max nil)))
2474 @end ignore
2475
2476 @node Postscript Images
2477 @subsection Postscript Images
2478 @cindex Postscript images
2479
2480 To use Postscript for an image, specify image type @code{postscript}.
2481 This works only if you have Ghostscript installed. You must always use
2482 these three properties:
2483
2484 @table @code
2485 @item :pt-width @var{width}
2486 The value, @var{width}, specifies the width of the image measured in
2487 points (1/72 inch). @var{width} must be an integer.
2488
2489 @item :pt-height @var{height}
2490 The value, @var{height}, specifies the height of the image in points
2491 (1/72 inch). @var{height} must be an integer.
2492
2493 @item :bounding-box @var{box}
2494 The value, @var{box}, must be a list or vector of four integers, which
2495 specifying the bounding box of the Postscript image, analogous to the
2496 @samp{BoundingBox} comment found in Postscript files.
2497
2498 @example
2499 %%BoundingBox: 22 171 567 738
2500 @end example
2501 @end table
2502
2503 @node Other Image Types
2504 @subsection Other Image Types
2505 @cindex PBM
2506
2507 For PBM images, specify image type @code{pbm}. Color, gray-scale and
2508 monochromatic images are supported.
2509
2510 For JPEG images, specify image type @code{jpeg}. There are no
2511 additional image properties defined.
2512
2513 For TIFF images, specify image type @code{tiff}.
2514
2515 For PNG images, specify image type @code{png}.
2516
2517 @node Defining Images
2518 @subsection Defining Images
2519
2520 The functions @code{create-image} and @code{defimage} provide
2521 convenient ways to create image descriptors.
2522
2523 @defun create-image file &optional type &rest props
2524 @tindex create-image
2525 This function creates and returns an image descriptor which uses the
2526 data in @var{file}.
2527
2528 The optional argument @var{type} is a symbol specifying the image type.
2529 If @var{type} is omitted or @code{nil}, @code{create-image} tries to
2530 determine the image type from the file's first few bytes, or else
2531 from the file's name.
2532
2533 The remaining arguments, @var{props}, specify additional image
2534 properties---for example,
2535
2536 @example
2537 (create-image "foo.xpm" 'xpm :heuristic-mask t)
2538 @end example
2539
2540 The function returns @code{nil} if images of this type are not
2541 supported. Otherwise it returns an image descriptor.
2542 @end defun
2543
2544 @defmac defimage variable doc &rest specs
2545 @tindex defimage
2546 This macro defines @var{variable} as an image name. The second argument,
2547 @var{doc}, is an optional documentation string. The remaining
2548 arguments, @var{specs}, specify alternative ways to display the image.
2549
2550 Each argument in @var{specs} has the form of a property list, and each
2551 one should specify at least the @code{:type} property and the
2552 @code{:file} property. Here is an example:
2553
2554 @example
2555 (defimage test-image
2556 '((:type xpm :file "~/test1.xpm")
2557 (:type xbm :file "~/test1.xbm")))
2558 @end example
2559
2560 @code{defimage} tests each argument, one by one, to see if it is
2561 usable---that is, if the type is supported and the file exists. The
2562 first usable argument is used to make an image descriptor which is
2563 stored in the variable @var{variable}.
2564
2565 If none of the alternatives will work, then @var{variable} is defined
2566 as @code{nil}.
2567 @end defmac
2568
2569 @node Showing Images
2570 @subsection Showing Images
2571
2572 You can use an image descriptor by setting up the @code{display}
2573 property yourself, but it is easier to use the functions in this
2574 section.
2575
2576 @defun insert-image image string &optional area
2577 This function inserts @var{image} in the current buffer at point. The
2578 value @var{image} should be an image descriptor; it could be a value
2579 returned by @code{create-image}, or the value of a symbol defined with
2580 @code{defimage}. The argument @var{string} specifies the text to put in
2581 the buffer to hold the image.
2582
2583 The argument @var{area} specifies whether to put the image in a margin.
2584 If it is @code{left-margin}, the image appears in the left margin;
2585 @code{right-margin} specifies the right margin. If @var{area} is
2586 @code{nil} or omitted, the image is displayed at point within the
2587 buffer's text.
2588
2589 Internally, this function inserts @var{string} in the buffer, and gives
2590 it a @code{display} property which specifies @var{image}. @xref{Display
2591 Property}.
2592 @end defun
2593
2594 @defun put-image image pos string &optional area
2595 This function puts image @var{image} in front of @var{pos} in the
2596 current buffer. The argument @var{pos} should be an integer or a
2597 marker. It specifies the buffer position where the image should appear.
2598 The argument @var{string} specifies the text that should hold the image.
2599
2600 The argument @var{image} must be an image descriptor, perhaps returned
2601 by @code{create-image} or stored by @code{defimage}.
2602
2603 The argument @var{area} specifies whether to put the image in a margin.
2604 If it is @code{left-margin}, the image appears in the left margin;
2605 @code{right-margin} specifies the right margin. If @var{area} is
2606 @code{nil} or omitted, the image is displayed at point within the
2607 buffer's text.
2608
2609 Internally, this function creates an overlay, and gives it a
2610 @code{before-string} property containing text that has a @code{display}
2611 property whose value is the image. (Whew!)
2612 @end defun
2613
2614 @defun remove-images start end &optional buffer
2615 This function removes images in @var{buffer} between positions
2616 @var{start} and @var{end}. If @var{buffer} is omitted or @code{nil},
2617 images are removed from the current buffer.
2618
2619 This remove only images that were put into @var{buffer} the way
2620 @code{put-image} does it, not images that were inserted with
2621 @code{insert-image} or in other ways.
2622 @end defun
2623
2624 @node Image Cache
2625 @subsection Image Cache
2626
2627 Emacs stores images in an image cache when it displays them, so it can
2628 display them again more efficiently. It removes an image from the cache
2629 when it hasn't been displayed for a specified period of time.
2630
2631 @defvar image-cache-eviction-delay
2632 @tindex image-cache-eviction-delay
2633 This variable specifies the number of seconds an image can remain in the
2634 cache without being displayed. When an image is not displayed for this
2635 length of time, Emacs removes it from the image cache.
2636
2637 If the value is @code{nil}, Emacs does not remove images from the cache
2638 except when you explicitly clear it. This mode can be useful for
2639 debugging.
2640 @end defvar
2641
2642 @defun clear-image-cache &optional frame
2643 @tindex clear-image-cache
2644 This function clears the image cache. If @var{frame} is non-@code{nil},
2645 only the cache for that frame is cleared. Otherwise all frames' caches
2646 are cleared.
2647 @end defun
2648 @node Blinking
2649 @section Blinking Parentheses
2650 @cindex parenthesis matching
2651 @cindex blinking
2652 @cindex balancing parentheses
2653 @cindex close parenthesis
2654
2655 This section describes the mechanism by which Emacs shows a matching
2656 open parenthesis when the user inserts a close parenthesis.
2657
2658 @defvar blink-paren-function
2659 The value of this variable should be a function (of no arguments) to
2660 be called whenever a character with close parenthesis syntax is inserted.
2661 The value of @code{blink-paren-function} may be @code{nil}, in which
2662 case nothing is done.
2663 @end defvar
2664
2665 @defopt blink-matching-paren
2666 If this variable is @code{nil}, then @code{blink-matching-open} does
2667 nothing.
2668 @end defopt
2669
2670 @defopt blink-matching-paren-distance
2671 This variable specifies the maximum distance to scan for a matching
2672 parenthesis before giving up.
2673 @end defopt
2674
2675 @defopt blink-matching-delay
2676 This variable specifies the number of seconds for the cursor to remain
2677 at the matching parenthesis. A fraction of a second often gives
2678 good results, but the default is 1, which works on all systems.
2679 @end defopt
2680
2681 @deffn Command blink-matching-open
2682 This function is the default value of @code{blink-paren-function}. It
2683 assumes that point follows a character with close parenthesis syntax and
2684 moves the cursor momentarily to the matching opening character. If that
2685 character is not already on the screen, it displays the character's
2686 context in the echo area. To avoid long delays, this function does not
2687 search farther than @code{blink-matching-paren-distance} characters.
2688
2689 Here is an example of calling this function explicitly.
2690
2691 @smallexample
2692 @group
2693 (defun interactive-blink-matching-open ()
2694 @c Do not break this line! -- rms.
2695 @c The first line of a doc string
2696 @c must stand alone.
2697 "Indicate momentarily the start of sexp before point."
2698 (interactive)
2699 @end group
2700 @group
2701 (let ((blink-matching-paren-distance
2702 (buffer-size))
2703 (blink-matching-paren t))
2704 (blink-matching-open)))
2705 @end group
2706 @end smallexample
2707 @end deffn
2708
2709 @node Inverse Video
2710 @section Inverse Video
2711 @cindex Inverse Video
2712
2713 @defopt inverse-video
2714 @cindex highlighting
2715 This variable controls whether Emacs uses inverse video for all text
2716 on the screen. Non-@code{nil} means yes, @code{nil} means no. The
2717 default is @code{nil}.
2718 @end defopt
2719
2720 @defopt mode-line-inverse-video
2721 This variable controls the use of inverse video for mode lines and menu
2722 bars. If it is non-@code{nil}, then these lines are displayed in
2723 inverse video. Otherwise, they lines are displayed normally, just like
2724 other text. The default is @code{t}.
2725
2726 For window frames, this feature actually applies the face named
2727 @code{mode-line}; that face is normally set up as the inverse of the
2728 default face, unless you change it.
2729 @end defopt
2730
2731 @node Usual Display
2732 @section Usual Display Conventions
2733
2734 The usual display conventions define how to display each character
2735 code. You can override these conventions by setting up a display table
2736 (@pxref{Display Tables}). Here are the usual display conventions:
2737
2738 @itemize @bullet
2739 @item
2740 Character codes 32 through 126 map to glyph codes 32 through 126.
2741 Normally this means they display as themselves.
2742
2743 @item
2744 Character code 9 is a horizontal tab. It displays as whitespace
2745 up to a position determined by @code{tab-width}.
2746
2747 @item
2748 Character code 10 is a newline.
2749
2750 @item
2751 All other codes in the range 0 through 31, and code 127, display in one
2752 of two ways according to the value of @code{ctl-arrow}. If it is
2753 non-@code{nil}, these codes map to sequences of two glyphs, where the
2754 first glyph is the @sc{ascii} code for @samp{^}. (A display table can
2755 specify a glyph to use instead of @samp{^}.) Otherwise, these codes map
2756 just like the codes in the range 128 to 255.
2757
2758 On MS-DOS terminals, Emacs arranges by default for the character code
2759 127 to be mapped to the glyph code 127, which normally displays as an
2760 empty polygon. This glyph is used to display non-@sc{ascii} characters
2761 that the MS-DOS terminal doesn't support. @xref{MS-DOS and MULE,,,
2762 emacs, The GNU Emacs Manual}.
2763
2764 @item
2765 Character codes 128 through 255 map to sequences of four glyphs, where
2766 the first glyph is the @sc{ascii} code for @samp{\}, and the others are
2767 digit characters representing the character code in octal. (A display
2768 table can specify a glyph to use instead of @samp{\}.)
2769
2770 @item
2771 Multibyte character codes above 256 are displayed as themselves, or as a
2772 question mark or empty box if the terminal cannot display that
2773 character.
2774 @end itemize
2775
2776 The usual display conventions apply even when there is a display
2777 table, for any character whose entry in the active display table is
2778 @code{nil}. Thus, when you set up a display table, you need only
2779 specify the characters for which you want special behavior.
2780
2781 These display rules apply to carriage return (character code 13), when
2782 it appears in the buffer. But that character may not appear in the
2783 buffer where you expect it, if it was eliminated as part of end-of-line
2784 conversion (@pxref{Coding System Basics}).
2785
2786 These variables affect the way certain characters are displayed on the
2787 screen. Since they change the number of columns the characters occupy,
2788 they also affect the indentation functions. These variables also affect
2789 how the mode line is displayed; if you want to force redisplay of the
2790 mode line using the new values, call the function
2791 @code{force-mode-line-update} (@pxref{Mode Line Format}).
2792
2793 @defopt ctl-arrow
2794 @cindex control characters in display
2795 This buffer-local variable controls how control characters are
2796 displayed. If it is non-@code{nil}, they are displayed as a caret
2797 followed by the character: @samp{^A}. If it is @code{nil}, they are
2798 displayed as a backslash followed by three octal digits: @samp{\001}.
2799 @end defopt
2800
2801 @c Following may have overfull hbox.
2802 @defvar default-ctl-arrow
2803 The value of this variable is the default value for @code{ctl-arrow} in
2804 buffers that do not override it. @xref{Default Value}.
2805 @end defvar
2806
2807 @defopt tab-width
2808 The value of this variable is the spacing between tab stops used for
2809 displaying tab characters in Emacs buffers. The value is in units of
2810 columns, and the default is 8. Note that this feature is completely
2811 independent of the user-settable tab stops used by the command
2812 @code{tab-to-tab-stop}. @xref{Indent Tabs}.
2813 @end defopt
2814
2815 @node Display Tables
2816 @section Display Tables
2817
2818 @cindex display table
2819 You can use the @dfn{display table} feature to control how all possible
2820 character codes display on the screen. This is useful for displaying
2821 European languages that have letters not in the @sc{ascii} character
2822 set.
2823
2824 The display table maps each character code into a sequence of
2825 @dfn{glyphs}, each glyph being a graphic that takes up one character
2826 position on the screen. You can also define how to display each glyph
2827 on your terminal, using the @dfn{glyph table}.
2828
2829 Display tables affect how the mode line is displayed; if you want to
2830 force redisplay of the mode line using a new display table, call
2831 @code{force-mode-line-update} (@pxref{Mode Line Format}).
2832
2833 @menu
2834 * Display Table Format:: What a display table consists of.
2835 * Active Display Table:: How Emacs selects a display table to use.
2836 * Glyphs:: How to define a glyph, and what glyphs mean.
2837 @end menu
2838
2839 @node Display Table Format
2840 @subsection Display Table Format
2841
2842 A display table is actually a char-table (@pxref{Char-Tables}) with
2843 @code{display-table} as its subtype.
2844
2845 @defun make-display-table
2846 This creates and returns a display table. The table initially has
2847 @code{nil} in all elements.
2848 @end defun
2849
2850 The ordinary elements of the display table are indexed by character
2851 codes; the element at index @var{c} says how to display the character
2852 code @var{c}. The value should be @code{nil} or a vector of glyph
2853 values (@pxref{Glyphs}). If an element is @code{nil}, it says to
2854 display that character according to the usual display conventions
2855 (@pxref{Usual Display}).
2856
2857 If you use the display table to change the display of newline
2858 characters, the whole buffer will be displayed as one long ``line.''
2859
2860 The display table also has six ``extra slots'' which serve special
2861 purposes. Here is a table of their meanings; @code{nil} in any slot
2862 means to use the default for that slot, as stated below.
2863
2864 @table @asis
2865 @item 0
2866 The glyph for the end of a truncated screen line (the default for this
2867 is @samp{$}). @xref{Glyphs}. Newer Emacs versions, on some platforms,
2868 display arrows to indicate truncation---the display table has no effect
2869 in these situations.
2870 @item 1
2871 The glyph for the end of a continued line (the default is @samp{\}).
2872 Newer Emacs versions, on some platforms, display curved arrows to
2873 indicate truncation---the display table has no effect in these
2874 situations.
2875 @item 2
2876 The glyph for indicating a character displayed as an octal character
2877 code (the default is @samp{\}).
2878 @item 3
2879 The glyph for indicating a control character (the default is @samp{^}).
2880 @item 4
2881 A vector of glyphs for indicating the presence of invisible lines (the
2882 default is @samp{...}). @xref{Selective Display}.
2883 @item 5
2884 The glyph used to draw the border between side-by-side windows (the
2885 default is @samp{|}). @xref{Splitting Windows}. This takes effect only
2886 when there are no scroll bars; if scroll bars are supported and in use,
2887 a scroll bar separates the two windows.
2888 @end table
2889
2890 For example, here is how to construct a display table that mimics the
2891 effect of setting @code{ctl-arrow} to a non-@code{nil} value:
2892
2893 @example
2894 (setq disptab (make-display-table))
2895 (let ((i 0))
2896 (while (< i 32)
2897 (or (= i ?\t) (= i ?\n)
2898 (aset disptab i (vector ?^ (+ i 64))))
2899 (setq i (1+ i)))
2900 (aset disptab 127 (vector ?^ ??)))
2901 @end example
2902
2903 @defun display-table-slot display-table slot
2904 @tindex display-table-slot
2905 This function returns the value of the extra slot @var{slot} of
2906 @var{display-table}. The argument @var{slot} may be a number from 0 to
2907 5 inclusive, or a slot name (symbol). Valid symbols are
2908 @code{truncation}, @code{wrap}, @code{escape}, @code{control},
2909 @code{selective-display}, and @code{vertical-border}.
2910 @end defun
2911
2912 @defun set-display-table-slot display-table slot value
2913 @tindex set-display-table-slot
2914 This function stores @var{value} in the extra slot @var{slot} of
2915 @var{display-table}. The argument @var{slot} may be a number from 0 to
2916 5 inclusive, or a slot name (symbol). Valid symbols are
2917 @code{truncation}, @code{wrap}, @code{escape}, @code{control},
2918 @code{selective-display}, and @code{vertical-border}.
2919 @end defun
2920
2921 @defun describe-display-table display-table
2922 @tindex describe-display-table
2923 This function displays a description of the display table
2924 @var{display-table} in a help buffer.
2925 @end defun
2926
2927 @deffn Command describe-current-display-table
2928 @tindex describe-current-display-table
2929 This command displays a description of the current display table in a
2930 help buffer.
2931 @end deffn
2932
2933 @node Active Display Table
2934 @subsection Active Display Table
2935 @cindex active display table
2936
2937 Each window can specify a display table, and so can each buffer. When
2938 a buffer @var{b} is displayed in window @var{w}, display uses the
2939 display table for window @var{w} if it has one; otherwise, the display
2940 table for buffer @var{b} if it has one; otherwise, the standard display
2941 table if any. The display table chosen is called the @dfn{active}
2942 display table.
2943
2944 @defun window-display-table window
2945 This function returns @var{window}'s display table, or @code{nil}
2946 if @var{window} does not have an assigned display table.
2947 @end defun
2948
2949 @defun set-window-display-table window table
2950 This function sets the display table of @var{window} to @var{table}.
2951 The argument @var{table} should be either a display table or
2952 @code{nil}.
2953 @end defun
2954
2955 @defvar buffer-display-table
2956 This variable is automatically buffer-local in all buffers; its value in
2957 a particular buffer specifies the display table for that buffer. If it
2958 is @code{nil}, that means the buffer does not have an assigned display
2959 table.
2960 @end defvar
2961
2962 @defvar standard-display-table
2963 This variable's value is the default display table, used whenever a
2964 window has no display table and neither does the buffer displayed in
2965 that window. This variable is @code{nil} by default.
2966 @end defvar
2967
2968 If there is no display table to use for a particular window---that is,
2969 if the window specifies none, its buffer specifies none, and
2970 @code{standard-display-table} is @code{nil}---then Emacs uses the usual
2971 display conventions for all character codes in that window. @xref{Usual
2972 Display}.
2973
2974 A number of functions for changing the standard display table
2975 are defined in the library @file{disp-table}.
2976
2977 @node Glyphs
2978 @subsection Glyphs
2979
2980 @cindex glyph
2981 A @dfn{glyph} is a generalization of a character; it stands for an
2982 image that takes up a single character position on the screen. Glyphs
2983 are represented in Lisp as integers, just as characters are.
2984
2985 @cindex glyph table
2986 The meaning of each integer, as a glyph, is defined by the glyph
2987 table, which is the value of the variable @code{glyph-table}.
2988
2989 @defvar glyph-table
2990 The value of this variable is the current glyph table. It should be a
2991 vector; the @var{g}th element defines glyph code @var{g}. If the value
2992 is @code{nil} instead of a vector, then all glyphs are simple (see
2993 below).
2994 @end defvar
2995
2996 Here are the possible types of elements in the glyph table:
2997
2998 @table @asis
2999 @item @var{string}
3000 Send the characters in @var{string} to the terminal to output
3001 this glyph. This alternative is available on character terminals,
3002 but not under a window system.
3003
3004 @item @var{integer}
3005 Define this glyph code as an alias for glyph code @var{integer}. You
3006 can use an alias to specify a face code for the glyph; see below.
3007
3008 @item @code{nil}
3009 This glyph is simple. On an ordinary terminal, the glyph code mod
3010 524288 is the character to output. In a window system, the glyph code
3011 mod 524288 is the character to output, and the glyph code divided by
3012 524288 specifies the face number (@pxref{Face Functions}) to use while
3013 outputting it. (524288 is
3014 @ifinfo
3015 2**19.)
3016 @end ifinfo
3017 @tex
3018 $2^{19}$.)
3019 @end tex
3020 @xref{Faces}.
3021 @end table
3022
3023 If a glyph code is greater than or equal to the length of the glyph
3024 table, that code is automatically simple.
3025
3026 @defun create-glyph string
3027 @tindex create-glyph
3028 This function returns a newly-allocated glyph code which is set up to
3029 display by sending @var{string} to the terminal.
3030 @end defun
3031
3032 @node Beeping
3033 @section Beeping
3034 @cindex beeping
3035 @cindex bell
3036
3037 This section describes how to make Emacs ring the bell (or blink the
3038 screen) to attract the user's attention. Be conservative about how
3039 often you do this; frequent bells can become irritating. Also be
3040 careful not to use just beeping when signaling an error is more
3041 appropriate. (@xref{Errors}.)
3042
3043 @defun ding &optional do-not-terminate
3044 @cindex keyboard macro termination
3045 This function beeps, or flashes the screen (see @code{visible-bell} below).
3046 It also terminates any keyboard macro currently executing unless
3047 @var{do-not-terminate} is non-@code{nil}.
3048 @end defun
3049
3050 @defun beep &optional do-not-terminate
3051 This is a synonym for @code{ding}.
3052 @end defun
3053
3054 @defopt visible-bell
3055 This variable determines whether Emacs should flash the screen to
3056 represent a bell. Non-@code{nil} means yes, @code{nil} means no. This
3057 is effective on a window system, and on a character-only terminal
3058 provided the terminal's Termcap entry defines the visible bell
3059 capability (@samp{vb}).
3060 @end defopt
3061
3062 @defvar ring-bell-function
3063 @tindex ring-bell-function
3064 If this is non-@code{nil}, it specifies how Emacs should ``ring the
3065 bell.'' Its value should be a function of no arguments. If this is
3066 non-@code{nil}, it takes precedence over the @code{visible-bell}
3067 variable.
3068 @end defvar
3069
3070 @node Window Systems
3071 @section Window Systems
3072
3073 Emacs works with several window systems, most notably the X Window
3074 System. Both Emacs and X use the term ``window'', but use it
3075 differently. An Emacs frame is a single window as far as X is
3076 concerned; the individual Emacs windows are not known to X at all.
3077
3078 @defvar window-system
3079 This variable tells Lisp programs what window system Emacs is running
3080 under. The possible values are
3081
3082 @table @code
3083 @item x
3084 @cindex X Window System
3085 Emacs is displaying using X.
3086 @item pc
3087 Emacs is displaying using MS-DOS.
3088 @item w32
3089 Emacs is displaying using Windows NT or Windows 9x.
3090 @item mac
3091 Emacs is displaying using a Macintosh.
3092 @item nil
3093 Emacs is using a character-based terminal.
3094 @end table
3095 @end defvar
3096
3097 @defvar window-setup-hook
3098 This variable is a normal hook which Emacs runs after handling the
3099 initialization files. Emacs runs this hook after it has completed
3100 loading your init file, the default initialization file (if
3101 any), and the terminal-specific Lisp code, and running the hook
3102 @code{term-setup-hook}.
3103
3104 This hook is used for internal purposes: setting up communication with
3105 the window system, and creating the initial window. Users should not
3106 interfere with it.
3107 @end defvar