]> code.delx.au - gnu-emacs/blob - doc/lispref/display.texi
aa98ed40ee587da552f2897612987b138a4c6534
[gnu-emacs] / doc / lispref / display.texi
1 @c -*- mode: texinfo; coding: utf-8 -*-
2 @c This is part of the GNU Emacs Lisp Reference Manual.
3 @c Copyright (C) 1990-1995, 1998-2016 Free Software Foundation, Inc.
4 @c See the file elisp.texi for copying conditions.
5 @node Display
6 @chapter Emacs Display
7
8 This chapter describes a number of features related to the display
9 that Emacs presents to the user.
10
11 @menu
12 * Refresh Screen:: Clearing the screen and redrawing everything on it.
13 * Forcing Redisplay:: Forcing redisplay.
14 * Truncation:: Folding or wrapping long text lines.
15 * The Echo Area:: Displaying messages at the bottom of the screen.
16 * Warnings:: Displaying warning messages for the user.
17 * Invisible Text:: Hiding part of the buffer text.
18 * Selective Display:: Hiding part of the buffer text (the old way).
19 * Temporary Displays:: Displays that go away automatically.
20 * Overlays:: Use overlays to highlight parts of the buffer.
21 * Size of Displayed Text:: How large displayed text is.
22 * Line Height:: Controlling the height of lines.
23 * Faces:: A face defines a graphics style for text characters:
24 font, colors, etc.
25 * Fringes:: Controlling window fringes.
26 * Scroll Bars:: Controlling scroll bars.
27 * Window Dividers:: Separating windows visually.
28 * Display Property:: Enabling special display features.
29 * Images:: Displaying images in Emacs buffers.
30 * Xwidgets:: Displaying native widgets in Emacs buffers.
31 * Buttons:: Adding clickable buttons to Emacs buffers.
32 * Abstract Display:: Emacs's Widget for Object Collections.
33 * Blinking:: How Emacs shows the matching open parenthesis.
34 * Character Display:: How Emacs displays individual characters.
35 * Beeping:: Audible signal to the user.
36 * Window Systems:: Which window system is being used.
37 * Bidirectional Display:: Display of bidirectional scripts, such as
38 Arabic and Farsi.
39 @end menu
40
41 @node Refresh Screen
42 @section Refreshing the Screen
43 @cindex refresh the screen
44 @cindex screen refresh
45
46 The function @code{redraw-frame} clears and redisplays the entire
47 contents of a given frame (@pxref{Frames}). This is useful if the
48 screen is corrupted.
49
50 @defun redraw-frame frame
51 This function clears and redisplays frame @var{frame}.
52 @end defun
53
54 Even more powerful is @code{redraw-display}:
55
56 @deffn Command redraw-display
57 This function clears and redisplays all visible frames.
58 @end deffn
59
60 In Emacs, processing user input takes priority over redisplay. If
61 you call these functions when input is available, they don't redisplay
62 immediately, but the requested redisplay does happen
63 eventually---after all the input has been processed.
64
65 On text terminals, suspending and resuming Emacs normally also
66 refreshes the screen. Some terminal emulators record separate
67 contents for display-oriented programs such as Emacs and for ordinary
68 sequential display. If you are using such a terminal, you might want
69 to inhibit the redisplay on resumption.
70
71 @defopt no-redraw-on-reenter
72 @cindex suspend (cf. @code{no-redraw-on-reenter})
73 @cindex resume (cf. @code{no-redraw-on-reenter})
74 This variable controls whether Emacs redraws the entire screen after it
75 has been suspended and resumed. Non-@code{nil} means there is no need
76 to redraw, @code{nil} means redrawing is needed. The default is @code{nil}.
77 @end defopt
78
79 @node Forcing Redisplay
80 @section Forcing Redisplay
81 @cindex forcing redisplay
82
83 Emacs normally tries to redisplay the screen whenever it waits for
84 input. With the following function, you can request an immediate
85 attempt to redisplay, in the middle of Lisp code, without actually
86 waiting for input.
87
88 @defun redisplay &optional force
89 This function tries immediately to redisplay. The optional argument
90 @var{force}, if non-@code{nil}, forces the redisplay to be performed,
91 instead of being preempted if input is pending.
92
93 The function returns @code{t} if it actually tried to redisplay, and
94 @code{nil} otherwise. A value of @code{t} does not mean that
95 redisplay proceeded to completion; it could have been preempted by
96 newly arriving input.
97 @end defun
98
99 Although @code{redisplay} tries immediately to redisplay, it does
100 not change how Emacs decides which parts of its frame(s) to redisplay.
101 By contrast, the following function adds certain windows to the
102 pending redisplay work (as if their contents had completely changed),
103 but does not immediately try to perform redisplay.
104
105 @defun force-window-update &optional object
106 This function forces some or all windows to be updated the next time
107 Emacs does a redisplay. If @var{object} is a window, that window is
108 to be updated. If @var{object} is a buffer or buffer name, all
109 windows displaying that buffer are to be updated. If @var{object} is
110 @code{nil} (or omitted), all windows are to be updated.
111
112 This function does not do a redisplay immediately; Emacs does that as
113 it waits for input, or when the function @code{redisplay} is called.
114 @end defun
115
116 @defvar pre-redisplay-function
117 A function run just before redisplay. It is called with one argument,
118 the set of windows to be redisplayed. The set can be @code{nil},
119 meaning only the selected window, or @code{t}, meaning all the
120 windows.
121 @end defvar
122
123 @defvar pre-redisplay-functions
124 This hook is run just before redisplay. It is called once in each
125 window that is about to be redisplayed, with @code{current-buffer} set
126 to the buffer displayed in that window.
127 @end defvar
128
129 @node Truncation
130 @section Truncation
131 @cindex line wrapping
132 @cindex line truncation
133 @cindex continuation lines
134 @cindex @samp{$} in display
135 @cindex @samp{\} in display
136
137 When a line of text extends beyond the right edge of a window, Emacs
138 can @dfn{continue} the line (make it wrap to the next screen
139 line), or @dfn{truncate} the line (limit it to one screen line). The
140 additional screen lines used to display a long text line are called
141 @dfn{continuation} lines. Continuation is not the same as filling;
142 continuation happens on the screen only, not in the buffer contents,
143 and it breaks a line precisely at the right margin, not at a word
144 boundary. @xref{Filling}.
145
146 On a graphical display, tiny arrow images in the window fringes
147 indicate truncated and continued lines (@pxref{Fringes}). On a text
148 terminal, a @samp{$} in the rightmost column of the window indicates
149 truncation; a @samp{\} on the rightmost column indicates a line that
150 wraps. (The display table can specify alternate characters to use
151 for this; @pxref{Display Tables}).
152
153 @defopt truncate-lines
154 If this buffer-local variable is non-@code{nil}, lines that extend
155 beyond the right edge of the window are truncated; otherwise, they are
156 continued. As a special exception, the variable
157 @code{truncate-partial-width-windows} takes precedence in
158 @dfn{partial-width} windows (i.e., windows that do not occupy the
159 entire frame width).
160 @end defopt
161
162 @defopt truncate-partial-width-windows
163 @cindex partial-width windows
164 This variable controls line truncation in @dfn{partial-width} windows.
165 A partial-width window is one that does not occupy the entire frame
166 width (@pxref{Splitting Windows}). If the value is @code{nil}, line
167 truncation is determined by the variable @code{truncate-lines} (see
168 above). If the value is an integer @var{n}, lines are truncated if
169 the partial-width window has fewer than @var{n} columns, regardless of
170 the value of @code{truncate-lines}; if the partial-width window has
171 @var{n} or more columns, line truncation is determined by
172 @code{truncate-lines}. For any other non-@code{nil} value, lines are
173 truncated in every partial-width window, regardless of the value of
174 @code{truncate-lines}.
175 @end defopt
176
177 When horizontal scrolling (@pxref{Horizontal Scrolling}) is in use in
178 a window, that forces truncation.
179
180 @defvar wrap-prefix
181 If this buffer-local variable is non-@code{nil}, it defines a
182 @dfn{wrap prefix} which Emacs displays at the start of every
183 continuation line. (If lines are truncated, @code{wrap-prefix} is
184 never used.) Its value may be a string or an image (@pxref{Other
185 Display Specs}), or a stretch of whitespace such as specified by the
186 @code{:width} or @code{:align-to} display properties (@pxref{Specified
187 Space}). The value is interpreted in the same way as a @code{display}
188 text property. @xref{Display Property}.
189
190 A wrap prefix may also be specified for regions of text, using the
191 @code{wrap-prefix} text or overlay property. This takes precedence
192 over the @code{wrap-prefix} variable. @xref{Special Properties}.
193 @end defvar
194
195 @defvar line-prefix
196 If this buffer-local variable is non-@code{nil}, it defines a
197 @dfn{line prefix} which Emacs displays at the start of every
198 non-continuation line. Its value may be a string or an image
199 (@pxref{Other Display Specs}), or a stretch of whitespace such as
200 specified by the @code{:width} or @code{:align-to} display properties
201 (@pxref{Specified Space}). The value is interpreted in the same way
202 as a @code{display} text property. @xref{Display Property}.
203
204 A line prefix may also be specified for regions of text using the
205 @code{line-prefix} text or overlay property. This takes precedence
206 over the @code{line-prefix} variable. @xref{Special Properties}.
207 @end defvar
208
209 @ignore
210 If your buffer contains only very short lines, you might find it
211 advisable to set @code{cache-long-scans} to @code{nil}.
212
213 @defvar cache-long-scans
214 If this variable is non-@code{nil} (the default), various indentation
215 and motion functions, and Emacs redisplay, cache the results of
216 scanning the buffer, and consult the cache to avoid rescanning regions
217 of the buffer unless they are modified.
218
219 Turning off the cache speeds up processing of short lines somewhat.
220
221 This variable is automatically buffer-local in every buffer.
222 @end defvar
223 @end ignore
224
225 @node The Echo Area
226 @section The Echo Area
227 @cindex error display
228 @cindex echo area
229
230 @c FIXME: Why not use @xref{Minibuffers} directly? --xfq
231 The @dfn{echo area} is used for displaying error messages
232 (@pxref{Errors}), for messages made with the @code{message} primitive,
233 and for echoing keystrokes. It is not the same as the minibuffer,
234 despite the fact that the minibuffer appears (when active) in the same
235 place on the screen as the echo area. @xref{Minibuffer,, The
236 Minibuffer, emacs, The GNU Emacs Manual}.
237
238 Apart from the functions documented in this section, you can print
239 Lisp objects to the echo area by specifying @code{t} as the output
240 stream. @xref{Output Streams}.
241
242 @menu
243 * Displaying Messages:: Explicitly displaying text in the echo area.
244 * Progress:: Informing user about progress of a long operation.
245 * Logging Messages:: Echo area messages are logged for the user.
246 * Echo Area Customization:: Controlling the echo area.
247 @end menu
248
249 @node Displaying Messages
250 @subsection Displaying Messages in the Echo Area
251 @cindex display message in echo area
252
253 This section describes the standard functions for displaying
254 messages in the echo area.
255
256 @defun message format-string &rest arguments
257 This function displays a message in the echo area.
258 @var{format-string} is a format string, and @var{arguments} are the
259 objects for its format specifications, like in the @code{format-message}
260 function (@pxref{Formatting Strings}). The resulting formatted string
261 is displayed in the echo area; if it contains @code{face} text
262 properties, it is displayed with the specified faces (@pxref{Faces}).
263 The string is also added to the @file{*Messages*} buffer, but without
264 text properties (@pxref{Logging Messages}).
265
266 In a format string containing single quotes, curved quotes @t{‘like
267 this’} and grave quotes @t{`like this'} work better than straight
268 quotes @t{'like this'}, as @code{message} typically formats every
269 straight quote as a curved closing quote.
270
271 In batch mode, the message is printed to the standard error stream,
272 followed by a newline.
273
274 When @code{inhibit-message} is non-@code{nil}, no message will be displayed
275 in the echo area, it will only be logged to @samp{*Messages*}.
276
277 If @var{format-string} is @code{nil} or the empty string,
278 @code{message} clears the echo area; if the echo area has been
279 expanded automatically, this brings it back to its normal size. If
280 the minibuffer is active, this brings the minibuffer contents back
281 onto the screen immediately.
282
283 @example
284 @group
285 (message "Reverting `%s'..." (buffer-name))
286 @print{} Reverting ‘subr.el’...
287 @result{} "Reverting ‘subr.el’..."
288 @end group
289
290 @group
291 ---------- Echo Area ----------
292 Reverting ‘subr.el’...
293 ---------- Echo Area ----------
294 @end group
295 @end example
296
297 To automatically display a message in the echo area or in a pop-buffer,
298 depending on its size, use @code{display-message-or-buffer} (see below).
299
300 @strong{Warning:} If you want to use your own string as a message
301 verbatim, don't just write @code{(message @var{string})}. If
302 @var{string} contains @samp{%}, @samp{`}, or @samp{'} it may be
303 reformatted, with undesirable results. Instead, use @code{(message
304 "%s" @var{string})}.
305 @end defun
306
307 @defvar inhibit-message
308 When this variable is non-@code{nil}, @code{message} and related functions
309 will not use the Echo Area to display messages.
310 @end defvar
311
312 @defmac with-temp-message message &rest body
313 This construct displays a message in the echo area temporarily, during
314 the execution of @var{body}. It displays @var{message}, executes
315 @var{body}, then returns the value of the last body form while restoring
316 the previous echo area contents.
317 @end defmac
318
319 @defun message-or-box format-string &rest arguments
320 This function displays a message like @code{message}, but may display it
321 in a dialog box instead of the echo area. If this function is called in
322 a command that was invoked using the mouse---more precisely, if
323 @code{last-nonmenu-event} (@pxref{Command Loop Info}) is either
324 @code{nil} or a list---then it uses a dialog box or pop-up menu to
325 display the message. Otherwise, it uses the echo area. (This is the
326 same criterion that @code{y-or-n-p} uses to make a similar decision; see
327 @ref{Yes-or-No Queries}.)
328
329 You can force use of the mouse or of the echo area by binding
330 @code{last-nonmenu-event} to a suitable value around the call.
331 @end defun
332
333 @defun message-box format-string &rest arguments
334 @anchor{message-box}
335 This function displays a message like @code{message}, but uses a dialog
336 box (or a pop-up menu) whenever that is possible. If it is impossible
337 to use a dialog box or pop-up menu, because the terminal does not
338 support them, then @code{message-box} uses the echo area, like
339 @code{message}.
340 @end defun
341
342 @defun display-message-or-buffer message &optional buffer-name action frame
343 This function displays the message @var{message}, which may be either a
344 string or a buffer. If it is shorter than the maximum height of the
345 echo area, as defined by @code{max-mini-window-height}, it is displayed
346 in the echo area, using @code{message}. Otherwise,
347 @code{display-buffer} is used to show it in a pop-up buffer.
348
349 Returns either the string shown in the echo area, or when a pop-up
350 buffer is used, the window used to display it.
351
352 If @var{message} is a string, then the optional argument
353 @var{buffer-name} is the name of the buffer used to display it when a
354 pop-up buffer is used, defaulting to @file{*Message*}. In the case
355 where @var{message} is a string and displayed in the echo area, it is
356 not specified whether the contents are inserted into the buffer anyway.
357
358 The optional arguments @var{action} and @var{frame} are as for
359 @code{display-buffer}, and only used if a buffer is displayed.
360 @end defun
361
362 @defun current-message
363 This function returns the message currently being displayed in the
364 echo area, or @code{nil} if there is none.
365 @end defun
366
367 @node Progress
368 @subsection Reporting Operation Progress
369 @cindex progress reporting
370
371 When an operation can take a while to finish, you should inform the
372 user about the progress it makes. This way the user can estimate
373 remaining time and clearly see that Emacs is busy working, not hung.
374 A convenient way to do this is to use a @dfn{progress reporter}.
375
376 Here is a working example that does nothing useful:
377
378 @smallexample
379 (let ((progress-reporter
380 (make-progress-reporter "Collecting mana for Emacs..."
381 0 500)))
382 (dotimes (k 500)
383 (sit-for 0.01)
384 (progress-reporter-update progress-reporter k))
385 (progress-reporter-done progress-reporter))
386 @end smallexample
387
388 @defun make-progress-reporter message &optional min-value max-value current-value min-change min-time
389 This function creates and returns a progress reporter object, which
390 you will use as an argument for the other functions listed below. The
391 idea is to precompute as much data as possible to make progress
392 reporting very fast.
393
394 When this progress reporter is subsequently used, it will display
395 @var{message} in the echo area, followed by progress percentage.
396 @var{message} is treated as a simple string. If you need it to depend
397 on a filename, for instance, use @code{format-message} before calling this
398 function.
399
400 The arguments @var{min-value} and @var{max-value} should be numbers
401 standing for the starting and final states of the operation. For
402 instance, an operation that scans a buffer should set these to the
403 results of @code{point-min} and @code{point-max} correspondingly.
404 @var{max-value} should be greater than @var{min-value}.
405
406 Alternatively, you can set @var{min-value} and @var{max-value} to
407 @code{nil}. In that case, the progress reporter does not report
408 process percentages; it instead displays a ``spinner'' that rotates a
409 notch each time you update the progress reporter.
410
411 If @var{min-value} and @var{max-value} are numbers, you can give the
412 argument @var{current-value} a numerical value specifying the initial
413 progress; if omitted, this defaults to @var{min-value}.
414
415 The remaining arguments control the rate of echo area updates. The
416 progress reporter will wait for at least @var{min-change} more
417 percents of the operation to be completed before printing next
418 message; the default is one percent. @var{min-time} specifies the
419 minimum time in seconds to pass between successive prints; the default
420 is 0.2 seconds. (On some operating systems, the progress reporter may
421 handle fractions of seconds with varying precision).
422
423 This function calls @code{progress-reporter-update}, so the first
424 message is printed immediately.
425 @end defun
426
427 @defun progress-reporter-update reporter &optional value
428 This function does the main work of reporting progress of your
429 operation. It displays the message of @var{reporter}, followed by
430 progress percentage determined by @var{value}. If percentage is zero,
431 or close enough according to the @var{min-change} and @var{min-time}
432 arguments, then it is omitted from the output.
433
434 @var{reporter} must be the result of a call to
435 @code{make-progress-reporter}. @var{value} specifies the current
436 state of your operation and must be between @var{min-value} and
437 @var{max-value} (inclusive) as passed to
438 @code{make-progress-reporter}. For instance, if you scan a buffer,
439 then @var{value} should be the result of a call to @code{point}.
440
441 This function respects @var{min-change} and @var{min-time} as passed
442 to @code{make-progress-reporter} and so does not output new messages
443 on every invocation. It is thus very fast and normally you should not
444 try to reduce the number of calls to it: resulting overhead will most
445 likely negate your effort.
446 @end defun
447
448 @defun progress-reporter-force-update reporter &optional value new-message
449 This function is similar to @code{progress-reporter-update} except
450 that it prints a message in the echo area unconditionally.
451
452 The first two arguments have the same meaning as for
453 @code{progress-reporter-update}. Optional @var{new-message} allows
454 you to change the message of the @var{reporter}. Since this function
455 always updates the echo area, such a change will be immediately
456 presented to the user.
457 @end defun
458
459 @defun progress-reporter-done reporter
460 This function should be called when the operation is finished. It
461 prints the message of @var{reporter} followed by word @samp{done} in the
462 echo area.
463
464 You should always call this function and not hope for
465 @code{progress-reporter-update} to print @samp{100%}. Firstly, it may
466 never print it, there are many good reasons for this not to happen.
467 Secondly, @samp{done} is more explicit.
468 @end defun
469
470 @defmac dotimes-with-progress-reporter (var count [result]) message body@dots{}
471 This is a convenience macro that works the same way as @code{dotimes}
472 does, but also reports loop progress using the functions described
473 above. It allows you to save some typing.
474
475 You can rewrite the example in the beginning of this node using
476 this macro this way:
477
478 @example
479 (dotimes-with-progress-reporter
480 (k 500)
481 "Collecting some mana for Emacs..."
482 (sit-for 0.01))
483 @end example
484 @end defmac
485
486 @node Logging Messages
487 @subsection Logging Messages in @file{*Messages*}
488 @cindex logging echo-area messages
489
490 Almost all the messages displayed in the echo area are also recorded
491 in the @file{*Messages*} buffer so that the user can refer back to
492 them. This includes all the messages that are output with
493 @code{message}. By default, this buffer is read-only and uses the major
494 mode @code{messages-buffer-mode}. Nothing prevents the user from
495 killing the @file{*Messages*} buffer, but the next display of a message
496 recreates it. Any Lisp code that needs to access the
497 @file{*Messages*} buffer directly and wants to ensure that it exists
498 should use the function @code{messages-buffer}.
499
500 @defun messages-buffer
501 This function returns the @file{*Messages*} buffer. If it does not
502 exist, it creates it, and switches it to @code{messages-buffer-mode}.
503 @end defun
504
505 @defopt message-log-max
506 This variable specifies how many lines to keep in the @file{*Messages*}
507 buffer. The value @code{t} means there is no limit on how many lines to
508 keep. The value @code{nil} disables message logging entirely. Here's
509 how to display a message and prevent it from being logged:
510
511 @example
512 (let (message-log-max)
513 (message @dots{}))
514 @end example
515 @end defopt
516
517 To make @file{*Messages*} more convenient for the user, the logging
518 facility combines successive identical messages. It also combines
519 successive related messages for the sake of two cases: question
520 followed by answer, and a series of progress messages.
521
522 A question followed by an answer has two messages like the
523 ones produced by @code{y-or-n-p}: the first is @samp{@var{question}},
524 and the second is @samp{@var{question}...@var{answer}}. The first
525 message conveys no additional information beyond what's in the second,
526 so logging the second message discards the first from the log.
527
528 A series of progress messages has successive messages like
529 those produced by @code{make-progress-reporter}. They have the form
530 @samp{@var{base}...@var{how-far}}, where @var{base} is the same each
531 time, while @var{how-far} varies. Logging each message in the series
532 discards the previous one, provided they are consecutive.
533
534 The functions @code{make-progress-reporter} and @code{y-or-n-p}
535 don't have to do anything special to activate the message log
536 combination feature. It operates whenever two consecutive messages
537 are logged that share a common prefix ending in @samp{...}.
538
539 @node Echo Area Customization
540 @subsection Echo Area Customization
541 @cindex echo area customization
542
543 These variables control details of how the echo area works.
544
545 @defvar cursor-in-echo-area
546 This variable controls where the cursor appears when a message is
547 displayed in the echo area. If it is non-@code{nil}, then the cursor
548 appears at the end of the message. Otherwise, the cursor appears at
549 point---not in the echo area at all.
550
551 The value is normally @code{nil}; Lisp programs bind it to @code{t}
552 for brief periods of time.
553 @end defvar
554
555 @defvar echo-area-clear-hook
556 This normal hook is run whenever the echo area is cleared---either by
557 @code{(message nil)} or for any other reason.
558 @end defvar
559
560 @defopt echo-keystrokes
561 This variable determines how much time should elapse before command
562 characters echo. Its value must be a number, and specifies the
563 number of seconds to wait before echoing. If the user types a prefix
564 key (such as @kbd{C-x}) and then delays this many seconds before
565 continuing, the prefix key is echoed in the echo area. (Once echoing
566 begins in a key sequence, all subsequent characters in the same key
567 sequence are echoed immediately.)
568
569 If the value is zero, then command input is not echoed.
570 @end defopt
571
572 @defvar message-truncate-lines
573 Normally, displaying a long message resizes the echo area to display
574 the entire message. But if the variable @code{message-truncate-lines}
575 is non-@code{nil}, the echo area does not resize, and the message is
576 truncated to fit it.
577 @end defvar
578
579 The variable @code{max-mini-window-height}, which specifies the
580 maximum height for resizing minibuffer windows, also applies to the
581 echo area (which is really a special use of the minibuffer window;
582 @pxref{Minibuffer Misc}).
583
584 @node Warnings
585 @section Reporting Warnings
586 @cindex warnings
587
588 @dfn{Warnings} are a facility for a program to inform the user of a
589 possible problem, but continue running.
590
591 @menu
592 * Warning Basics:: Warnings concepts and functions to report them.
593 * Warning Variables:: Variables programs bind to customize their warnings.
594 * Warning Options:: Variables users set to control display of warnings.
595 * Delayed Warnings:: Deferring a warning until the end of a command.
596 @end menu
597
598 @node Warning Basics
599 @subsection Warning Basics
600 @cindex severity level
601
602 Every warning has a textual message, which explains the problem for
603 the user, and a @dfn{severity level} which is a symbol. Here are the
604 possible severity levels, in order of decreasing severity, and their
605 meanings:
606
607 @table @code
608 @item :emergency
609 A problem that will seriously impair Emacs operation soon
610 if you do not attend to it promptly.
611 @item :error
612 A report of data or circumstances that are inherently wrong.
613 @item :warning
614 A report of data or circumstances that are not inherently wrong, but
615 raise suspicion of a possible problem.
616 @item :debug
617 A report of information that may be useful if you are debugging.
618 @end table
619
620 When your program encounters invalid input data, it can either
621 signal a Lisp error by calling @code{error} or @code{signal} or report
622 a warning with severity @code{:error}. Signaling a Lisp error is the
623 easiest thing to do, but it means the program cannot continue
624 processing. If you want to take the trouble to implement a way to
625 continue processing despite the bad data, then reporting a warning of
626 severity @code{:error} is the right way to inform the user of the
627 problem. For instance, the Emacs Lisp byte compiler can report an
628 error that way and continue compiling other functions. (If the
629 program signals a Lisp error and then handles it with
630 @code{condition-case}, the user won't see the error message; it could
631 show the message to the user by reporting it as a warning.)
632
633 @c FIXME: Why use "(bytecomp)" instead of "'bytecomp" or simply
634 @c "bytecomp" here? The parens are part of warning-type-format but
635 @c not part of the warning type. --xfq
636 @cindex warning type
637 Each warning has a @dfn{warning type} to classify it. The type is a
638 list of symbols. The first symbol should be the custom group that you
639 use for the program's user options. For example, byte compiler
640 warnings use the warning type @code{(bytecomp)}. You can also
641 subcategorize the warnings, if you wish, by using more symbols in the
642 list.
643
644 @defun display-warning type message &optional level buffer-name
645 This function reports a warning, using @var{message} as the message
646 and @var{type} as the warning type. @var{level} should be the
647 severity level, with @code{:warning} being the default.
648
649 @var{buffer-name}, if non-@code{nil}, specifies the name of the buffer
650 for logging the warning. By default, it is @file{*Warnings*}.
651 @end defun
652
653 @defun lwarn type level message &rest args
654 This function reports a warning using the value of @code{(format-message
655 @var{message} @var{args}...)} as the message in the @file{*Warnings*}
656 buffer. In other respects it is equivalent to @code{display-warning}.
657 @end defun
658
659 @defun warn message &rest args
660 This function reports a warning using the value of @code{(format-message
661 @var{message} @var{args}...)} as the message, @code{(emacs)} as the
662 type, and @code{:warning} as the severity level. It exists for
663 compatibility only; we recommend not using it, because you should
664 specify a specific warning type.
665 @end defun
666
667 @node Warning Variables
668 @subsection Warning Variables
669 @cindex warning variables
670
671 Programs can customize how their warnings appear by binding
672 the variables described in this section.
673
674 @defvar warning-levels
675 This list defines the meaning and severity order of the warning
676 severity levels. Each element defines one severity level,
677 and they are arranged in order of decreasing severity.
678
679 Each element has the form @code{(@var{level} @var{string}
680 @var{function})}, where @var{level} is the severity level it defines.
681 @var{string} specifies the textual description of this level.
682 @var{string} should use @samp{%s} to specify where to put the warning
683 type information, or it can omit the @samp{%s} so as not to include
684 that information.
685
686 The optional @var{function}, if non-@code{nil}, is a function to call
687 with no arguments, to get the user's attention.
688
689 Normally you should not change the value of this variable.
690 @end defvar
691
692 @defvar warning-prefix-function
693 If non-@code{nil}, the value is a function to generate prefix text for
694 warnings. Programs can bind the variable to a suitable function.
695 @code{display-warning} calls this function with the warnings buffer
696 current, and the function can insert text in it. That text becomes
697 the beginning of the warning message.
698
699 The function is called with two arguments, the severity level and its
700 entry in @code{warning-levels}. It should return a list to use as the
701 entry (this value need not be an actual member of
702 @code{warning-levels}). By constructing this value, the function can
703 change the severity of the warning, or specify different handling for
704 a given severity level.
705
706 If the variable's value is @code{nil} then there is no function
707 to call.
708 @end defvar
709
710 @defvar warning-series
711 Programs can bind this variable to @code{t} to say that the next
712 warning should begin a series. When several warnings form a series,
713 that means to leave point on the first warning of the series, rather
714 than keep moving it for each warning so that it appears on the last one.
715 The series ends when the local binding is unbound and
716 @code{warning-series} becomes @code{nil} again.
717
718 The value can also be a symbol with a function definition. That is
719 equivalent to @code{t}, except that the next warning will also call
720 the function with no arguments with the warnings buffer current. The
721 function can insert text which will serve as a header for the series
722 of warnings.
723
724 Once a series has begun, the value is a marker which points to the
725 buffer position in the warnings buffer of the start of the series.
726
727 The variable's normal value is @code{nil}, which means to handle
728 each warning separately.
729 @end defvar
730
731 @defvar warning-fill-prefix
732 When this variable is non-@code{nil}, it specifies a fill prefix to
733 use for filling each warning's text.
734 @end defvar
735
736 @defvar warning-type-format
737 This variable specifies the format for displaying the warning type
738 in the warning message. The result of formatting the type this way
739 gets included in the message under the control of the string in the
740 entry in @code{warning-levels}. The default value is @code{" (%s)"}.
741 If you bind it to @code{""} then the warning type won't appear at
742 all.
743 @end defvar
744
745 @node Warning Options
746 @subsection Warning Options
747 @cindex warning options
748
749 These variables are used by users to control what happens
750 when a Lisp program reports a warning.
751
752 @defopt warning-minimum-level
753 This user option specifies the minimum severity level that should be
754 shown immediately to the user. The default is @code{:warning}, which
755 means to immediately display all warnings except @code{:debug}
756 warnings.
757 @end defopt
758
759 @defopt warning-minimum-log-level
760 This user option specifies the minimum severity level that should be
761 logged in the warnings buffer. The default is @code{:warning}, which
762 means to log all warnings except @code{:debug} warnings.
763 @end defopt
764
765 @defopt warning-suppress-types
766 This list specifies which warning types should not be displayed
767 immediately for the user. Each element of the list should be a list
768 of symbols. If its elements match the first elements in a warning
769 type, then that warning is not displayed immediately.
770 @end defopt
771
772 @defopt warning-suppress-log-types
773 This list specifies which warning types should not be logged in the
774 warnings buffer. Each element of the list should be a list of
775 symbols. If it matches the first few elements in a warning type, then
776 that warning is not logged.
777 @end defopt
778
779 @node Delayed Warnings
780 @subsection Delayed Warnings
781 @cindex delayed warnings
782
783 Sometimes, you may wish to avoid showing a warning while a command is
784 running, and only show it only after the end of the command. You can
785 use the variable @code{delayed-warnings-list} for this.
786
787 @defvar delayed-warnings-list
788 The value of this variable is a list of warnings to be displayed after
789 the current command has finished. Each element must be a list
790
791 @smallexample
792 (@var{type} @var{message} [@var{level} [@var{buffer-name}]])
793 @end smallexample
794
795 @noindent
796 with the same form, and the same meanings, as the argument list of
797 @code{display-warning} (@pxref{Warning Basics}). Immediately after
798 running @code{post-command-hook} (@pxref{Command Overview}), the Emacs
799 command loop displays all the warnings specified by this variable,
800 then resets it to @code{nil}.
801 @end defvar
802
803 Programs which need to further customize the delayed warnings
804 mechanism can change the variable @code{delayed-warnings-hook}:
805
806 @defvar delayed-warnings-hook
807 This is a normal hook which is run by the Emacs command loop, after
808 @code{post-command-hook}, in order to to process and display delayed
809 warnings.
810
811 Its default value is a list of two functions:
812
813 @smallexample
814 (collapse-delayed-warnings display-delayed-warnings)
815 @end smallexample
816
817 @findex collapse-delayed-warnings
818 @findex display-delayed-warnings
819 @noindent
820 The function @code{collapse-delayed-warnings} removes repeated entries
821 from @code{delayed-warnings-list}. The function
822 @code{display-delayed-warnings} calls @code{display-warning} on each
823 of the entries in @code{delayed-warnings-list}, in turn, and then sets
824 @code{delayed-warnings-list} to @code{nil}.
825 @end defvar
826
827 @node Invisible Text
828 @section Invisible Text
829
830 @cindex invisible text
831 You can make characters @dfn{invisible}, so that they do not appear on
832 the screen, with the @code{invisible} property. This can be either a
833 text property (@pxref{Text Properties}) or an overlay property
834 (@pxref{Overlays}). Cursor motion also partly ignores these
835 characters; if the command loop finds that point is inside a range of
836 invisible text after a command, it relocates point to the other side
837 of the text.
838
839 In the simplest case, any non-@code{nil} @code{invisible} property makes
840 a character invisible. This is the default case---if you don't alter
841 the default value of @code{buffer-invisibility-spec}, this is how the
842 @code{invisible} property works. You should normally use @code{t}
843 as the value of the @code{invisible} property if you don't plan
844 to set @code{buffer-invisibility-spec} yourself.
845
846 More generally, you can use the variable @code{buffer-invisibility-spec}
847 to control which values of the @code{invisible} property make text
848 invisible. This permits you to classify the text into different subsets
849 in advance, by giving them different @code{invisible} values, and
850 subsequently make various subsets visible or invisible by changing the
851 value of @code{buffer-invisibility-spec}.
852
853 Controlling visibility with @code{buffer-invisibility-spec} is
854 especially useful in a program to display the list of entries in a
855 database. It permits the implementation of convenient filtering
856 commands to view just a part of the entries in the database. Setting
857 this variable is very fast, much faster than scanning all the text in
858 the buffer looking for properties to change.
859
860 @defvar buffer-invisibility-spec
861 This variable specifies which kinds of @code{invisible} properties
862 actually make a character invisible. Setting this variable makes it
863 buffer-local.
864
865 @table @asis
866 @item @code{t}
867 A character is invisible if its @code{invisible} property is
868 non-@code{nil}. This is the default.
869
870 @item a list
871 Each element of the list specifies a criterion for invisibility; if a
872 character's @code{invisible} property fits any one of these criteria,
873 the character is invisible. The list can have two kinds of elements:
874
875 @table @code
876 @item @var{atom}
877 A character is invisible if its @code{invisible} property value is
878 @var{atom} or if it is a list with @var{atom} as a member; comparison
879 is done with @code{eq}.
880
881 @item (@var{atom} . t)
882 A character is invisible if its @code{invisible} property value is
883 @var{atom} or if it is a list with @var{atom} as a member; comparison
884 is done with @code{eq}. Moreover, a sequence of such characters
885 displays as an ellipsis.
886 @end table
887 @end table
888 @end defvar
889
890 Two functions are specifically provided for adding elements to
891 @code{buffer-invisibility-spec} and removing elements from it.
892
893 @defun add-to-invisibility-spec element
894 This function adds the element @var{element} to
895 @code{buffer-invisibility-spec}. If @code{buffer-invisibility-spec}
896 was @code{t}, it changes to a list, @code{(t)}, so that text whose
897 @code{invisible} property is @code{t} remains invisible.
898 @end defun
899
900 @defun remove-from-invisibility-spec element
901 This removes the element @var{element} from
902 @code{buffer-invisibility-spec}. This does nothing if @var{element}
903 is not in the list.
904 @end defun
905
906 A convention for use of @code{buffer-invisibility-spec} is that a
907 major mode should use the mode's own name as an element of
908 @code{buffer-invisibility-spec} and as the value of the
909 @code{invisible} property:
910
911 @example
912 ;; @r{If you want to display an ellipsis:}
913 (add-to-invisibility-spec '(my-symbol . t))
914 ;; @r{If you don't want ellipsis:}
915 (add-to-invisibility-spec 'my-symbol)
916
917 (overlay-put (make-overlay beginning end)
918 'invisible 'my-symbol)
919
920 ;; @r{When done with the invisibility:}
921 (remove-from-invisibility-spec '(my-symbol . t))
922 ;; @r{Or respectively:}
923 (remove-from-invisibility-spec 'my-symbol)
924 @end example
925
926 You can check for invisibility using the following function:
927
928 @defun invisible-p pos-or-prop
929 If @var{pos-or-prop} is a marker or number, this function returns a
930 non-@code{nil} value if the text at that position is invisible.
931
932 If @var{pos-or-prop} is any other kind of Lisp object, that is taken
933 to mean a possible value of the @code{invisible} text or overlay
934 property. In that case, this function returns a non-@code{nil} value
935 if that value would cause text to become invisible, based on the
936 current value of @code{buffer-invisibility-spec}.
937 @end defun
938
939 @vindex line-move-ignore-invisible
940 Ordinarily, functions that operate on text or move point do not care
941 whether the text is invisible, they process invisible characters and
942 visible characters alike. The user-level line motion commands,
943 such as @code{next-line}, @code{previous-line}, ignore invisible
944 newlines if @code{line-move-ignore-invisible} is non-@code{nil} (the
945 default), i.e., behave like these invisible newlines didn't exist in
946 the buffer, but only because they are explicitly programmed to do so.
947
948 If a command ends with point inside or at the boundary of
949 invisible text, the main editing loop relocates point to one of the
950 two ends of the invisible text. Emacs chooses the direction of
951 relocation so that it is the same as the overall movement direction of
952 the command; if in doubt, it prefers a position where an inserted char
953 would not inherit the @code{invisible} property. Additionally, if the
954 text is not replaced by an ellipsis and the command only moved within
955 the invisible text, then point is moved one extra character so as to
956 try and reflect the command's movement by a visible movement of the
957 cursor.
958
959 Thus, if the command moved point back to an invisible range (with the usual
960 stickiness), Emacs moves point back to the beginning of that range. If the
961 command moved point forward into an invisible range, Emacs moves point forward
962 to the first visible character that follows the invisible text and then forward
963 one more character.
964
965 These @dfn{adjustments} of point that ended up in the middle of
966 invisible text can be disabled by setting @code{disable-point-adjustment}
967 to a non-@code{nil} value. @xref{Adjusting Point}.
968
969 Incremental search can make invisible overlays visible temporarily
970 and/or permanently when a match includes invisible text. To enable
971 this, the overlay should have a non-@code{nil}
972 @code{isearch-open-invisible} property. The property value should be a
973 function to be called with the overlay as an argument. This function
974 should make the overlay visible permanently; it is used when the match
975 overlaps the overlay on exit from the search.
976
977 During the search, such overlays are made temporarily visible by
978 temporarily modifying their invisible and intangible properties. If you
979 want this to be done differently for a certain overlay, give it an
980 @code{isearch-open-invisible-temporary} property which is a function.
981 The function is called with two arguments: the first is the overlay, and
982 the second is @code{nil} to make the overlay visible, or @code{t} to
983 make it invisible again.
984
985 @node Selective Display
986 @section Selective Display
987 @c @cindex selective display Duplicates selective-display
988
989 @dfn{Selective display} refers to a pair of related features for
990 hiding certain lines on the screen.
991
992 @cindex explicit selective display
993 The first variant, explicit selective display, was designed for use in a Lisp
994 program: it controls which lines are hidden by altering the text. This kind of
995 hiding is now obsolete; instead you can get the same effect with the
996 @code{invisible} property (@pxref{Invisible Text}).
997
998 In the second variant, the choice of lines to hide is made
999 automatically based on indentation. This variant is designed to be a
1000 user-level feature.
1001
1002 The way you control explicit selective display is by replacing a
1003 newline (control-j) with a carriage return (control-m). The text that
1004 was formerly a line following that newline is now hidden. Strictly
1005 speaking, it is temporarily no longer a line at all, since only
1006 newlines can separate lines; it is now part of the previous line.
1007
1008 Selective display does not directly affect editing commands. For
1009 example, @kbd{C-f} (@code{forward-char}) moves point unhesitatingly
1010 into hidden text. However, the replacement of newline characters with
1011 carriage return characters affects some editing commands. For
1012 example, @code{next-line} skips hidden lines, since it searches only
1013 for newlines. Modes that use selective display can also define
1014 commands that take account of the newlines, or that control which
1015 parts of the text are hidden.
1016
1017 When you write a selectively displayed buffer into a file, all the
1018 control-m's are output as newlines. This means that when you next read
1019 in the file, it looks OK, with nothing hidden. The selective display
1020 effect is seen only within Emacs.
1021
1022 @defvar selective-display
1023 This buffer-local variable enables selective display. This means that
1024 lines, or portions of lines, may be made hidden.
1025
1026 @itemize @bullet
1027 @item
1028 If the value of @code{selective-display} is @code{t}, then the character
1029 control-m marks the start of hidden text; the control-m, and the rest
1030 of the line following it, are not displayed. This is explicit selective
1031 display.
1032
1033 @item
1034 If the value of @code{selective-display} is a positive integer, then
1035 lines that start with more than that many columns of indentation are not
1036 displayed.
1037 @end itemize
1038
1039 When some portion of a buffer is hidden, the vertical movement
1040 commands operate as if that portion did not exist, allowing a single
1041 @code{next-line} command to skip any number of hidden lines.
1042 However, character movement commands (such as @code{forward-char}) do
1043 not skip the hidden portion, and it is possible (if tricky) to insert
1044 or delete text in an hidden portion.
1045
1046 In the examples below, we show the @emph{display appearance} of the
1047 buffer @code{foo}, which changes with the value of
1048 @code{selective-display}. The @emph{contents} of the buffer do not
1049 change.
1050
1051 @example
1052 @group
1053 (setq selective-display nil)
1054 @result{} nil
1055
1056 ---------- Buffer: foo ----------
1057 1 on this column
1058 2on this column
1059 3n this column
1060 3n this column
1061 2on this column
1062 1 on this column
1063 ---------- Buffer: foo ----------
1064 @end group
1065
1066 @group
1067 (setq selective-display 2)
1068 @result{} 2
1069
1070 ---------- Buffer: foo ----------
1071 1 on this column
1072 2on this column
1073 2on this column
1074 1 on this column
1075 ---------- Buffer: foo ----------
1076 @end group
1077 @end example
1078 @end defvar
1079
1080 @defopt selective-display-ellipses
1081 If this buffer-local variable is non-@code{nil}, then Emacs displays
1082 @samp{@dots{}} at the end of a line that is followed by hidden text.
1083 This example is a continuation of the previous one.
1084
1085 @example
1086 @group
1087 (setq selective-display-ellipses t)
1088 @result{} t
1089
1090 ---------- Buffer: foo ----------
1091 1 on this column
1092 2on this column ...
1093 2on this column
1094 1 on this column
1095 ---------- Buffer: foo ----------
1096 @end group
1097 @end example
1098
1099 You can use a display table to substitute other text for the ellipsis
1100 (@samp{@dots{}}). @xref{Display Tables}.
1101 @end defopt
1102
1103 @node Temporary Displays
1104 @section Temporary Displays
1105 @cindex temporary display
1106 @cindex temporary buffer display
1107
1108 Temporary displays are used by Lisp programs to put output into a
1109 buffer and then present it to the user for perusal rather than for
1110 editing. Many help commands use this feature.
1111
1112 @defmac with-output-to-temp-buffer buffer-name body@dots{}
1113 This function executes the forms in @var{body} while arranging to insert
1114 any output they print into the buffer named @var{buffer-name}, which is
1115 first created if necessary, and put into Help mode. (See the similar
1116 form @code{with-temp-buffer-window} below.) Finally, the buffer is
1117 displayed in some window, but that window is not selected.
1118
1119 If the forms in @var{body} do not change the major mode in the output
1120 buffer, so that it is still Help mode at the end of their execution,
1121 then @code{with-output-to-temp-buffer} makes this buffer read-only at
1122 the end, and also scans it for function and variable names to make them
1123 into clickable cross-references. @xref{Docstring hyperlinks, , Tips for
1124 Documentation Strings}, in particular the item on hyperlinks in
1125 documentation strings, for more details.
1126
1127 The string @var{buffer-name} specifies the temporary buffer, which need
1128 not already exist. The argument must be a string, not a buffer. The
1129 buffer is erased initially (with no questions asked), and it is marked
1130 as unmodified after @code{with-output-to-temp-buffer} exits.
1131
1132 @code{with-output-to-temp-buffer} binds @code{standard-output} to the
1133 temporary buffer, then it evaluates the forms in @var{body}. Output
1134 using the Lisp output functions within @var{body} goes by default to
1135 that buffer (but screen display and messages in the echo area, although
1136 they are ``output'' in the general sense of the word, are not affected).
1137 @xref{Output Functions}.
1138
1139 Several hooks are available for customizing the behavior
1140 of this construct; they are listed below.
1141
1142 The value of the last form in @var{body} is returned.
1143
1144 @example
1145 @group
1146 ---------- Buffer: foo ----------
1147 This is the contents of foo.
1148 ---------- Buffer: foo ----------
1149 @end group
1150
1151 @group
1152 (with-output-to-temp-buffer "foo"
1153 (print 20)
1154 (print standard-output))
1155 @result{} #<buffer foo>
1156
1157 ---------- Buffer: foo ----------
1158
1159 20
1160
1161 #<buffer foo>
1162
1163 ---------- Buffer: foo ----------
1164 @end group
1165 @end example
1166 @end defmac
1167
1168 @defopt temp-buffer-show-function
1169 If this variable is non-@code{nil}, @code{with-output-to-temp-buffer}
1170 calls it as a function to do the job of displaying a help buffer. The
1171 function gets one argument, which is the buffer it should display.
1172
1173 It is a good idea for this function to run @code{temp-buffer-show-hook}
1174 just as @code{with-output-to-temp-buffer} normally would, inside of
1175 @code{save-selected-window} and with the chosen window and buffer
1176 selected.
1177 @end defopt
1178
1179 @defvar temp-buffer-setup-hook
1180 This normal hook is run by @code{with-output-to-temp-buffer} before
1181 evaluating @var{body}. When the hook runs, the temporary buffer is
1182 current. This hook is normally set up with a function to put the
1183 buffer in Help mode.
1184 @end defvar
1185
1186 @defvar temp-buffer-show-hook
1187 This normal hook is run by @code{with-output-to-temp-buffer} after
1188 displaying the temporary buffer. When the hook runs, the temporary buffer
1189 is current, and the window it was displayed in is selected.
1190 @end defvar
1191
1192 @defmac with-temp-buffer-window buffer-or-name action quit-function body@dots{}
1193 This macro is similar to @code{with-output-to-temp-buffer}. Like that
1194 construct, it executes @var{body} while arranging to insert any output
1195 it prints into the buffer named @var{buffer-or-name} and displays that
1196 buffer in some window. Unlike @code{with-output-to-temp-buffer},
1197 however, it does not automatically switch that buffer to Help mode.
1198
1199 The argument @var{buffer-or-name} specifies the temporary buffer. It
1200 can be either a buffer, which must already exist, or a string, in which
1201 case a buffer of that name is created, if necessary. The buffer is
1202 marked as unmodified and read-only when @code{with-temp-buffer-window}
1203 exits.
1204
1205 This macro does not call @code{temp-buffer-show-function}. Rather, it
1206 passes the @var{action} argument to @code{display-buffer}
1207 (@pxref{Choosing Window}) in order to display the buffer.
1208
1209 The value of the last form in @var{body} is returned, unless the
1210 argument @var{quit-function} is specified. In that case, it is called
1211 with two arguments: the window showing the buffer and the result of
1212 @var{body}. The final return value is then whatever @var{quit-function}
1213 returns.
1214
1215 @vindex temp-buffer-window-setup-hook
1216 @vindex temp-buffer-window-show-hook
1217 This macro uses the normal hooks @code{temp-buffer-window-setup-hook}
1218 and @code{temp-buffer-window-show-hook} in place of the analogous hooks
1219 run by @code{with-output-to-temp-buffer}.
1220 @end defmac
1221
1222 The two constructs described next are mostly identical to
1223 @code{with-temp-buffer-window} but differ from it as specified:
1224
1225 @defmac with-current-buffer-window buffer-or-name action quit-function &rest body
1226 This macro is like @code{with-temp-buffer-window} but unlike that makes
1227 the buffer specified by @var{buffer-or-name} current for running
1228 @var{body}.
1229 @end defmac
1230
1231 @defmac with-displayed-buffer-window buffer-or-name action quit-function &rest body
1232 This macro is like @code{with-current-buffer-window} but unlike that
1233 displays the buffer specified by @var{buffer-or-name} @emph{before}
1234 running @var{body}.
1235 @end defmac
1236
1237 A window showing a temporary buffer can be fit to the size of that
1238 buffer using the following mode:
1239
1240 @defopt temp-buffer-resize-mode
1241 When this minor mode is enabled, windows showing a temporary buffer are
1242 automatically resized to fit their buffer's contents.
1243
1244 A window is resized if and only if it has been specially created for the
1245 buffer. In particular, windows that have shown another buffer before
1246 are not resized. By default, this mode uses @code{fit-window-to-buffer}
1247 (@pxref{Resizing Windows}) for resizing. You can specify a different
1248 function by customizing the options @code{temp-buffer-max-height} and
1249 @code{temp-buffer-max-width} below.
1250 @end defopt
1251
1252 @defopt temp-buffer-max-height
1253 This option specifies the maximum height (in lines) of a window
1254 displaying a temporary buffer when @code{temp-buffer-resize-mode} is
1255 enabled. It can also be a function to be called to choose the height
1256 for such a buffer. It gets one argument, the buffer, and should return
1257 a positive integer. At the time the function is called, the window to
1258 be resized is selected.
1259 @end defopt
1260
1261 @defopt temp-buffer-max-width
1262 This option specifies the maximum width of a window (in columns)
1263 displaying a temporary buffer when @code{temp-buffer-resize-mode} is
1264 enabled. It can also be a function to be called to choose the width for
1265 such a buffer. It gets one argument, the buffer, and should return a
1266 positive integer. At the time the function is called, the window to be
1267 resized is selected.
1268 @end defopt
1269
1270 The following function uses the current buffer for temporal display:
1271
1272 @defun momentary-string-display string position &optional char message
1273 This function momentarily displays @var{string} in the current buffer at
1274 @var{position}. It has no effect on the undo list or on the buffer's
1275 modification status.
1276
1277 The momentary display remains until the next input event. If the next
1278 input event is @var{char}, @code{momentary-string-display} ignores it
1279 and returns. Otherwise, that event remains buffered for subsequent use
1280 as input. Thus, typing @var{char} will simply remove the string from
1281 the display, while typing (say) @kbd{C-f} will remove the string from
1282 the display and later (presumably) move point forward. The argument
1283 @var{char} is a space by default.
1284
1285 The return value of @code{momentary-string-display} is not meaningful.
1286
1287 If the string @var{string} does not contain control characters, you can
1288 do the same job in a more general way by creating (and then subsequently
1289 deleting) an overlay with a @code{before-string} property.
1290 @xref{Overlay Properties}.
1291
1292 If @var{message} is non-@code{nil}, it is displayed in the echo area
1293 while @var{string} is displayed in the buffer. If it is @code{nil}, a
1294 default message says to type @var{char} to continue.
1295
1296 In this example, point is initially located at the beginning of the
1297 second line:
1298
1299 @example
1300 @group
1301 ---------- Buffer: foo ----------
1302 This is the contents of foo.
1303 @point{}Second line.
1304 ---------- Buffer: foo ----------
1305 @end group
1306
1307 @group
1308 (momentary-string-display
1309 "**** Important Message! ****"
1310 (point) ?\r
1311 "Type RET when done reading")
1312 @result{} t
1313 @end group
1314
1315 @group
1316 ---------- Buffer: foo ----------
1317 This is the contents of foo.
1318 **** Important Message! ****Second line.
1319 ---------- Buffer: foo ----------
1320
1321 ---------- Echo Area ----------
1322 Type RET when done reading
1323 ---------- Echo Area ----------
1324 @end group
1325 @end example
1326 @end defun
1327
1328 @node Overlays
1329 @section Overlays
1330 @cindex overlays
1331 @c FIXME: mention intervals in this section?
1332
1333 You can use @dfn{overlays} to alter the appearance of a buffer's text on
1334 the screen, for the sake of presentation features. An overlay is an
1335 object that belongs to a particular buffer, and has a specified
1336 beginning and end. It also has properties that you can examine and set;
1337 these affect the display of the text within the overlay.
1338
1339 @cindex scalability of overlays
1340 @cindex overlays, scalability
1341 The visual effect of an overlay is the same as of the corresponding
1342 text property (@pxref{Text Properties}). However, due to a different
1343 implementation, overlays generally don't scale well (many operations
1344 take a time that is proportional to the number of overlays in the
1345 buffer). If you need to affect the visual appearance of many portions
1346 in the buffer, we recommend using text properties.
1347
1348 An overlay uses markers to record its beginning and end; thus,
1349 editing the text of the buffer adjusts the beginning and end of each
1350 overlay so that it stays with the text. When you create the overlay,
1351 you can specify whether text inserted at the beginning should be
1352 inside the overlay or outside, and likewise for the end of the overlay.
1353
1354 @menu
1355 * Managing Overlays:: Creating and moving overlays.
1356 * Overlay Properties:: How to read and set properties.
1357 What properties do to the screen display.
1358 * Finding Overlays:: Searching for overlays.
1359 @end menu
1360
1361 @node Managing Overlays
1362 @subsection Managing Overlays
1363 @cindex managing overlays
1364 @cindex overlays, managing
1365
1366 This section describes the functions to create, delete and move
1367 overlays, and to examine their contents. Overlay changes are not
1368 recorded in the buffer's undo list, since the overlays are not
1369 part of the buffer's contents.
1370
1371 @defun overlayp object
1372 This function returns @code{t} if @var{object} is an overlay.
1373 @end defun
1374
1375 @defun make-overlay start end &optional buffer front-advance rear-advance
1376 This function creates and returns an overlay that belongs to
1377 @var{buffer} and ranges from @var{start} to @var{end}. Both @var{start}
1378 and @var{end} must specify buffer positions; they may be integers or
1379 markers. If @var{buffer} is omitted, the overlay is created in the
1380 current buffer.
1381
1382 @cindex empty overlay
1383 @cindex overlay, empty
1384 An overlay whose @var{start} and @var{end} specify the same buffer
1385 position is known as @dfn{empty}. A non-empty overlay can become
1386 empty if the text between its @var{start} and @var{end} is deleted.
1387 When that happens, the overlay is by default not deleted, but you can
1388 cause it to be deleted by giving it the @samp{evaporate} property
1389 (@pxref{Overlay Properties, evaporate property}).
1390
1391 The arguments @var{front-advance} and @var{rear-advance} specify the
1392 marker insertion type for the start of the overlay and for the end of
1393 the overlay, respectively. @xref{Marker Insertion Types}. If they
1394 are both @code{nil}, the default, then the overlay extends to include
1395 any text inserted at the beginning, but not text inserted at the end.
1396 If @var{front-advance} is non-@code{nil}, text inserted at the
1397 beginning of the overlay is excluded from the overlay. If
1398 @var{rear-advance} is non-@code{nil}, text inserted at the end of the
1399 overlay is included in the overlay.
1400 @end defun
1401
1402 @defun overlay-start overlay
1403 This function returns the position at which @var{overlay} starts,
1404 as an integer.
1405 @end defun
1406
1407 @defun overlay-end overlay
1408 This function returns the position at which @var{overlay} ends,
1409 as an integer.
1410 @end defun
1411
1412 @defun overlay-buffer overlay
1413 This function returns the buffer that @var{overlay} belongs to. It
1414 returns @code{nil} if @var{overlay} has been deleted.
1415 @end defun
1416
1417 @defun delete-overlay overlay
1418 This function deletes @var{overlay}. The overlay continues to exist as
1419 a Lisp object, and its property list is unchanged, but it ceases to be
1420 attached to the buffer it belonged to, and ceases to have any effect on
1421 display.
1422
1423 A deleted overlay is not permanently disconnected. You can give it a
1424 position in a buffer again by calling @code{move-overlay}.
1425 @end defun
1426
1427 @defun move-overlay overlay start end &optional buffer
1428 This function moves @var{overlay} to @var{buffer}, and places its bounds
1429 at @var{start} and @var{end}. Both arguments @var{start} and @var{end}
1430 must specify buffer positions; they may be integers or markers.
1431
1432 If @var{buffer} is omitted, @var{overlay} stays in the same buffer it
1433 was already associated with; if @var{overlay} was deleted, it goes into
1434 the current buffer.
1435
1436 The return value is @var{overlay}.
1437
1438 This is the only valid way to change the endpoints of an overlay. Do
1439 not try modifying the markers in the overlay by hand, as that fails to
1440 update other vital data structures and can cause some overlays to be
1441 lost.
1442 @end defun
1443
1444 @defun remove-overlays &optional start end name value
1445 This function removes all the overlays between @var{start} and
1446 @var{end} whose property @var{name} has the value @var{value}. It can
1447 move the endpoints of the overlays in the region, or split them.
1448
1449 If @var{name} is omitted or @code{nil}, it means to delete all overlays in
1450 the specified region. If @var{start} and/or @var{end} are omitted or
1451 @code{nil}, that means the beginning and end of the buffer respectively.
1452 Therefore, @code{(remove-overlays)} removes all the overlays in the
1453 current buffer.
1454 @end defun
1455
1456 @defun copy-overlay overlay
1457 This function returns a copy of @var{overlay}. The copy has the same
1458 endpoints and properties as @var{overlay}. However, the marker
1459 insertion type for the start of the overlay and for the end of the
1460 overlay are set to their default values (@pxref{Marker Insertion
1461 Types}).
1462 @end defun
1463
1464 Here are some examples:
1465
1466 @example
1467 ;; @r{Create an overlay.}
1468 (setq foo (make-overlay 1 10))
1469 @result{} #<overlay from 1 to 10 in display.texi>
1470 (overlay-start foo)
1471 @result{} 1
1472 (overlay-end foo)
1473 @result{} 10
1474 (overlay-buffer foo)
1475 @result{} #<buffer display.texi>
1476 ;; @r{Give it a property we can check later.}
1477 (overlay-put foo 'happy t)
1478 @result{} t
1479 ;; @r{Verify the property is present.}
1480 (overlay-get foo 'happy)
1481 @result{} t
1482 ;; @r{Move the overlay.}
1483 (move-overlay foo 5 20)
1484 @result{} #<overlay from 5 to 20 in display.texi>
1485 (overlay-start foo)
1486 @result{} 5
1487 (overlay-end foo)
1488 @result{} 20
1489 ;; @r{Delete the overlay.}
1490 (delete-overlay foo)
1491 @result{} nil
1492 ;; @r{Verify it is deleted.}
1493 foo
1494 @result{} #<overlay in no buffer>
1495 ;; @r{A deleted overlay has no position.}
1496 (overlay-start foo)
1497 @result{} nil
1498 (overlay-end foo)
1499 @result{} nil
1500 (overlay-buffer foo)
1501 @result{} nil
1502 ;; @r{Undelete the overlay.}
1503 (move-overlay foo 1 20)
1504 @result{} #<overlay from 1 to 20 in display.texi>
1505 ;; @r{Verify the results.}
1506 (overlay-start foo)
1507 @result{} 1
1508 (overlay-end foo)
1509 @result{} 20
1510 (overlay-buffer foo)
1511 @result{} #<buffer display.texi>
1512 ;; @r{Moving and deleting the overlay does not change its properties.}
1513 (overlay-get foo 'happy)
1514 @result{} t
1515 @end example
1516
1517 Emacs stores the overlays of each buffer in two lists, divided
1518 around an arbitrary center position. One list extends backwards
1519 through the buffer from that center position, and the other extends
1520 forwards from that center position. The center position can be anywhere
1521 in the buffer.
1522
1523 @defun overlay-recenter pos
1524 This function recenters the overlays of the current buffer around
1525 position @var{pos}. That makes overlay lookup faster for positions
1526 near @var{pos}, but slower for positions far away from @var{pos}.
1527 @end defun
1528
1529 A loop that scans the buffer forwards, creating overlays, can run
1530 faster if you do @code{(overlay-recenter (point-max))} first.
1531
1532 @node Overlay Properties
1533 @subsection Overlay Properties
1534 @cindex overlay properties
1535
1536 Overlay properties are like text properties in that the properties that
1537 alter how a character is displayed can come from either source. But in
1538 most respects they are different. @xref{Text Properties}, for comparison.
1539
1540 Text properties are considered a part of the text; overlays and
1541 their properties are specifically considered not to be part of the
1542 text. Thus, copying text between various buffers and strings
1543 preserves text properties, but does not try to preserve overlays.
1544 Changing a buffer's text properties marks the buffer as modified,
1545 while moving an overlay or changing its properties does not. Unlike
1546 text property changes, overlay property changes are not recorded in
1547 the buffer's undo list.
1548
1549 Since more than one overlay can specify a property value for the
1550 same character, Emacs lets you specify a priority value of each
1551 overlay. In case two overlays have the same priority value, and one
1552 is nested in the other, then the inner one will have priority over the
1553 outer one. If neither is nested in the other then you should not make
1554 assumptions about which overlay will prevail.
1555
1556 These functions read and set the properties of an overlay:
1557
1558 @defun overlay-get overlay prop
1559 This function returns the value of property @var{prop} recorded in
1560 @var{overlay}, if any. If @var{overlay} does not record any value for
1561 that property, but it does have a @code{category} property which is a
1562 symbol, that symbol's @var{prop} property is used. Otherwise, the value
1563 is @code{nil}.
1564 @end defun
1565
1566 @defun overlay-put overlay prop value
1567 This function sets the value of property @var{prop} recorded in
1568 @var{overlay} to @var{value}. It returns @var{value}.
1569 @end defun
1570
1571 @defun overlay-properties overlay
1572 This returns a copy of the property list of @var{overlay}.
1573 @end defun
1574
1575 See also the function @code{get-char-property} which checks both
1576 overlay properties and text properties for a given character.
1577 @xref{Examining Properties}.
1578
1579 Many overlay properties have special meanings; here is a table
1580 of them:
1581
1582 @table @code
1583 @item priority
1584 @kindex priority @r{(overlay property)}
1585 This property's value determines the priority of the overlay.
1586 If you want to specify a priority value, use either @code{nil}
1587 (or zero), or a positive integer. Any other value has undefined behavior.
1588
1589 The priority matters when two or more overlays cover the same
1590 character and both specify the same property; the one whose
1591 @code{priority} value is larger overrides the other. For the
1592 @code{face} property, the higher priority overlay's value does not
1593 completely override the other value; instead, its face attributes
1594 override the face attributes of the lower priority @code{face}
1595 property.
1596
1597 Currently, all overlays take priority over text properties.
1598
1599 Note that Emacs sometimes uses non-numeric priority values for some of
1600 its internal overlays, so do not try to do arithmetic on the
1601 priority of an overlay (unless it is one that you created). If you
1602 need to put overlays in priority order, use the @var{sorted} argument
1603 of @code{overlays-at}. @xref{Finding Overlays}.
1604
1605 @item window
1606 @kindex window @r{(overlay property)}
1607 If the @code{window} property is non-@code{nil}, then the overlay
1608 applies only on that window.
1609
1610 @item category
1611 @kindex category @r{(overlay property)}
1612 If an overlay has a @code{category} property, we call it the
1613 @dfn{category} of the overlay. It should be a symbol. The properties
1614 of the symbol serve as defaults for the properties of the overlay.
1615
1616 @item face
1617 @kindex face @r{(overlay property)}
1618 This property controls the appearance of the text (@pxref{Faces}).
1619 The value of the property can be the following:
1620
1621 @itemize @bullet
1622 @item
1623 A face name (a symbol or string).
1624
1625 @item
1626 An anonymous face: a property list of the form @code{(@var{keyword}
1627 @var{value} @dots{})}, where each @var{keyword} is a face attribute
1628 name and @var{value} is a value for that attribute.
1629
1630 @item
1631 A list of faces. Each list element should be either a face name or an
1632 anonymous face. This specifies a face which is an aggregate of the
1633 attributes of each of the listed faces. Faces occurring earlier in
1634 the list have higher priority.
1635
1636 @item
1637 A cons cell of the form @code{(foreground-color . @var{color-name})}
1638 or @code{(background-color . @var{color-name})}. This specifies the
1639 foreground or background color, similar to @code{(:foreground
1640 @var{color-name})} or @code{(:background @var{color-name})}. This
1641 form is supported for backward compatibility only, and should be
1642 avoided.
1643 @end itemize
1644
1645 @item mouse-face
1646 @kindex mouse-face @r{(overlay property)}
1647 This property is used instead of @code{face} when the mouse is within
1648 the range of the overlay. However, Emacs ignores all face attributes
1649 from this property that alter the text size (e.g., @code{:height},
1650 @code{:weight}, and @code{:slant}). Those attributes are always the
1651 same as in the unhighlighted text.
1652
1653 @item display
1654 @kindex display @r{(overlay property)}
1655 This property activates various features that change the
1656 way text is displayed. For example, it can make text appear taller
1657 or shorter, higher or lower, wider or narrower, or replaced with an image.
1658 @xref{Display Property}.
1659
1660 @item help-echo
1661 @kindex help-echo @r{(overlay property)}
1662 If an overlay has a @code{help-echo} property, then when you move the
1663 mouse onto the text in the overlay, Emacs displays a help string in the
1664 echo area, or in the tooltip window. For details see @ref{Text
1665 help-echo}.
1666
1667 @item field
1668 @kindex field @r{(overlay property)}
1669 @c Copied from Special Properties.
1670 Consecutive characters with the same @code{field} property constitute a
1671 @emph{field}. Some motion functions including @code{forward-word} and
1672 @code{beginning-of-line} stop moving at a field boundary.
1673 @xref{Fields}.
1674
1675 @item modification-hooks
1676 @kindex modification-hooks @r{(overlay property)}
1677 This property's value is a list of functions to be called if any
1678 character within the overlay is changed or if text is inserted strictly
1679 within the overlay.
1680
1681 The hook functions are called both before and after each change.
1682 If the functions save the information they receive, and compare notes
1683 between calls, they can determine exactly what change has been made
1684 in the buffer text.
1685
1686 When called before a change, each function receives four arguments: the
1687 overlay, @code{nil}, and the beginning and end of the text range to be
1688 modified.
1689
1690 When called after a change, each function receives five arguments: the
1691 overlay, @code{t}, the beginning and end of the text range just
1692 modified, and the length of the pre-change text replaced by that range.
1693 (For an insertion, the pre-change length is zero; for a deletion, that
1694 length is the number of characters deleted, and the post-change
1695 beginning and end are equal.)
1696
1697 If these functions modify the buffer, they should bind
1698 @code{inhibit-modification-hooks} to @code{t} around doing so, to
1699 avoid confusing the internal mechanism that calls these hooks.
1700
1701 Text properties also support the @code{modification-hooks} property,
1702 but the details are somewhat different (@pxref{Special Properties}).
1703
1704 @item insert-in-front-hooks
1705 @kindex insert-in-front-hooks @r{(overlay property)}
1706 This property's value is a list of functions to be called before and
1707 after inserting text right at the beginning of the overlay. The calling
1708 conventions are the same as for the @code{modification-hooks} functions.
1709
1710 @item insert-behind-hooks
1711 @kindex insert-behind-hooks @r{(overlay property)}
1712 This property's value is a list of functions to be called before and
1713 after inserting text right at the end of the overlay. The calling
1714 conventions are the same as for the @code{modification-hooks} functions.
1715
1716 @item invisible
1717 @kindex invisible @r{(overlay property)}
1718 The @code{invisible} property can make the text in the overlay
1719 invisible, which means that it does not appear on the screen.
1720 @xref{Invisible Text}, for details.
1721
1722 @item intangible
1723 @kindex intangible @r{(overlay property)}
1724 The @code{intangible} property on an overlay works just like the
1725 @code{intangible} text property. It is obsolete. @xref{Special
1726 Properties}, for details.
1727
1728 @item isearch-open-invisible
1729 This property tells incremental search how to make an invisible overlay
1730 visible, permanently, if the final match overlaps it. @xref{Invisible
1731 Text}.
1732
1733 @item isearch-open-invisible-temporary
1734 This property tells incremental search how to make an invisible overlay
1735 visible, temporarily, during the search. @xref{Invisible Text}.
1736
1737 @item before-string
1738 @kindex before-string @r{(overlay property)}
1739 This property's value is a string to add to the display at the beginning
1740 of the overlay. The string does not appear in the buffer in any
1741 sense---only on the screen.
1742
1743 @item after-string
1744 @kindex after-string @r{(overlay property)}
1745 This property's value is a string to add to the display at the end of
1746 the overlay. The string does not appear in the buffer in any
1747 sense---only on the screen.
1748
1749 @item line-prefix
1750 This property specifies a display spec to prepend to each
1751 non-continuation line at display-time. @xref{Truncation}.
1752
1753 @item wrap-prefix
1754 This property specifies a display spec to prepend to each continuation
1755 line at display-time. @xref{Truncation}.
1756
1757 @item evaporate
1758 @kindex evaporate @r{(overlay property)}
1759 If this property is non-@code{nil}, the overlay is deleted automatically
1760 if it becomes empty (i.e., if its length becomes zero). If you give
1761 an empty overlay (@pxref{Managing Overlays, empty overlay}) a
1762 non-@code{nil} @code{evaporate} property, that deletes it immediately.
1763 Note that, unless an overlay has this property, it will not be deleted
1764 when the text between its starting and ending positions is deleted
1765 from the buffer.
1766
1767 @item keymap
1768 @cindex keymap of character (and overlays)
1769 @kindex keymap @r{(overlay property)}
1770 If this property is non-@code{nil}, it specifies a keymap for a portion of the
1771 text. This keymap is used when the character after point is within the
1772 overlay, and takes precedence over most other keymaps. @xref{Active Keymaps}.
1773
1774 @item local-map
1775 @kindex local-map @r{(overlay property)}
1776 The @code{local-map} property is similar to @code{keymap} but replaces the
1777 buffer's local map rather than augmenting existing keymaps. This also means it
1778 has lower precedence than minor mode keymaps.
1779 @end table
1780
1781 The @code{keymap} and @code{local-map} properties do not affect a
1782 string displayed by the @code{before-string}, @code{after-string}, or
1783 @code{display} properties. This is only relevant for mouse clicks and
1784 other mouse events that fall on the string, since point is never on
1785 the string. To bind special mouse events for the string, assign it a
1786 @code{keymap} or @code{local-map} text property. @xref{Special
1787 Properties}.
1788
1789 @node Finding Overlays
1790 @subsection Searching for Overlays
1791 @cindex searching for overlays
1792 @cindex overlays, searching for
1793
1794 @defun overlays-at pos &optional sorted
1795 This function returns a list of all the overlays that cover the character at
1796 position @var{pos} in the current buffer. If @var{sorted} is non-@code{nil},
1797 the list is in decreasing order of priority, otherwise it is in no particular
1798 order. An overlay contains position @var{pos} if it begins at or before
1799 @var{pos}, and ends after @var{pos}.
1800
1801 To illustrate usage, here is a Lisp function that returns a list of the
1802 overlays that specify property @var{prop} for the character at point:
1803
1804 @smallexample
1805 (defun find-overlays-specifying (prop)
1806 (let ((overlays (overlays-at (point)))
1807 found)
1808 (while overlays
1809 (let ((overlay (car overlays)))
1810 (if (overlay-get overlay prop)
1811 (setq found (cons overlay found))))
1812 (setq overlays (cdr overlays)))
1813 found))
1814 @end smallexample
1815 @end defun
1816
1817 @defun overlays-in beg end
1818 This function returns a list of the overlays that overlap the region
1819 @var{beg} through @var{end}. An overlay overlaps with a region if it
1820 contains one or more characters in the region; empty overlays
1821 (@pxref{Managing Overlays, empty overlay}) overlap if they are at
1822 @var{beg}, strictly between @var{beg} and @var{end}, or at @var{end}
1823 when @var{end} denotes the position at the end of the buffer.
1824 @end defun
1825
1826 @defun next-overlay-change pos
1827 This function returns the buffer position of the next beginning or end
1828 of an overlay, after @var{pos}. If there is none, it returns
1829 @code{(point-max)}.
1830 @end defun
1831
1832 @defun previous-overlay-change pos
1833 This function returns the buffer position of the previous beginning or
1834 end of an overlay, before @var{pos}. If there is none, it returns
1835 @code{(point-min)}.
1836 @end defun
1837
1838 As an example, here's a simplified (and inefficient) version of the
1839 primitive function @code{next-single-char-property-change}
1840 (@pxref{Property Search}). It searches forward from position
1841 @var{pos} for the next position where the value of a given property
1842 @code{prop}, as obtained from either overlays or text properties,
1843 changes.
1844
1845 @smallexample
1846 (defun next-single-char-property-change (position prop)
1847 (save-excursion
1848 (goto-char position)
1849 (let ((propval (get-char-property (point) prop)))
1850 (while (and (not (eobp))
1851 (eq (get-char-property (point) prop) propval))
1852 (goto-char (min (next-overlay-change (point))
1853 (next-single-property-change (point) prop)))))
1854 (point)))
1855 @end smallexample
1856
1857 @node Size of Displayed Text
1858 @section Size of Displayed Text
1859 @cindex size of text on display
1860 @cindex character width on display
1861
1862 Since not all characters have the same width, these functions let you
1863 check the width of a character. @xref{Primitive Indent}, and
1864 @ref{Screen Lines}, for related functions.
1865
1866 @defun char-width char
1867 This function returns the width in columns of the character
1868 @var{char}, if it were displayed in the current buffer (i.e., taking
1869 into account the buffer's display table, if any; @pxref{Display
1870 Tables}). The width of a tab character is usually @code{tab-width}
1871 (@pxref{Usual Display}).
1872 @end defun
1873
1874 @defun string-width string
1875 This function returns the width in columns of the string @var{string},
1876 if it were displayed in the current buffer and the selected window.
1877 @end defun
1878
1879 @defun truncate-string-to-width string width &optional start-column padding ellipsis
1880 This function returns the part of @var{string} that fits within
1881 @var{width} columns, as a new string.
1882
1883 If @var{string} does not reach @var{width}, then the result ends where
1884 @var{string} ends. If one multi-column character in @var{string}
1885 extends across the column @var{width}, that character is not included in
1886 the result. Thus, the result can fall short of @var{width} but cannot
1887 go beyond it.
1888
1889 The optional argument @var{start-column} specifies the starting column.
1890 If this is non-@code{nil}, then the first @var{start-column} columns of
1891 the string are omitted from the value. If one multi-column character in
1892 @var{string} extends across the column @var{start-column}, that
1893 character is not included.
1894
1895 The optional argument @var{padding}, if non-@code{nil}, is a padding
1896 character added at the beginning and end of the result string, to extend
1897 it to exactly @var{width} columns. The padding character is used at the
1898 end of the result if it falls short of @var{width}. It is also used at
1899 the beginning of the result if one multi-column character in
1900 @var{string} extends across the column @var{start-column}.
1901
1902 @vindex truncate-string-ellipsis
1903 If @var{ellipsis} is non-@code{nil}, it should be a string which will
1904 replace the end of @var{string} (including any padding) if it extends
1905 beyond @var{width}, unless the display width of @var{string} is equal
1906 to or less than the display width of @var{ellipsis}. If
1907 @var{ellipsis} is non-@code{nil} and not a string, it stands for
1908 the value of the variable @code{truncate-string-ellipsis}.
1909
1910 @example
1911 (truncate-string-to-width "\tab\t" 12 4)
1912 @result{} "ab"
1913 (truncate-string-to-width "\tab\t" 12 4 ?\s)
1914 @result{} " ab "
1915 @end example
1916 @end defun
1917
1918 The following function returns the size in pixels of text as if it were
1919 displayed in a given window. This function is used by
1920 @code{fit-window-to-buffer} and @code{fit-frame-to-buffer}
1921 (@pxref{Resizing Windows}) to make a window exactly as large as the text
1922 it contains.
1923
1924 @defun window-text-pixel-size &optional window from to x-limit y-limit mode-and-header-line
1925 This function returns the size of the text of @var{window}'s buffer in
1926 pixels. @var{window} must be a live window and defaults to the selected
1927 one. The return value is a cons of the maximum pixel-width of any text
1928 line and the maximum pixel-height of all text lines.
1929
1930 The optional argument @var{from}, if non-@code{nil}, specifies the first
1931 text position to consider and defaults to the minimum accessible
1932 position of the buffer. If @var{from} is @code{t}, it uses the minimum
1933 accessible position that is not a newline character. The optional
1934 argument @var{to}, if non-@code{nil}, specifies the last text position
1935 to consider and defaults to the maximum accessible position of the
1936 buffer. If @var{to} is @code{t}, it uses the maximum accessible
1937 position that is not a newline character.
1938
1939 The optional argument @var{x-limit}, if non-@code{nil}, specifies the
1940 maximum pixel-width that can be returned. @var{x-limit} @code{nil} or
1941 omitted, means to use the pixel-width of @var{window}'s body
1942 (@pxref{Window Sizes}); this is useful when the caller does not intend
1943 to change the width of @var{window}. Otherwise, the caller should
1944 specify here the maximum width @var{window}'s body may assume. Text
1945 whose x-coordinate is beyond @var{x-limit} is ignored. Since
1946 calculating the width of long lines can take some time, it's always a
1947 good idea to make this argument as small as needed; in particular, if
1948 the buffer might contain long lines that will be truncated anyway.
1949
1950 The optional argument @var{y-limit}, if non-@code{nil}, specifies the
1951 maximum pixel-height that can be returned. Text lines whose
1952 y-coordinate is beyond @var{y-limit} are ignored. Since calculating the
1953 pixel-height of a large buffer can take some time, it makes sense to
1954 specify this argument; in particular, if the caller does not know the
1955 size of the buffer.
1956
1957 The optional argument @var{mode-and-header-line} @code{nil} or omitted
1958 means to not include the height of the mode- or header-line of
1959 @var{window} in the return value. If it is either the symbol
1960 @code{mode-line} or @code{header-line}, include only the height of that
1961 line, if present, in the return value. If it is @code{t}, include the
1962 height of both, if present, in the return value.
1963 @end defun
1964
1965
1966 @node Line Height
1967 @section Line Height
1968 @cindex line height
1969 @cindex height of a line
1970
1971 The total height of each display line consists of the height of the
1972 contents of the line, plus optional additional vertical line spacing
1973 above or below the display line.
1974
1975 The height of the line contents is the maximum height of any character
1976 or image on that display line, including the final newline if there is
1977 one. (A display line that is continued doesn't include a final
1978 newline.) That is the default line height, if you do nothing to specify
1979 a greater height. (In the most common case, this equals the height of
1980 the corresponding frame's default font, see @ref{Frame Font}.)
1981
1982 There are several ways to explicitly specify a larger line height,
1983 either by specifying an absolute height for the display line, or by
1984 specifying vertical space. However, no matter what you specify, the
1985 actual line height can never be less than the default.
1986
1987 @kindex line-height @r{(text property)}
1988 A newline can have a @code{line-height} text or overlay property
1989 that controls the total height of the display line ending in that
1990 newline.
1991
1992 If the property value is @code{t}, the newline character has no
1993 effect on the displayed height of the line---the visible contents
1994 alone determine the height. This is useful for tiling small images
1995 (or image slices) without adding blank areas between the images.
1996
1997 If the property value is a list of the form @code{(@var{height}
1998 @var{total})}, that adds extra space @emph{below} the display line.
1999 First Emacs uses @var{height} as a height spec to control extra space
2000 @emph{above} the line; then it adds enough space @emph{below} the line
2001 to bring the total line height up to @var{total}. In this case, the
2002 other ways to specify the line spacing are ignored.
2003
2004 @cindex height spec
2005 Any other kind of property value is a height spec, which translates
2006 into a number---the specified line height. There are several ways to
2007 write a height spec; here's how each of them translates into a number:
2008
2009 @table @code
2010 @item @var{integer}
2011 If the height spec is a positive integer, the height value is that integer.
2012 @item @var{float}
2013 If the height spec is a float, @var{float}, the numeric height value
2014 is @var{float} times the frame's default line height.
2015 @item (@var{face} . @var{ratio})
2016 If the height spec is a cons of the format shown, the numeric height
2017 is @var{ratio} times the height of face @var{face}. @var{ratio} can
2018 be any type of number, or @code{nil} which means a ratio of 1.
2019 If @var{face} is @code{t}, it refers to the current face.
2020 @item (nil . @var{ratio})
2021 If the height spec is a cons of the format shown, the numeric height
2022 is @var{ratio} times the height of the contents of the line.
2023 @end table
2024
2025 Thus, any valid height spec determines the height in pixels, one way
2026 or another. If the line contents' height is less than that, Emacs
2027 adds extra vertical space above the line to achieve the specified
2028 total height.
2029
2030 If you don't specify the @code{line-height} property, the line's
2031 height consists of the contents' height plus the line spacing.
2032 There are several ways to specify the line spacing for different
2033 parts of Emacs text.
2034
2035 On graphical terminals, you can specify the line spacing for all
2036 lines in a frame, using the @code{line-spacing} frame parameter
2037 (@pxref{Layout Parameters}). However, if the default value of
2038 @code{line-spacing} is non-@code{nil}, it overrides the
2039 frame's @code{line-spacing} parameter. An integer specifies the
2040 number of pixels put below lines. A floating-point number specifies
2041 the spacing relative to the frame's default line height.
2042
2043 @vindex line-spacing
2044 You can specify the line spacing for all lines in a buffer via the
2045 buffer-local @code{line-spacing} variable. An integer specifies
2046 the number of pixels put below lines. A floating-point number
2047 specifies the spacing relative to the default frame line height. This
2048 overrides line spacings specified for the frame.
2049
2050 @kindex line-spacing @r{(text property)}
2051 Finally, a newline can have a @code{line-spacing} text or overlay
2052 property that overrides the default frame line spacing and the buffer
2053 local @code{line-spacing} variable, for the display line ending in
2054 that newline.
2055
2056 One way or another, these mechanisms specify a Lisp value for the
2057 spacing of each line. The value is a height spec, and it translates
2058 into a Lisp value as described above. However, in this case the
2059 numeric height value specifies the line spacing, rather than the line
2060 height.
2061
2062 On text terminals, the line spacing cannot be altered.
2063
2064 @node Faces
2065 @section Faces
2066 @cindex faces
2067
2068 A @dfn{face} is a collection of graphical attributes for displaying
2069 text: font, foreground color, background color, optional underlining,
2070 etc. Faces control how Emacs displays text in buffers, as well as
2071 other parts of the frame such as the mode line.
2072
2073 @cindex anonymous face
2074 One way to represent a face is as a property list of attributes,
2075 like @code{(:foreground "red" :weight bold)}. Such a list is called
2076 an @dfn{anonymous face}. For example, you can assign an anonymous
2077 face as the value of the @code{face} text property, and Emacs will
2078 display the underlying text with the specified attributes.
2079 @xref{Special Properties}.
2080
2081 @cindex face name
2082 More commonly, a face is referred to via a @dfn{face name}: a Lisp
2083 symbol associated with a set of face attributes@footnote{For backward
2084 compatibility, you can also use a string to specify a face name; that
2085 is equivalent to a Lisp symbol with the same name.}. Named faces are
2086 defined using the @code{defface} macro (@pxref{Defining Faces}).
2087 Emacs comes with several standard named faces (@pxref{Basic Faces}).
2088
2089 Many parts of Emacs required named faces, and do not accept
2090 anonymous faces. These include the functions documented in
2091 @ref{Attribute Functions}, and the variable @code{font-lock-keywords}
2092 (@pxref{Search-based Fontification}). Unless otherwise stated, we
2093 will use the term @dfn{face} to refer only to named faces.
2094
2095 @defun facep object
2096 This function returns a non-@code{nil} value if @var{object} is a
2097 named face: a Lisp symbol or string which serves as a face name.
2098 Otherwise, it returns @code{nil}.
2099 @end defun
2100
2101 @menu
2102 * Face Attributes:: What is in a face?
2103 * Defining Faces:: How to define a face.
2104 * Attribute Functions:: Functions to examine and set face attributes.
2105 * Displaying Faces:: How Emacs combines the faces specified for a character.
2106 * Face Remapping:: Remapping faces to alternative definitions.
2107 * Face Functions:: How to define and examine faces.
2108 * Auto Faces:: Hook for automatic face assignment.
2109 * Basic Faces:: Faces that are defined by default.
2110 * Font Selection:: Finding the best available font for a face.
2111 * Font Lookup:: Looking up the names of available fonts
2112 and information about them.
2113 * Fontsets:: A fontset is a collection of fonts
2114 that handle a range of character sets.
2115 * Low-Level Font:: Lisp representation for character display fonts.
2116 @end menu
2117
2118 @node Face Attributes
2119 @subsection Face Attributes
2120 @cindex face attributes
2121
2122 @dfn{Face attributes} determine the visual appearance of a face.
2123 The following table lists all the face attributes, their possible
2124 values, and their effects.
2125
2126 Apart from the values given below, each face attribute can have the
2127 value @code{unspecified}. This special value means that the face
2128 doesn't specify that attribute directly. An @code{unspecified}
2129 attribute tells Emacs to refer instead to a parent face (see the
2130 description @code{:inherit} attribute below); or, failing that, to an
2131 underlying face (@pxref{Displaying Faces}). The @code{default} face
2132 must specify all attributes.
2133
2134 Some of these attributes are meaningful only on certain kinds of
2135 displays. If your display cannot handle a certain attribute, the
2136 attribute is ignored.
2137
2138 @table @code
2139 @item :family
2140 Font family or fontset (a string). @xref{Fonts,,, emacs, The GNU
2141 Emacs Manual}, for more information about font families. The function
2142 @code{font-family-list} (see below) returns a list of available family
2143 names. @xref{Fontsets}, for information about fontsets.
2144
2145 @item :foundry
2146 The name of the @dfn{font foundry} for the font family specified by
2147 the @code{:family} attribute (a string). @xref{Fonts,,, emacs, The
2148 GNU Emacs Manual}.
2149
2150 @item :width
2151 Relative character width. This should be one of the symbols
2152 @code{ultra-condensed}, @code{extra-condensed}, @code{condensed},
2153 @code{semi-condensed}, @code{normal}, @code{semi-expanded},
2154 @code{expanded}, @code{extra-expanded}, or @code{ultra-expanded}.
2155
2156 @item :height
2157 The height of the font. In the simplest case, this is an integer in
2158 units of 1/10 point.
2159
2160 The value can also be floating point or a function, which
2161 specifies the height relative to an @dfn{underlying face}
2162 (@pxref{Displaying Faces}). A floating-point value
2163 specifies the amount by which to scale the height of the
2164 underlying face. A function value is called
2165 with one argument, the height of the underlying face, and returns the
2166 height of the new face. If the function is passed an integer
2167 argument, it must return an integer.
2168
2169 The height of the default face must be specified using an integer;
2170 floating point and function values are not allowed.
2171
2172 @item :weight
2173 Font weight---one of the symbols (from densest to faintest)
2174 @code{ultra-bold}, @code{extra-bold}, @code{bold}, @code{semi-bold},
2175 @code{normal}, @code{semi-light}, @code{light}, @code{extra-light}, or
2176 @code{ultra-light}. On text terminals which support
2177 variable-brightness text, any weight greater than normal is displayed
2178 as extra bright, and any weight less than normal is displayed as
2179 half-bright.
2180
2181 @cindex italic text
2182 @item :slant
2183 Font slant---one of the symbols @code{italic}, @code{oblique},
2184 @code{normal}, @code{reverse-italic}, or @code{reverse-oblique}. On
2185 text terminals that support variable-brightness text, slanted text is
2186 displayed as half-bright.
2187
2188 @item :foreground
2189 Foreground color, a string. The value can be a system-defined color
2190 name, or a hexadecimal color specification. @xref{Color Names}. On
2191 black-and-white displays, certain shades of gray are implemented by
2192 stipple patterns.
2193
2194 @item :distant-foreground
2195 Alternative foreground color, a string. This is like @code{:foreground}
2196 but the color is only used as a foreground when the background color is
2197 near to the foreground that would have been used. This is useful for
2198 example when marking text (i.e., the region face). If the text has a foreground
2199 that is visible with the region face, that foreground is used.
2200 If the foreground is near the region face background,
2201 @code{:distant-foreground} is used instead so the text is readable.
2202
2203 @item :background
2204 Background color, a string. The value can be a system-defined color
2205 name, or a hexadecimal color specification. @xref{Color Names}.
2206
2207 @cindex underlined text
2208 @item :underline
2209 Whether or not characters should be underlined, and in what
2210 way. The possible values of the @code{:underline} attribute are:
2211
2212 @table @asis
2213 @item @code{nil}
2214 Don't underline.
2215
2216 @item @code{t}
2217 Underline with the foreground color of the face.
2218
2219 @item @var{color}
2220 Underline in color @var{color}, a string specifying a color.
2221
2222 @item @code{(:color @var{color} :style @var{style})}
2223 @var{color} is either a string, or the symbol @code{foreground-color},
2224 meaning the foreground color of the face. Omitting the attribute
2225 @code{:color} means to use the foreground color of the face.
2226 @var{style} should be a symbol @code{line} or @code{wave}, meaning to
2227 use a straight or wavy line. Omitting the attribute @code{:style}
2228 means to use a straight line.
2229 @end table
2230
2231 @cindex overlined text
2232 @item :overline
2233 Whether or not characters should be overlined, and in what color.
2234 If the value is @code{t}, overlining uses the foreground color of the
2235 face. If the value is a string, overlining uses that color. The
2236 value @code{nil} means do not overline.
2237
2238 @cindex strike-through text
2239 @item :strike-through
2240 Whether or not characters should be strike-through, and in what
2241 color. The value is used like that of @code{:overline}.
2242
2243 @cindex 2D box
2244 @cindex 3D box
2245 @item :box
2246 Whether or not a box should be drawn around characters, its color, the
2247 width of the box lines, and 3D appearance. Here are the possible
2248 values of the @code{:box} attribute, and what they mean:
2249
2250 @table @asis
2251 @item @code{nil}
2252 Don't draw a box.
2253
2254 @item @code{t}
2255 Draw a box with lines of width 1, in the foreground color.
2256
2257 @item @var{color}
2258 Draw a box with lines of width 1, in color @var{color}.
2259
2260 @item @code{(:line-width @var{width} :color @var{color} :style @var{style})}
2261 This way you can explicitly specify all aspects of the box. The value
2262 @var{width} specifies the width of the lines to draw; it defaults to
2263 1. A negative width @var{-n} means to draw a line of width @var{n}
2264 that occupies the space of the underlying text, thus avoiding any
2265 increase in the character height or width.
2266
2267 The value @var{color} specifies the color to draw with. The default is
2268 the foreground color of the face for simple boxes, and the background
2269 color of the face for 3D boxes.
2270
2271 The value @var{style} specifies whether to draw a 3D box. If it is
2272 @code{released-button}, the box looks like a 3D button that is not being
2273 pressed. If it is @code{pressed-button}, the box looks like a 3D button
2274 that is being pressed. If it is @code{nil} or omitted, a plain 2D box
2275 is used.
2276 @end table
2277
2278 @item :inverse-video
2279 Whether or not characters should be displayed in inverse video. The
2280 value should be @code{t} (yes) or @code{nil} (no).
2281
2282 @item :stipple
2283 The background stipple, a bitmap.
2284
2285 The value can be a string; that should be the name of a file containing
2286 external-format X bitmap data. The file is found in the directories
2287 listed in the variable @code{x-bitmap-file-path}.
2288
2289 Alternatively, the value can specify the bitmap directly, with a list
2290 of the form @code{(@var{width} @var{height} @var{data})}. Here,
2291 @var{width} and @var{height} specify the size in pixels, and
2292 @var{data} is a string containing the raw bits of the bitmap, row by
2293 row. Each row occupies @math{(@var{width} + 7) / 8} consecutive bytes
2294 in the string (which should be a unibyte string for best results).
2295 This means that each row always occupies at least one whole byte.
2296
2297 If the value is @code{nil}, that means use no stipple pattern.
2298
2299 Normally you do not need to set the stipple attribute, because it is
2300 used automatically to handle certain shades of gray.
2301
2302 @item :font
2303 The font used to display the face. Its value should be a font object.
2304 @xref{Low-Level Font}, for information about font objects, font specs,
2305 and font entities.
2306
2307 When specifying this attribute using @code{set-face-attribute}
2308 (@pxref{Attribute Functions}), you may also supply a font spec, a font
2309 entity, or a string. Emacs converts such values to an appropriate
2310 font object, and stores that font object as the actual attribute
2311 value. If you specify a string, the contents of the string should be
2312 a font name (@pxref{Fonts,,, emacs, The GNU Emacs Manual}); if the
2313 font name is an XLFD containing wildcards, Emacs chooses the first
2314 font matching those wildcards. Specifying this attribute also changes
2315 the values of the @code{:family}, @code{:foundry}, @code{:width},
2316 @code{:height}, @code{:weight}, and @code{:slant} attributes.
2317
2318 @cindex inheritance, for faces
2319 @item :inherit
2320 The name of a face from which to inherit attributes, or a list of face
2321 names. Attributes from inherited faces are merged into the face like
2322 an underlying face would be, with higher priority than underlying
2323 faces (@pxref{Displaying Faces}). If a list of faces is used,
2324 attributes from faces earlier in the list override those from later
2325 faces.
2326 @end table
2327
2328 @defun font-family-list &optional frame
2329 This function returns a list of available font family names. The
2330 optional argument @var{frame} specifies the frame on which the text is
2331 to be displayed; if it is @code{nil}, the selected frame is used.
2332 @end defun
2333
2334 @defopt underline-minimum-offset
2335 This variable specifies the minimum distance between the baseline and
2336 the underline, in pixels, when displaying underlined text.
2337 @end defopt
2338
2339 @defopt x-bitmap-file-path
2340 This variable specifies a list of directories for searching
2341 for bitmap files, for the @code{:stipple} attribute.
2342 @end defopt
2343
2344 @defun bitmap-spec-p object
2345 This returns @code{t} if @var{object} is a valid bitmap specification,
2346 suitable for use with @code{:stipple} (see above). It returns
2347 @code{nil} otherwise.
2348 @end defun
2349
2350 @node Defining Faces
2351 @subsection Defining Faces
2352 @cindex defining faces
2353
2354 @cindex face spec
2355 The usual way to define a face is through the @code{defface} macro.
2356 This macro associates a face name (a symbol) with a default @dfn{face
2357 spec}. A face spec is a construct which specifies what attributes a
2358 face should have on any given terminal; for example, a face spec might
2359 specify one foreground color on high-color terminals, and a different
2360 foreground color on low-color terminals.
2361
2362 People are sometimes tempted to create a variable whose value is a
2363 face name. In the vast majority of cases, this is not necessary; the
2364 usual procedure is to define a face with @code{defface}, and then use
2365 its name directly.
2366
2367 @defmac defface face spec doc [keyword value]@dots{}
2368 This macro declares @var{face} as a named face whose default face spec
2369 is given by @var{spec}. You should not quote the symbol @var{face},
2370 and it should not end in @samp{-face} (that would be redundant). The
2371 argument @var{doc} is a documentation string for the face. The
2372 additional @var{keyword} arguments have the same meanings as in
2373 @code{defgroup} and @code{defcustom} (@pxref{Common Keywords}).
2374
2375 If @var{face} already has a default face spec, this macro does
2376 nothing.
2377
2378 The default face spec determines @var{face}'s appearance when no
2379 customizations are in effect (@pxref{Customization}). If @var{face}
2380 has already been customized (via Custom themes or via customizations
2381 read from the init file), its appearance is determined by the custom
2382 face spec(s), which override the default face spec @var{spec}.
2383 However, if the customizations are subsequently removed, the
2384 appearance of @var{face} will again be determined by its default face
2385 spec.
2386
2387 As an exception, if you evaluate a @code{defface} form with
2388 @kbd{C-M-x} in Emacs Lisp mode (@code{eval-defun}), a special feature
2389 of @code{eval-defun} overrides any custom face specs on the face,
2390 causing the face to reflect exactly what the @code{defface} says.
2391
2392 The @var{spec} argument is a @dfn{face spec}, which states how the
2393 face should appear on different kinds of terminals. It should be an
2394 alist whose elements each have the form
2395
2396 @example
2397 (@var{display} . @var{plist})
2398 @end example
2399
2400 @noindent
2401 @var{display} specifies a class of terminals (see below). @var{plist}
2402 is a property list of face attributes and their values, specifying how
2403 the face appears on such terminals. For backward compatibility, you
2404 can also write an element as @code{(@var{display} @var{plist})}.
2405
2406 The @var{display} part of an element of @var{spec} determines which
2407 terminals the element matches. If more than one element of @var{spec}
2408 matches a given terminal, the first element that matches is the one
2409 used for that terminal. There are three possibilities for
2410 @var{display}:
2411
2412 @table @asis
2413 @item @code{default}
2414 This element of @var{spec} doesn't match any terminal; instead, it
2415 specifies defaults that apply to all terminals. This element, if
2416 used, must be the first element of @var{spec}. Each of the following
2417 elements can override any or all of these defaults.
2418
2419 @item @code{t}
2420 This element of @var{spec} matches all terminals. Therefore, any
2421 subsequent elements of @var{spec} are never used. Normally @code{t}
2422 is used in the last (or only) element of @var{spec}.
2423
2424 @item a list
2425 If @var{display} is a list, each element should have the form
2426 @code{(@var{characteristic} @var{value}@dots{})}. Here
2427 @var{characteristic} specifies a way of classifying terminals, and the
2428 @var{value}s are possible classifications which @var{display} should
2429 apply to. Here are the possible values of @var{characteristic}:
2430
2431 @table @code
2432 @item type
2433 The kind of window system the terminal uses---either @code{graphic}
2434 (any graphics-capable display), @code{x}, @code{pc} (for the MS-DOS
2435 console), @code{w32} (for MS Windows 9X/NT/2K/XP), or @code{tty} (a
2436 non-graphics-capable display). @xref{Window Systems, window-system}.
2437
2438 @item class
2439 What kinds of colors the terminal supports---either @code{color},
2440 @code{grayscale}, or @code{mono}.
2441
2442 @item background
2443 The kind of background---either @code{light} or @code{dark}.
2444
2445 @item min-colors
2446 An integer that represents the minimum number of colors the terminal
2447 should support. This matches a terminal if its
2448 @code{display-color-cells} value is at least the specified integer.
2449
2450 @item supports
2451 Whether or not the terminal can display the face attributes given in
2452 @var{value}@dots{} (@pxref{Face Attributes}). @xref{Display Face
2453 Attribute Testing}, for more information on exactly how this testing
2454 is done.
2455 @end table
2456
2457 If an element of @var{display} specifies more than one @var{value} for
2458 a given @var{characteristic}, any of those values is acceptable. If
2459 @var{display} has more than one element, each element should specify a
2460 different @var{characteristic}; then @emph{each} characteristic of the
2461 terminal must match one of the @var{value}s specified for it in
2462 @var{display}.
2463 @end table
2464 @end defmac
2465
2466 For example, here's the definition of the standard face
2467 @code{highlight}:
2468
2469 @example
2470 (defface highlight
2471 '((((class color) (min-colors 88) (background light))
2472 :background "darkseagreen2")
2473 (((class color) (min-colors 88) (background dark))
2474 :background "darkolivegreen")
2475 (((class color) (min-colors 16) (background light))
2476 :background "darkseagreen2")
2477 (((class color) (min-colors 16) (background dark))
2478 :background "darkolivegreen")
2479 (((class color) (min-colors 8))
2480 :background "green" :foreground "black")
2481 (t :inverse-video t))
2482 "Basic face for highlighting."
2483 :group 'basic-faces)
2484 @end example
2485
2486 Internally, Emacs stores each face's default spec in its
2487 @code{face-defface-spec} symbol property (@pxref{Symbol Properties}).
2488 The @code{saved-face} property stores any face spec saved by the user
2489 using the customization buffer; the @code{customized-face} property
2490 stores the face spec customized for the current session, but not
2491 saved; and the @code{theme-face} property stores an alist associating
2492 the active customization settings and Custom themes with the face
2493 specs for that face. The face's documentation string is stored in the
2494 @code{face-documentation} property.
2495
2496 Normally, a face is declared just once, using @code{defface}, and
2497 any further changes to its appearance are applied using the Customize
2498 framework (e.g., via the Customize user interface or via the
2499 @code{custom-set-faces} function; @pxref{Applying Customizations}), or
2500 by face remapping (@pxref{Face Remapping}). In the rare event that
2501 you need to change a face spec directly from Lisp, you can use the
2502 @code{face-spec-set} function.
2503
2504 @defun face-spec-set face spec &optional spec-type
2505 This function applies @var{spec} as a face spec for @code{face}.
2506 @var{spec} should be a face spec, as described in the above
2507 documentation for @code{defface}.
2508
2509 This function also defines @var{face} as a valid face name if it is
2510 not already one, and (re)calculates its attributes on existing frames.
2511
2512 @cindex override spec @r{(for a face)}
2513 The argument @var{spec-type} determines which spec to set. If it is
2514 @code{nil} or @code{face-override-spec}, this function sets the
2515 @dfn{override spec}, which overrides over all other face specs on
2516 @var{face}. If it is @code{customized-face} or @code{saved-face},
2517 this function sets the customized spec or the saved custom spec. If
2518 it is @code{face-defface-spec}, this function sets the default face
2519 spec (the same one set by @code{defface}). If it is @code{reset},
2520 this function clears out all customization specs and override specs
2521 from @var{face} (in this case, the value of @var{spec} is ignored).
2522 Any other value of @var{spec-type} is reserved for internal use.
2523 @end defun
2524
2525 @node Attribute Functions
2526 @subsection Face Attribute Functions
2527 @cindex face attributes, access and modification
2528
2529 This section describes functions for directly accessing and
2530 modifying the attributes of a named face.
2531
2532 @defun face-attribute face attribute &optional frame inherit
2533 This function returns the value of the @var{attribute} attribute for
2534 @var{face} on @var{frame}.
2535
2536 If @var{frame} is @code{nil}, that means the selected frame
2537 (@pxref{Input Focus}). If @var{frame} is @code{t}, this function
2538 returns the value of the specified attribute for newly-created frames
2539 (this is normally @code{unspecified}, unless you have specified some
2540 value using @code{set-face-attribute}; see below).
2541
2542 If @var{inherit} is @code{nil}, only attributes directly defined by
2543 @var{face} are considered, so the return value may be
2544 @code{unspecified}, or a relative value. If @var{inherit} is
2545 non-@code{nil}, @var{face}'s definition of @var{attribute} is merged
2546 with the faces specified by its @code{:inherit} attribute; however the
2547 return value may still be @code{unspecified} or relative. If
2548 @var{inherit} is a face or a list of faces, then the result is further
2549 merged with that face (or faces), until it becomes specified and
2550 absolute.
2551
2552 To ensure that the return value is always specified and absolute, use
2553 a value of @code{default} for @var{inherit}; this will resolve any
2554 unspecified or relative values by merging with the @code{default} face
2555 (which is always completely specified).
2556
2557 For example,
2558
2559 @example
2560 (face-attribute 'bold :weight)
2561 @result{} bold
2562 @end example
2563 @end defun
2564
2565 @c FIXME: Add an index for "relative face attribute", maybe here? --xfq
2566 @defun face-attribute-relative-p attribute value
2567 This function returns non-@code{nil} if @var{value}, when used as the
2568 value of the face attribute @var{attribute}, is relative. This means
2569 it would modify, rather than completely override, any value that comes
2570 from a subsequent face in the face list or that is inherited from
2571 another face.
2572
2573 @code{unspecified} is a relative value for all attributes. For
2574 @code{:height}, floating point and function values are also relative.
2575
2576 For example:
2577
2578 @example
2579 (face-attribute-relative-p :height 2.0)
2580 @result{} t
2581 @end example
2582 @end defun
2583
2584 @defun face-all-attributes face &optional frame
2585 This function returns an alist of attributes of @var{face}. The
2586 elements of the result are name-value pairs of the form
2587 @w{@code{(@var{attr-name} . @var{attr-value})}}. Optional argument
2588 @var{frame} specifies the frame whose definition of @var{face} to
2589 return; if omitted or @code{nil}, the returned value describes the
2590 default attributes of @var{face} for newly created frames.
2591 @end defun
2592
2593 @defun merge-face-attribute attribute value1 value2
2594 If @var{value1} is a relative value for the face attribute
2595 @var{attribute}, returns it merged with the underlying value
2596 @var{value2}; otherwise, if @var{value1} is an absolute value for the
2597 face attribute @var{attribute}, returns @var{value1} unchanged.
2598 @end defun
2599
2600 Normally, Emacs uses the face specs of each face to automatically
2601 calculate its attributes on each frame (@pxref{Defining Faces}). The
2602 function @code{set-face-attribute} can override this calculation by
2603 directly assigning attributes to a face, either on a specific frame or
2604 for all frames. This function is mostly intended for internal usage.
2605
2606 @defun set-face-attribute face frame &rest arguments
2607 This function sets one or more attributes of @var{face} for
2608 @var{frame}. The attributes specifies in this way override the face
2609 spec(s) belonging to @var{face}.
2610
2611 The extra arguments @var{arguments} specify the attributes to set, and
2612 the values for them. They should consist of alternating attribute
2613 names (such as @code{:family} or @code{:underline}) and values. Thus,
2614
2615 @example
2616 (set-face-attribute 'foo nil :weight 'bold :slant 'italic)
2617 @end example
2618
2619 @noindent
2620 sets the attribute @code{:weight} to @code{bold} and the attribute
2621 @code{:slant} to @code{italic}.
2622
2623
2624 If @var{frame} is @code{t}, this function sets the default attributes
2625 for newly created frames. If @var{frame} is @code{nil}, this function
2626 sets the attributes for all existing frames, as well as for newly
2627 created frames.
2628 @end defun
2629
2630 The following commands and functions mostly provide compatibility
2631 with old versions of Emacs. They work by calling
2632 @code{set-face-attribute}. Values of @code{t} and @code{nil} for
2633 their @var{frame} argument are handled just like
2634 @code{set-face-attribute} and @code{face-attribute}. The commands
2635 read their arguments using the minibuffer, if called interactively.
2636
2637 @deffn Command set-face-foreground face color &optional frame
2638 @deffnx Command set-face-background face color &optional frame
2639 These set the @code{:foreground} attribute (or @code{:background}
2640 attribute, respectively) of @var{face} to @var{color}.
2641 @end deffn
2642
2643 @deffn Command set-face-stipple face pattern &optional frame
2644 This sets the @code{:stipple} attribute of @var{face} to
2645 @var{pattern}.
2646 @end deffn
2647
2648 @deffn Command set-face-font face font &optional frame
2649 This sets the @code{:font} attribute of @var{face} to @var{font}.
2650 @end deffn
2651
2652 @defun set-face-bold face bold-p &optional frame
2653 This sets the @code{:weight} attribute of @var{face} to @var{normal}
2654 if @var{bold-p} is @code{nil}, and to @var{bold} otherwise.
2655 @end defun
2656
2657 @defun set-face-italic face italic-p &optional frame
2658 This sets the @code{:slant} attribute of @var{face} to @var{normal} if
2659 @var{italic-p} is @code{nil}, and to @var{italic} otherwise.
2660 @end defun
2661
2662 @defun set-face-underline face underline &optional frame
2663 This sets the @code{:underline} attribute of @var{face} to
2664 @var{underline}.
2665 @end defun
2666
2667 @defun set-face-inverse-video face inverse-video-p &optional frame
2668 This sets the @code{:inverse-video} attribute of @var{face} to
2669 @var{inverse-video-p}.
2670 @end defun
2671
2672 @deffn Command invert-face face &optional frame
2673 This swaps the foreground and background colors of face @var{face}.
2674 @end deffn
2675
2676 The following functions examine the attributes of a face. They
2677 mostly provide compatibility with old versions of Emacs. If you don't
2678 specify @var{frame}, they refer to the selected frame; @code{t} refers
2679 to the default data for new frames. They return @code{unspecified} if
2680 the face doesn't define any value for that attribute. If
2681 @var{inherit} is @code{nil}, only an attribute directly defined by the
2682 face is returned. If @var{inherit} is non-@code{nil}, any faces
2683 specified by its @code{:inherit} attribute are considered as well, and
2684 if @var{inherit} is a face or a list of faces, then they are also
2685 considered, until a specified attribute is found. To ensure that the
2686 return value is always specified, use a value of @code{default} for
2687 @var{inherit}.
2688
2689 @defun face-font face &optional frame
2690 This function returns the name of the font of face @var{face}.
2691 @end defun
2692
2693 @defun face-foreground face &optional frame inherit
2694 @defunx face-background face &optional frame inherit
2695 These functions return the foreground color (or background color,
2696 respectively) of face @var{face}, as a string.
2697 @end defun
2698
2699 @defun face-stipple face &optional frame inherit
2700 This function returns the name of the background stipple pattern of face
2701 @var{face}, or @code{nil} if it doesn't have one.
2702 @end defun
2703
2704 @defun face-bold-p face &optional frame inherit
2705 This function returns a non-@code{nil} value if the @code{:weight}
2706 attribute of @var{face} is bolder than normal (i.e., one of
2707 @code{semi-bold}, @code{bold}, @code{extra-bold}, or
2708 @code{ultra-bold}). Otherwise, it returns @code{nil}.
2709 @end defun
2710
2711 @defun face-italic-p face &optional frame inherit
2712 This function returns a non-@code{nil} value if the @code{:slant}
2713 attribute of @var{face} is @code{italic} or @code{oblique}, and
2714 @code{nil} otherwise.
2715 @end defun
2716
2717 @defun face-underline-p face &optional frame inherit
2718 This function returns non-@code{nil} if face @var{face} specifies
2719 a non-@code{nil} @code{:underline} attribute.
2720 @end defun
2721
2722 @defun face-inverse-video-p face &optional frame inherit
2723 This function returns non-@code{nil} if face @var{face} specifies
2724 a non-@code{nil} @code{:inverse-video} attribute.
2725 @end defun
2726
2727 @node Displaying Faces
2728 @subsection Displaying Faces
2729 @cindex displaying faces
2730 @cindex face merging
2731
2732 When Emacs displays a given piece of text, the visual appearance of
2733 the text may be determined by faces drawn from different sources. If
2734 these various sources together specify more than one face for a
2735 particular character, Emacs merges the attributes of the various
2736 faces. Here is the order in which Emacs merges the faces, from
2737 highest to lowest priority:
2738
2739 @itemize @bullet
2740 @item
2741 If the text consists of a special glyph, the glyph can specify a
2742 particular face. @xref{Glyphs}.
2743
2744 @item
2745 If the text lies within an active region, Emacs highlights it using
2746 the @code{region} face. @xref{Standard Faces,,, emacs, The GNU Emacs
2747 Manual}.
2748
2749 @item
2750 If the text lies within an overlay with a non-@code{nil} @code{face}
2751 property, Emacs applies the face(s) specified by that property. If
2752 the overlay has a @code{mouse-face} property and the mouse is near
2753 enough to the overlay, Emacs applies the face or face attributes
2754 specified by the @code{mouse-face} property instead. @xref{Overlay
2755 Properties}.
2756
2757 When multiple overlays cover one character, an overlay with higher
2758 priority overrides those with lower priority. @xref{Overlays}.
2759
2760 @item
2761 If the text contains a @code{face} or @code{mouse-face} property,
2762 Emacs applies the specified faces and face attributes. @xref{Special
2763 Properties}. (This is how Font Lock mode faces are applied.
2764 @xref{Font Lock Mode}.)
2765
2766 @item
2767 If the text lies within the mode line of the selected window, Emacs
2768 applies the @code{mode-line} face. For the mode line of a
2769 non-selected window, Emacs applies the @code{mode-line-inactive} face.
2770 For a header line, Emacs applies the @code{header-line} face.
2771
2772 @item
2773 If any given attribute has not been specified during the preceding
2774 steps, Emacs applies the attribute of the @code{default} face.
2775 @end itemize
2776
2777 At each stage, if a face has a valid @code{:inherit} attribute,
2778 Emacs treats any attribute with an @code{unspecified} value as having
2779 the corresponding value drawn from the parent face(s). @pxref{Face
2780 Attributes}. Note that the parent face(s) may also leave the
2781 attribute unspecified; in that case, the attribute remains unspecified
2782 at the next level of face merging.
2783
2784 @node Face Remapping
2785 @subsection Face Remapping
2786 @cindex face remapping
2787
2788 The variable @code{face-remapping-alist} is used for buffer-local or
2789 global changes in the appearance of a face. For instance, it is used
2790 to implement the @code{text-scale-adjust} command (@pxref{Text
2791 Scale,,, emacs, The GNU Emacs Manual}).
2792
2793 @defvar face-remapping-alist
2794 The value of this variable is an alist whose elements have the form
2795 @code{(@var{face} . @var{remapping})}. This causes Emacs to display
2796 any text having the face @var{face} with @var{remapping}, rather than
2797 the ordinary definition of @var{face}.
2798
2799 @var{remapping} may be any face spec suitable for a @code{face} text
2800 property: either a face (i.e., a face name or a property list of
2801 attribute/value pairs), or a list of faces. For details, see the
2802 description of the @code{face} text property in @ref{Special
2803 Properties}. @var{remapping} serves as the complete specification for
2804 the remapped face---it replaces the normal definition of @var{face},
2805 instead of modifying it.
2806
2807 If @code{face-remapping-alist} is buffer-local, its local value takes
2808 effect only within that buffer.
2809
2810 Note: face remapping is non-recursive. If @var{remapping} references
2811 the same face name @var{face}, either directly or via the
2812 @code{:inherit} attribute of some other face in @var{remapping}, that
2813 reference uses the normal definition of @var{face}. For instance, if
2814 the @code{mode-line} face is remapped using this entry in
2815 @code{face-remapping-alist}:
2816
2817 @example
2818 (mode-line italic mode-line)
2819 @end example
2820
2821 @noindent
2822 then the new definition of the @code{mode-line} face inherits from the
2823 @code{italic} face, and the @emph{normal} (non-remapped) definition of
2824 @code{mode-line} face.
2825 @end defvar
2826
2827 @cindex relative remapping, faces
2828 @cindex base remapping, faces
2829 The following functions implement a higher-level interface to
2830 @code{face-remapping-alist}. Most Lisp code should use these
2831 functions instead of setting @code{face-remapping-alist} directly, to
2832 avoid trampling on remappings applied elsewhere. These functions are
2833 intended for buffer-local remappings, so they all make
2834 @code{face-remapping-alist} buffer-local as a side-effect. They manage
2835 @code{face-remapping-alist} entries of the form
2836
2837 @example
2838 (@var{face} @var{relative-spec-1} @var{relative-spec-2} @var{...} @var{base-spec})
2839 @end example
2840
2841 @noindent
2842 where, as explained above, each of the @var{relative-spec-N} and
2843 @var{base-spec} is either a face name, or a property list of
2844 attribute/value pairs. Each of the @dfn{relative remapping} entries,
2845 @var{relative-spec-N}, is managed by the
2846 @code{face-remap-add-relative} and @code{face-remap-remove-relative}
2847 functions; these are intended for simple modifications like changing
2848 the text size. The @dfn{base remapping} entry, @var{base-spec}, has
2849 the lowest priority and is managed by the @code{face-remap-set-base}
2850 and @code{face-remap-reset-base} functions; it is intended for major
2851 modes to remap faces in the buffers they control.
2852
2853 @defun face-remap-add-relative face &rest specs
2854 This function adds the face spec in @var{specs} as relative
2855 remappings for face @var{face} in the current buffer. The remaining
2856 arguments, @var{specs}, should form either a list of face names, or a
2857 property list of attribute/value pairs.
2858
2859 The return value is a Lisp object that serves as a cookie; you can
2860 pass this object as an argument to @code{face-remap-remove-relative}
2861 if you need to remove the remapping later.
2862
2863 @example
2864 ;; Remap the 'escape-glyph' face into a combination
2865 ;; of the 'highlight' and 'italic' faces:
2866 (face-remap-add-relative 'escape-glyph 'highlight 'italic)
2867
2868 ;; Increase the size of the 'default' face by 50%:
2869 (face-remap-add-relative 'default :height 1.5)
2870 @end example
2871 @end defun
2872
2873 @defun face-remap-remove-relative cookie
2874 This function removes a relative remapping previously added by
2875 @code{face-remap-add-relative}. @var{cookie} should be the Lisp
2876 object returned by @code{face-remap-add-relative} when the remapping
2877 was added.
2878 @end defun
2879
2880 @defun face-remap-set-base face &rest specs
2881 This function sets the base remapping of @var{face} in the current
2882 buffer to @var{specs}. If @var{specs} is empty, the default base
2883 remapping is restored, similar to calling @code{face-remap-reset-base}
2884 (see below); note that this is different from @var{specs} containing a
2885 single value @code{nil}, which has the opposite result (the global
2886 definition of @var{face} is ignored).
2887
2888 This overwrites the default @var{base-spec}, which inherits the global
2889 face definition, so it is up to the caller to add such inheritance if
2890 so desired.
2891 @end defun
2892
2893 @defun face-remap-reset-base face
2894 This function sets the base remapping of @var{face} to its default
2895 value, which inherits from @var{face}'s global definition.
2896 @end defun
2897
2898 @node Face Functions
2899 @subsection Functions for Working with Faces
2900
2901 Here are additional functions for creating and working with faces.
2902
2903 @defun face-list
2904 This function returns a list of all defined face names.
2905 @end defun
2906
2907 @defun face-id face
2908 This function returns the @dfn{face number} of face @var{face}. This
2909 is a number that uniquely identifies a face at low levels within
2910 Emacs. It is seldom necessary to refer to a face by its face number.
2911 @end defun
2912
2913 @defun face-documentation face
2914 This function returns the documentation string of face @var{face}, or
2915 @code{nil} if none was specified for it.
2916 @end defun
2917
2918 @defun face-equal face1 face2 &optional frame
2919 This returns @code{t} if the faces @var{face1} and @var{face2} have the
2920 same attributes for display.
2921 @end defun
2922
2923 @defun face-differs-from-default-p face &optional frame
2924 This returns non-@code{nil} if the face @var{face} displays
2925 differently from the default face.
2926 @end defun
2927
2928 @cindex face alias
2929 @cindex alias, for faces
2930 A @dfn{face alias} provides an equivalent name for a face. You can
2931 define a face alias by giving the alias symbol the @code{face-alias}
2932 property, with a value of the target face name. The following example
2933 makes @code{modeline} an alias for the @code{mode-line} face.
2934
2935 @example
2936 (put 'modeline 'face-alias 'mode-line)
2937 @end example
2938
2939 @defmac define-obsolete-face-alias obsolete-face current-face when
2940 This macro defines @code{obsolete-face} as an alias for
2941 @var{current-face}, and also marks it as obsolete, indicating that it
2942 may be removed in future. @var{when} should be a string indicating
2943 when @code{obsolete-face} was made obsolete (usually a version number
2944 string).
2945 @end defmac
2946
2947 @node Auto Faces
2948 @subsection Automatic Face Assignment
2949 @cindex automatic face assignment
2950 @cindex faces, automatic choice
2951
2952 This hook is used for automatically assigning faces to text in the
2953 buffer. It is part of the implementation of Jit-Lock mode, used by
2954 Font-Lock.
2955
2956 @defvar fontification-functions
2957 This variable holds a list of functions that are called by Emacs
2958 redisplay as needed, just before doing redisplay. They are called even
2959 when Font Lock Mode isn't enabled. When Font Lock Mode is enabled, this
2960 variable usually holds just one function, @code{jit-lock-function}.
2961
2962 The functions are called in the order listed, with one argument, a
2963 buffer position @var{pos}. Collectively they should attempt to assign
2964 faces to the text in the current buffer starting at @var{pos}.
2965
2966 The functions should record the faces they assign by setting the
2967 @code{face} property. They should also add a non-@code{nil}
2968 @code{fontified} property to all the text they have assigned faces to.
2969 That property tells redisplay that faces have been assigned to that text
2970 already.
2971
2972 It is probably a good idea for the functions to do nothing if the
2973 character after @var{pos} already has a non-@code{nil} @code{fontified}
2974 property, but this is not required. If one function overrides the
2975 assignments made by a previous one, the properties after the last
2976 function finishes are the ones that really matter.
2977
2978 For efficiency, we recommend writing these functions so that they
2979 usually assign faces to around 400 to 600 characters at each call.
2980 @end defvar
2981
2982 @node Basic Faces
2983 @subsection Basic Faces
2984 @cindex basic faces
2985
2986 If your Emacs Lisp program needs to assign some faces to text, it is
2987 often a good idea to use certain existing faces or inherit from them,
2988 rather than defining entirely new faces. This way, if other users
2989 have customized the basic faces to give Emacs a certain look, your
2990 program will fit in without additional customization.
2991
2992 Some of the basic faces defined in Emacs are listed below. In
2993 addition to these, you might want to make use of the Font Lock faces
2994 for syntactic highlighting, if highlighting is not already handled by
2995 Font Lock mode, or if some Font Lock faces are not in use.
2996 @xref{Faces for Font Lock}.
2997
2998 @table @code
2999 @item default
3000 The default face, whose attributes are all specified. All other faces
3001 implicitly inherit from it: any unspecified attribute defaults to the
3002 attribute on this face (@pxref{Face Attributes}).
3003
3004 @item bold
3005 @itemx italic
3006 @itemx bold-italic
3007 @itemx underline
3008 @itemx fixed-pitch
3009 @itemx variable-pitch
3010 These have the attributes indicated by their names (e.g., @code{bold}
3011 has a bold @code{:weight} attribute), with all other attributes
3012 unspecified (and so given by @code{default}).
3013
3014 @item shadow
3015 For dimmed-out text. For example, it is used for the ignored
3016 part of a filename in the minibuffer (@pxref{Minibuffer File,,
3017 Minibuffers for File Names, emacs, The GNU Emacs Manual}).
3018
3019 @item link
3020 @itemx link-visited
3021 For clickable text buttons that send the user to a different
3022 buffer or location.
3023
3024 @item highlight
3025 For stretches of text that should temporarily stand out. For example,
3026 it is commonly assigned to the @code{mouse-face} property for cursor
3027 highlighting (@pxref{Special Properties}).
3028
3029 @item match
3030 For text matching a search command.
3031
3032 @item error
3033 @itemx warning
3034 @itemx success
3035 For text concerning errors, warnings, or successes. For example,
3036 these are used for messages in @file{*Compilation*} buffers.
3037 @end table
3038
3039 @node Font Selection
3040 @subsection Font Selection
3041 @cindex font selection
3042 @cindex selecting a font
3043
3044 Before Emacs can draw a character on a graphical display, it must
3045 select a @dfn{font} for that character@footnote{In this context, the
3046 term @dfn{font} has nothing to do with Font Lock (@pxref{Font Lock
3047 Mode}).}. @xref{Fonts,,, emacs, The GNU Emacs Manual}. Normally,
3048 Emacs automatically chooses a font based on the faces assigned to that
3049 character---specifically, the face attributes @code{:family},
3050 @code{:weight}, @code{:slant}, and @code{:width} (@pxref{Face
3051 Attributes}). The choice of font also depends on the character to be
3052 displayed; some fonts can only display a limited set of characters.
3053 If no available font exactly fits the requirements, Emacs looks for
3054 the @dfn{closest matching font}. The variables in this section
3055 control how Emacs makes this selection.
3056
3057 @defopt face-font-family-alternatives
3058 If a given family is specified but does not exist, this variable
3059 specifies alternative font families to try. Each element should have
3060 this form:
3061
3062 @example
3063 (@var{family} @var{alternate-families}@dots{})
3064 @end example
3065
3066 If @var{family} is specified but not available, Emacs will try the other
3067 families given in @var{alternate-families}, one by one, until it finds a
3068 family that does exist.
3069 @end defopt
3070
3071 @defopt face-font-selection-order
3072 If there is no font that exactly matches all desired face attributes
3073 (@code{:width}, @code{:height}, @code{:weight}, and @code{:slant}),
3074 this variable specifies the order in which these attributes should be
3075 considered when selecting the closest matching font. The value should
3076 be a list containing those four attribute symbols, in order of
3077 decreasing importance. The default is @code{(:width :height :weight
3078 :slant)}.
3079
3080 Font selection first finds the best available matches for the first
3081 attribute in the list; then, among the fonts which are best in that
3082 way, it searches for the best matches in the second attribute, and so
3083 on.
3084
3085 The attributes @code{:weight} and @code{:width} have symbolic values in
3086 a range centered around @code{normal}. Matches that are more extreme
3087 (farther from @code{normal}) are somewhat preferred to matches that are
3088 less extreme (closer to @code{normal}); this is designed to ensure that
3089 non-normal faces contrast with normal ones, whenever possible.
3090
3091 One example of a case where this variable makes a difference is when the
3092 default font has no italic equivalent. With the default ordering, the
3093 @code{italic} face will use a non-italic font that is similar to the
3094 default one. But if you put @code{:slant} before @code{:height}, the
3095 @code{italic} face will use an italic font, even if its height is not
3096 quite right.
3097 @end defopt
3098
3099 @defopt face-font-registry-alternatives
3100 This variable lets you specify alternative font registries to try, if a
3101 given registry is specified and doesn't exist. Each element should have
3102 this form:
3103
3104 @example
3105 (@var{registry} @var{alternate-registries}@dots{})
3106 @end example
3107
3108 If @var{registry} is specified but not available, Emacs will try the
3109 other registries given in @var{alternate-registries}, one by one,
3110 until it finds a registry that does exist.
3111 @end defopt
3112
3113 @cindex scalable fonts
3114 Emacs can make use of scalable fonts, but by default it does not use
3115 them.
3116
3117 @defopt scalable-fonts-allowed
3118 This variable controls which scalable fonts to use. A value of
3119 @code{nil}, the default, means do not use scalable fonts. @code{t}
3120 means to use any scalable font that seems appropriate for the text.
3121
3122 Otherwise, the value must be a list of regular expressions. Then a
3123 scalable font is enabled for use if its name matches any regular
3124 expression in the list. For example,
3125
3126 @example
3127 (setq scalable-fonts-allowed '("iso10646-1$"))
3128 @end example
3129
3130 @noindent
3131 allows the use of scalable fonts with registry @code{iso10646-1}.
3132 @end defopt
3133
3134 @defvar face-font-rescale-alist
3135 This variable specifies scaling for certain faces. Its value should
3136 be a list of elements of the form
3137
3138 @example
3139 (@var{fontname-regexp} . @var{scale-factor})
3140 @end example
3141
3142 If @var{fontname-regexp} matches the font name that is about to be
3143 used, this says to choose a larger similar font according to the
3144 factor @var{scale-factor}. You would use this feature to normalize
3145 the font size if certain fonts are bigger or smaller than their
3146 nominal heights and widths would suggest.
3147 @end defvar
3148
3149 @node Font Lookup
3150 @subsection Looking Up Fonts
3151 @cindex font lookup
3152 @cindex looking up fonts
3153
3154 @defun x-list-fonts name &optional reference-face frame maximum width
3155 This function returns a list of available font names that match
3156 @var{name}. @var{name} should be a string containing a font name in
3157 either the Fontconfig, GTK, or XLFD format (@pxref{Fonts,,, emacs, The
3158 GNU Emacs Manual}). Within an XLFD string, wildcard characters may be
3159 used: the @samp{*} character matches any substring, and the @samp{?}
3160 character matches any single character. Case is ignored when matching
3161 font names.
3162
3163 If the optional arguments @var{reference-face} and @var{frame} are
3164 specified, the returned list includes only fonts that are the same
3165 size as @var{reference-face} (a face name) currently is on the frame
3166 @var{frame}.
3167
3168 The optional argument @var{maximum} sets a limit on how many fonts to
3169 return. If it is non-@code{nil}, then the return value is truncated
3170 after the first @var{maximum} matching fonts. Specifying a small
3171 value for @var{maximum} can make this function much faster, in cases
3172 where many fonts match the pattern.
3173
3174 The optional argument @var{width} specifies a desired font width. If
3175 it is non-@code{nil}, the function only returns those fonts whose
3176 characters are (on average) @var{width} times as wide as
3177 @var{reference-face}.
3178 @end defun
3179
3180 @defun x-family-fonts &optional family frame
3181 This function returns a list describing the available fonts for family
3182 @var{family} on @var{frame}. If @var{family} is omitted or @code{nil},
3183 this list applies to all families, and therefore, it contains all
3184 available fonts. Otherwise, @var{family} must be a string; it may
3185 contain the wildcards @samp{?} and @samp{*}.
3186
3187 The list describes the display that @var{frame} is on; if @var{frame} is
3188 omitted or @code{nil}, it applies to the selected frame's display
3189 (@pxref{Input Focus}).
3190
3191 Each element in the list is a vector of the following form:
3192
3193 @example
3194 [@var{family} @var{width} @var{point-size} @var{weight} @var{slant}
3195 @var{fixed-p} @var{full} @var{registry-and-encoding}]
3196 @end example
3197
3198 The first five elements correspond to face attributes; if you
3199 specify these attributes for a face, it will use this font.
3200
3201 The last three elements give additional information about the font.
3202 @var{fixed-p} is non-@code{nil} if the font is fixed-pitch.
3203 @var{full} is the full name of the font, and
3204 @var{registry-and-encoding} is a string giving the registry and
3205 encoding of the font.
3206 @end defun
3207
3208 @node Fontsets
3209 @subsection Fontsets
3210 @cindex fontset
3211
3212 A @dfn{fontset} is a list of fonts, each assigned to a range of
3213 character codes. An individual font cannot display the whole range of
3214 characters that Emacs supports, but a fontset can. Fontsets have names,
3215 just as fonts do, and you can use a fontset name in place of a font name
3216 when you specify the font for a frame or a face. Here is
3217 information about defining a fontset under Lisp program control.
3218
3219 @defun create-fontset-from-fontset-spec fontset-spec &optional style-variant-p noerror
3220 This function defines a new fontset according to the specification
3221 string @var{fontset-spec}. The string should have this format:
3222
3223 @smallexample
3224 @var{fontpattern}, @r{[}@var{charset}:@var{font}@r{]@dots{}}
3225 @end smallexample
3226
3227 @noindent
3228 Whitespace characters before and after the commas are ignored.
3229
3230 The first part of the string, @var{fontpattern}, should have the form of
3231 a standard X font name, except that the last two fields should be
3232 @samp{fontset-@var{alias}}.
3233
3234 The new fontset has two names, one long and one short. The long name is
3235 @var{fontpattern} in its entirety. The short name is
3236 @samp{fontset-@var{alias}}. You can refer to the fontset by either
3237 name. If a fontset with the same name already exists, an error is
3238 signaled, unless @var{noerror} is non-@code{nil}, in which case this
3239 function does nothing.
3240
3241 If optional argument @var{style-variant-p} is non-@code{nil}, that says
3242 to create bold, italic and bold-italic variants of the fontset as well.
3243 These variant fontsets do not have a short name, only a long one, which
3244 is made by altering @var{fontpattern} to indicate the bold and/or italic
3245 status.
3246
3247 The specification string also says which fonts to use in the fontset.
3248 See below for the details.
3249 @end defun
3250
3251 The construct @samp{@var{charset}:@var{font}} specifies which font to
3252 use (in this fontset) for one particular character set. Here,
3253 @var{charset} is the name of a character set, and @var{font} is the font
3254 to use for that character set. You can use this construct any number of
3255 times in the specification string.
3256
3257 For the remaining character sets, those that you don't specify
3258 explicitly, Emacs chooses a font based on @var{fontpattern}: it replaces
3259 @samp{fontset-@var{alias}} with a value that names one character set.
3260 For the @acronym{ASCII} character set, @samp{fontset-@var{alias}} is replaced
3261 with @samp{ISO8859-1}.
3262
3263 In addition, when several consecutive fields are wildcards, Emacs
3264 collapses them into a single wildcard. This is to prevent use of
3265 auto-scaled fonts. Fonts made by scaling larger fonts are not usable
3266 for editing, and scaling a smaller font is not useful because it is
3267 better to use the smaller font in its own size, which Emacs does.
3268
3269 Thus if @var{fontpattern} is this,
3270
3271 @example
3272 -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24
3273 @end example
3274
3275 @noindent
3276 the font specification for @acronym{ASCII} characters would be this:
3277
3278 @example
3279 -*-fixed-medium-r-normal-*-24-*-ISO8859-1
3280 @end example
3281
3282 @noindent
3283 and the font specification for Chinese GB2312 characters would be this:
3284
3285 @example
3286 -*-fixed-medium-r-normal-*-24-*-gb2312*-*
3287 @end example
3288
3289 You may not have any Chinese font matching the above font
3290 specification. Most X distributions include only Chinese fonts that
3291 have @samp{song ti} or @samp{fangsong ti} in the @var{family} field. In
3292 such a case, @samp{Fontset-@var{n}} can be specified as below:
3293
3294 @smallexample
3295 Emacs.Fontset-0: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24,\
3296 chinese-gb2312:-*-*-medium-r-normal-*-24-*-gb2312*-*
3297 @end smallexample
3298
3299 @noindent
3300 Then, the font specifications for all but Chinese GB2312 characters have
3301 @samp{fixed} in the @var{family} field, and the font specification for
3302 Chinese GB2312 characters has a wild card @samp{*} in the @var{family}
3303 field.
3304
3305 @defun set-fontset-font name character font-spec &optional frame add
3306 This function modifies the existing fontset @var{name} to use the font
3307 matching with @var{font-spec} for the specified @var{character}.
3308
3309 If @var{name} is @code{nil}, this function modifies the fontset of the
3310 selected frame or that of @var{frame} if @var{frame} is not
3311 @code{nil}.
3312
3313 If @var{name} is @code{t}, this function modifies the default
3314 fontset, whose short name is @samp{fontset-default}.
3315
3316 In addition to specifying a single codepoint, @var{character} may be a
3317 cons @code{(@var{from} . @var{to})}, where @var{from} and @var{to} are
3318 character codepoints. In that case, use @var{font-spec} for all the
3319 characters in the range @var{from} and @var{to} (inclusive).
3320
3321 @var{character} may be a charset. In that case, use
3322 @var{font-spec} for all character in the charsets.
3323
3324 @var{character} may be a script name. In that case, use
3325 @var{font-spec} for all character in the charsets.
3326
3327 @var{font-spec} may be a font-spec object created by the function
3328 @code{font-spec} (@pxref{Low-Level Font}).
3329
3330 @var{font-spec} may be a cons; @code{(@var{family} . @var{registry})},
3331 where @var{family} is a family name of a font (possibly including a
3332 foundry name at the head), @var{registry} is a registry name of a font
3333 (possibly including an encoding name at the tail).
3334
3335 @var{font-spec} may be a font name string.
3336
3337 @var{font-spec} may be @code{nil}, which explicitly specifies that
3338 there's no font for the specified @var{character}. This is useful,
3339 for example, to avoid expensive system-wide search for fonts for
3340 characters that have no glyphs, like those from the Unicode Private
3341 Use Area (PUA).
3342
3343 The optional argument @var{add}, if non-@code{nil}, specifies how to
3344 add @var{font-spec} to the font specifications previously set. If it
3345 is @code{prepend}, @var{font-spec} is prepended. If it is
3346 @code{append}, @var{font-spec} is appended. By default,
3347 @var{font-spec} overrides the previous settings.
3348
3349 For instance, this changes the default fontset to use a font of which
3350 family name is @samp{Kochi Gothic} for all characters belonging to
3351 the charset @code{japanese-jisx0208}.
3352
3353 @smallexample
3354 (set-fontset-font t 'japanese-jisx0208
3355 (font-spec :family "Kochi Gothic"))
3356 @end smallexample
3357 @end defun
3358
3359 @defun char-displayable-p char
3360 This function returns @code{t} if Emacs ought to be able to display
3361 @var{char}. More precisely, if the selected frame's fontset has a
3362 font to display the character set that @var{char} belongs to.
3363
3364 Fontsets can specify a font on a per-character basis; when the fontset
3365 does that, this function's value may not be accurate.
3366 @end defun
3367
3368 @node Low-Level Font
3369 @subsection Low-Level Font Representation
3370 @cindex font property
3371
3372 Normally, it is not necessary to manipulate fonts directly. In case
3373 you need to do so, this section explains how.
3374
3375 In Emacs Lisp, fonts are represented using three different Lisp
3376 object types: @dfn{font objects}, @dfn{font specs}, and @dfn{font
3377 entities}.
3378
3379 @defun fontp object &optional type
3380 Return @code{t} if @var{object} is a font object, font spec, or font
3381 entity. Otherwise, return @code{nil}.
3382
3383 The optional argument @var{type}, if non-@code{nil}, determines the
3384 exact type of Lisp object to check for. In that case, @var{type}
3385 should be one of @code{font-object}, @code{font-spec}, or
3386 @code{font-entity}.
3387 @end defun
3388
3389 @cindex font object
3390 A font object is a Lisp object that represents a font that Emacs has
3391 @dfn{opened}. Font objects cannot be modified in Lisp, but they can
3392 be inspected.
3393
3394 @defun font-at position &optional window string
3395 Return the font object that is being used to display the character at
3396 position @var{position} in the window @var{window}. If @var{window}
3397 is @code{nil}, it defaults to the selected window. If @var{string} is
3398 @code{nil}, @var{position} specifies a position in the current buffer;
3399 otherwise, @var{string} should be a string, and @var{position}
3400 specifies a position in that string.
3401 @end defun
3402
3403 @cindex font spec
3404 A font spec is a Lisp object that contains a set of specifications
3405 that can be used to find a font. More than one font may match the
3406 specifications in a font spec.
3407
3408 @defun font-spec &rest arguments
3409 Return a new font spec using the specifications in @var{arguments},
3410 which should come in @code{property}-@code{value} pairs. The possible
3411 specifications are as follows:
3412
3413 @table @code
3414 @item :name
3415 The font name (a string), in either XLFD, Fontconfig, or GTK format.
3416 @xref{Fonts,,, emacs, The GNU Emacs Manual}.
3417
3418 @item :family
3419 @itemx :foundry
3420 @itemx :weight
3421 @itemx :slant
3422 @itemx :width
3423 These have the same meanings as the face attributes of the same name.
3424 @xref{Face Attributes}.
3425
3426 @item :size
3427 The font size---either a non-negative integer that specifies the pixel
3428 size, or a floating-point number that specifies the point size.
3429
3430 @item :adstyle
3431 Additional typographic style information for the font, such as
3432 @samp{sans}. The value should be a string or a symbol.
3433
3434 @cindex font registry
3435 @item :registry
3436 The charset registry and encoding of the font, such as
3437 @samp{iso8859-1}. The value should be a string or a symbol.
3438
3439 @item :script
3440 The script that the font must support (a symbol).
3441
3442 @item :lang
3443 The language that the font should support. The value should be a
3444 symbol whose name is a two-letter ISO-639 language name. On X, the
3445 value is matched against the ``Additional Style'' field of the XLFD
3446 name of a font, if it is non-empty. On MS-Windows, fonts matching the
3447 spec are required to support codepages needed for the language.
3448 Currently, only a small set of CJK languages is supported with this
3449 property: @samp{ja}, @samp{ko}, and @samp{zh}.
3450
3451 @item :otf
3452 @cindex OpenType font
3453 The font must be an OpenType font that supports these OpenType
3454 features, provided Emacs is compiled with a library, such as
3455 @samp{libotf} on GNU/Linux, that supports complex text layout for
3456 scripts which need that. The value must be a list of the form
3457
3458 @smallexample
3459 @code{(@var{script-tag} @var{langsys-tag} @var{gsub} @var{gpos})}
3460 @end smallexample
3461
3462 where @var{script-tag} is the OpenType script tag symbol;
3463 @var{langsys-tag} is the OpenType language system tag symbol, or
3464 @code{nil} to use the default language system; @code{gsub} is a list
3465 of OpenType GSUB feature tag symbols, or @code{nil} if none is
3466 required; and @code{gpos} is a list of OpenType GPOS feature tag
3467 symbols, or @code{nil} if none is required. If @code{gsub} or
3468 @code{gpos} is a list, a @code{nil} element in that list means that
3469 the font must not match any of the remaining tag symbols. The
3470 @code{gpos} element may be omitted.
3471 @end table
3472 @end defun
3473
3474 @defun font-put font-spec property value
3475 Set the font property @var{property} in the font-spec @var{font-spec}
3476 to @var{value}.
3477 @end defun
3478
3479 @cindex font entity
3480 A font entity is a reference to a font that need not be open. Its
3481 properties are intermediate between a font object and a font spec:
3482 like a font object, and unlike a font spec, it refers to a single,
3483 specific font. Unlike a font object, creating a font entity does not
3484 load the contents of that font into computer memory. Emacs may open
3485 multiple font objects of different sizes from a single font entity
3486 referring to a scalable font.
3487
3488 @defun find-font font-spec &optional frame
3489 This function returns a font entity that best matches the font spec
3490 @var{font-spec} on frame @var{frame}. If @var{frame} is @code{nil},
3491 it defaults to the selected frame.
3492 @end defun
3493
3494 @defun list-fonts font-spec &optional frame num prefer
3495 This function returns a list of all font entities that match the font
3496 spec @var{font-spec}.
3497
3498 The optional argument @var{frame}, if non-@code{nil}, specifies the
3499 frame on which the fonts are to be displayed. The optional argument
3500 @var{num}, if non-@code{nil}, should be an integer that specifies the
3501 maximum length of the returned list. The optional argument
3502 @var{prefer}, if non-@code{nil}, should be another font spec, which is
3503 used to control the order of the returned list; the returned font
3504 entities are sorted in order of decreasing closeness to that font
3505 spec.
3506 @end defun
3507
3508 If you call @code{set-face-attribute} and pass a font spec, font
3509 entity, or font name string as the value of the @code{:font}
3510 attribute, Emacs opens the best matching font that is available
3511 for display. It then stores the corresponding font object as the
3512 actual value of the @code{:font} attribute for that face.
3513
3514 The following functions can be used to obtain information about a
3515 font. For these functions, the @var{font} argument can be a font
3516 object, a font entity, or a font spec.
3517
3518 @defun font-get font property
3519 This function returns the value of the font property @var{property}
3520 for @var{font}.
3521
3522 If @var{font} is a font spec and the font spec does not specify
3523 @var{property}, the return value is @code{nil}. If @var{font} is a
3524 font object or font entity, the value for the @var{:script} property
3525 may be a list of scripts supported by the font.
3526 @end defun
3527
3528 @defun font-face-attributes font &optional frame
3529 This function returns a list of face attributes corresponding to
3530 @var{font}. The optional argument @var{frame} specifies the frame on
3531 which the font is to be displayed. If it is @code{nil}, the selected
3532 frame is used. The return value has the form
3533
3534 @smallexample
3535 (:family @var{family} :height @var{height} :weight @var{weight}
3536 :slant @var{slant} :width @var{width})
3537 @end smallexample
3538
3539 where the values of @var{family}, @var{height}, @var{weight},
3540 @var{slant}, and @var{width} are face attribute values. Some of these
3541 key-attribute pairs may be omitted from the list if they are not
3542 specified by @var{font}.
3543 @end defun
3544
3545 @defun font-xlfd-name font &optional fold-wildcards
3546 This function returns the XLFD (X Logical Font Descriptor), a string,
3547 matching @var{font}. @xref{Fonts,,, emacs, The GNU Emacs Manual}, for
3548 information about XLFDs. If the name is too long for an XLFD (which
3549 can contain at most 255 characters), the function returns @code{nil}.
3550
3551 If the optional argument @var{fold-wildcards} is non-@code{nil},
3552 consecutive wildcards in the XLFD are folded into one.
3553 @end defun
3554
3555 The following two functions return important information about a font.
3556
3557 @defun font-info name &optional frame
3558 This function returns information about a font specified by its
3559 @var{name}, a string, as it is used on @var{frame}. If @var{frame} is
3560 omitted or @code{nil}, it defaults to the selected frame.
3561
3562 The value returned by the function is a vector of the form
3563 @code{[@var{opened-name} @var{full-name} @var{size} @var{height}
3564 @var{baseline-offset} @var{relative-compose} @var{default-ascent}
3565 @var{max-width} @var{ascent} @var{descent} @var{space-width}
3566 @var{average-width} @var{filename} @var{capability}]}. Here's the
3567 description of each components of this vector:
3568
3569 @table @var
3570 @item opened-name
3571 The name used to open the font, a string.
3572
3573 @item full-name
3574 The full name of the font, a string.
3575
3576 @item size
3577 The pixel size of the font.
3578
3579 @item height
3580 The height of the font in pixels.
3581
3582 @item baseline-offset
3583 The offset in pixels from the @acronym{ASCII} baseline, positive
3584 upward.
3585
3586 @item relative-compose
3587 @itemx default-ascent
3588 Numbers controlling how to compose characters.
3589
3590 @item ascent
3591 @itemx descent
3592 The ascent and descent of this font. The sum of these two numbers
3593 should be equal to the value of @var{height} above.
3594
3595 @item space-width
3596 The width, in pixels, of the font's space character.
3597
3598 @item average-width
3599 The average width of the font characters. If this is zero, Emacs uses
3600 the value of @var{space-width} instead, when it calculates text layout
3601 on display.
3602
3603 @item filename
3604 The file name of the font as a string. This can be @code{nil} if the
3605 font back-end does not provide a way to find out the font's file name.
3606
3607 @item capability
3608 A list whose first element is a symbol representing the font type, one
3609 of @code{x}, @code{opentype}, @code{truetype}, @code{type1},
3610 @code{pcf}, or @code{bdf}. For OpenType fonts, the list includes 2
3611 additional elements describing the @sc{gsub} and @sc{gpos} features
3612 supported by the font. Each of these elements is a list of the form
3613 @code{((@var{script} (@var{langsys} @var{feature} @dots{}) @dots{})
3614 @dots{})}, where @var{script} is a symbol representing an OpenType
3615 script tag, @var{langsys} is a symbol representing an OpenType langsys
3616 tag (or @code{nil}, which stands for the default langsys), and each
3617 @var{feature} is a symbol representing an OpenType feature tag.
3618 @end table
3619 @end defun
3620
3621 @defun query-font font-object
3622 This function returns information about a @var{font-object}. (This is
3623 in contrast to @code{font-info}, which takes the font name, a string,
3624 as its argument.)
3625
3626 The value returned by the function is a vector of the form
3627 @code{[@var{name} @var{filename} @var{pixel-size} @var{max-width}
3628 @var{ascent} @var{descent} @var{space-width} @var{average-width}
3629 @var{capability}]}. Here's the description of each components of this
3630 vector:
3631
3632 @table @var
3633 @item name
3634 The font name, a string.
3635
3636 @item filename
3637 The file name of the font as a string. This can be @code{nil} if the
3638 font back-end does not provide a way to find out the font's file name.
3639
3640 @item pixel-size
3641 The pixel size of the font used to open the font.
3642
3643 @item max-width
3644 The maximum advance width of the font.
3645
3646 @item ascent
3647 @itemx descent
3648 The ascent and descent of this font. The sum of these two numbers
3649 gives the font height.
3650
3651 @item space-width
3652 The width, in pixels, of the font's space character.
3653
3654 @item average-width
3655 The average width of the font characters. If this is zero, Emacs uses
3656 the value of @var{space-width} instead, when it calculates text layout
3657 on display.
3658
3659 @item capability
3660 A list whose first element is a symbol representing the font type, one
3661 of @code{x}, @code{opentype}, @code{truetype}, @code{type1},
3662 @code{pcf}, or @code{bdf}. For OpenType fonts, the list includes 2
3663 additional elements describing the @sc{gsub} and @sc{gpos} features
3664 supported by the font. Each of these elements is a list of the form
3665 @code{((@var{script} (@var{langsys} @var{feature} @dots{}) @dots{})
3666 @dots{})}, where @var{script} is a symbol representing an OpenType
3667 script tag, @var{langsys} is a symbol representing an OpenType langsys
3668 tag (or @code{nil}, which stands for the default langsys), and each
3669 @var{feature} is a symbol representing an OpenType feature tag.
3670 @end table
3671 @end defun
3672
3673 @cindex font information for layout
3674 The following four functions return size information about fonts used
3675 by various faces, allowing various layout considerations in Lisp
3676 programs. These functions take face remapping into consideration,
3677 returning information about the remapped face, if the face in question
3678 was remapped. @xref{Face Remapping}.
3679
3680 @defun default-font-width
3681 This function returns the average width in pixels of the font used by
3682 the current buffer's default face.
3683 @end defun
3684
3685 @defun default-font-height
3686 This function returns the height in pixels of the font used by the
3687 current buffer's default face.
3688 @end defun
3689
3690 @defun window-font-width &optional window face
3691 This function returns the average width in pixels for the font used by
3692 @var{face} in @var{window}. The specified @var{window} must be a live
3693 window. If @code{nil} or omitted, @var{window} defaults to the
3694 selected window, and @var{face} defaults to the default face in
3695 @var{window}.
3696 @end defun
3697
3698 @defun window-font-height &optional window face
3699 This function returns the height in pixels for the font used by
3700 @var{face} in @var{window}. The specified @var{window} must be a live
3701 window. If @code{nil} or omitted, @var{window} defaults to the
3702 selected window, and @var{face} defaults to the default face in
3703 @var{window}.
3704 @end defun
3705
3706 @node Fringes
3707 @section Fringes
3708 @cindex fringes
3709
3710 On graphical displays, Emacs draws @dfn{fringes} next to each
3711 window: thin vertical strips down the sides which can display bitmaps
3712 indicating truncation, continuation, horizontal scrolling, and so on.
3713
3714 @menu
3715 * Fringe Size/Pos:: Specifying where to put the window fringes.
3716 * Fringe Indicators:: Displaying indicator icons in the window fringes.
3717 * Fringe Cursors:: Displaying cursors in the right fringe.
3718 * Fringe Bitmaps:: Specifying bitmaps for fringe indicators.
3719 * Customizing Bitmaps:: Specifying your own bitmaps to use in the fringes.
3720 * Overlay Arrow:: Display of an arrow to indicate position.
3721 @end menu
3722
3723 @node Fringe Size/Pos
3724 @subsection Fringe Size and Position
3725
3726 The following buffer-local variables control the position and width
3727 of fringes in windows showing that buffer.
3728
3729 @defvar fringes-outside-margins
3730 The fringes normally appear between the display margins and the window
3731 text. If the value is non-@code{nil}, they appear outside the display
3732 margins. @xref{Display Margins}.
3733 @end defvar
3734
3735 @defvar left-fringe-width
3736 This variable, if non-@code{nil}, specifies the width of the left
3737 fringe in pixels. A value of @code{nil} means to use the left fringe
3738 width from the window's frame.
3739 @end defvar
3740
3741 @defvar right-fringe-width
3742 This variable, if non-@code{nil}, specifies the width of the right
3743 fringe in pixels. A value of @code{nil} means to use the right fringe
3744 width from the window's frame.
3745 @end defvar
3746
3747 Any buffer which does not specify values for these variables uses
3748 the values specified by the @code{left-fringe} and @code{right-fringe}
3749 frame parameters (@pxref{Layout Parameters}).
3750
3751 The above variables actually take effect via the function
3752 @code{set-window-buffer} (@pxref{Buffers and Windows}), which calls
3753 @code{set-window-fringes} as a subroutine. If you change one of these
3754 variables, the fringe display is not updated in existing windows
3755 showing the buffer, unless you call @code{set-window-buffer} again in
3756 each affected window. You can also use @code{set-window-fringes} to
3757 control the fringe display in individual windows.
3758
3759 @defun set-window-fringes window left &optional right outside-margins
3760 This function sets the fringe widths of window @var{window}.
3761 If @var{window} is @code{nil}, the selected window is used.
3762
3763 The argument @var{left} specifies the width in pixels of the left
3764 fringe, and likewise @var{right} for the right fringe. A value of
3765 @code{nil} for either one stands for the default width. If
3766 @var{outside-margins} is non-@code{nil}, that specifies that fringes
3767 should appear outside of the display margins.
3768 @end defun
3769
3770 @defun window-fringes &optional window
3771 This function returns information about the fringes of a window
3772 @var{window}. If @var{window} is omitted or @code{nil}, the selected
3773 window is used. The value has the form @code{(@var{left-width}
3774 @var{right-width} @var{outside-margins})}.
3775 @end defun
3776
3777
3778 @node Fringe Indicators
3779 @subsection Fringe Indicators
3780 @cindex fringe indicators
3781 @cindex indicators, fringe
3782
3783 @dfn{Fringe indicators} are tiny icons displayed in the window
3784 fringe to indicate truncated or continued lines, buffer boundaries,
3785 etc.
3786
3787 @defopt indicate-empty-lines
3788 @cindex fringes, and empty line indication
3789 @cindex empty lines, indicating
3790 When this is non-@code{nil}, Emacs displays a special glyph in the
3791 fringe of each empty line at the end of the buffer, on graphical
3792 displays. @xref{Fringes}. This variable is automatically
3793 buffer-local in every buffer.
3794 @end defopt
3795
3796 @defopt indicate-buffer-boundaries
3797 @cindex buffer boundaries, indicating
3798 This buffer-local variable controls how the buffer boundaries and
3799 window scrolling are indicated in the window fringes.
3800
3801 Emacs can indicate the buffer boundaries---that is, the first and last
3802 line in the buffer---with angle icons when they appear on the screen.
3803 In addition, Emacs can display an up-arrow in the fringe to show
3804 that there is text above the screen, and a down-arrow to show
3805 there is text below the screen.
3806
3807 There are three kinds of basic values:
3808
3809 @table @asis
3810 @item @code{nil}
3811 Don't display any of these fringe icons.
3812 @item @code{left}
3813 Display the angle icons and arrows in the left fringe.
3814 @item @code{right}
3815 Display the angle icons and arrows in the right fringe.
3816 @item any non-alist
3817 Display the angle icons in the left fringe
3818 and don't display the arrows.
3819 @end table
3820
3821 Otherwise the value should be an alist that specifies which fringe
3822 indicators to display and where. Each element of the alist should
3823 have the form @code{(@var{indicator} . @var{position})}. Here,
3824 @var{indicator} is one of @code{top}, @code{bottom}, @code{up},
3825 @code{down}, and @code{t} (which covers all the icons not yet
3826 specified), while @var{position} is one of @code{left}, @code{right}
3827 and @code{nil}.
3828
3829 For example, @code{((top . left) (t . right))} places the top angle
3830 bitmap in left fringe, and the bottom angle bitmap as well as both
3831 arrow bitmaps in right fringe. To show the angle bitmaps in the left
3832 fringe, and no arrow bitmaps, use @code{((top . left) (bottom . left))}.
3833 @end defopt
3834
3835 @defvar fringe-indicator-alist
3836 This buffer-local variable specifies the mapping from logical fringe
3837 indicators to the actual bitmaps displayed in the window fringes. The
3838 value is an alist of elements @code{(@var{indicator}
3839 . @var{bitmaps})}, where @var{indicator} specifies a logical indicator
3840 type and @var{bitmaps} specifies the fringe bitmaps to use for that
3841 indicator.
3842
3843 Each @var{indicator} should be one of the following symbols:
3844
3845 @table @asis
3846 @item @code{truncation}, @code{continuation}.
3847 Used for truncation and continuation lines.
3848
3849 @item @code{up}, @code{down}, @code{top}, @code{bottom}, @code{top-bottom}
3850 Used when @code{indicate-buffer-boundaries} is non-@code{nil}:
3851 @code{up} and @code{down} indicate a buffer boundary lying above or
3852 below the window edge; @code{top} and @code{bottom} indicate the
3853 topmost and bottommost buffer text line; and @code{top-bottom}
3854 indicates where there is just one line of text in the buffer.
3855
3856 @item @code{empty-line}
3857 Used to indicate empty lines when @code{indicate-empty-lines} is
3858 non-@code{nil}.
3859
3860 @item @code{overlay-arrow}
3861 Used for overlay arrows (@pxref{Overlay Arrow}).
3862 @c Is this used anywhere?
3863 @c @item Unknown bitmap indicator:
3864 @c @code{unknown}.
3865 @end table
3866
3867 Each @var{bitmaps} value may be a list of symbols @code{(@var{left}
3868 @var{right} [@var{left1} @var{right1}])}. The @var{left} and
3869 @var{right} symbols specify the bitmaps shown in the left and/or right
3870 fringe, for the specific indicator. @var{left1} and @var{right1} are
3871 specific to the @code{bottom} and @code{top-bottom} indicators, and
3872 are used to indicate that the last text line has no final newline.
3873 Alternatively, @var{bitmaps} may be a single symbol which is used in
3874 both left and right fringes.
3875
3876 @xref{Fringe Bitmaps}, for a list of standard bitmap symbols and how
3877 to define your own. In addition, @code{nil} represents the empty
3878 bitmap (i.e., an indicator that is not shown).
3879
3880 When @code{fringe-indicator-alist} has a buffer-local value, and
3881 there is no bitmap defined for a logical indicator, or the bitmap is
3882 @code{t}, the corresponding value from the default value of
3883 @code{fringe-indicator-alist} is used.
3884 @end defvar
3885
3886 @node Fringe Cursors
3887 @subsection Fringe Cursors
3888 @cindex fringe cursors
3889 @cindex cursor, fringe
3890
3891 When a line is exactly as wide as the window, Emacs displays the
3892 cursor in the right fringe instead of using two lines. Different
3893 bitmaps are used to represent the cursor in the fringe depending on
3894 the current buffer's cursor type.
3895
3896 @defopt overflow-newline-into-fringe
3897 If this is non-@code{nil}, lines exactly as wide as the window (not
3898 counting the final newline character) are not continued. Instead,
3899 when point is at the end of the line, the cursor appears in the right
3900 fringe.
3901 @end defopt
3902
3903 @defvar fringe-cursor-alist
3904 This variable specifies the mapping from logical cursor type to the
3905 actual fringe bitmaps displayed in the right fringe. The value is an
3906 alist where each element has the form @code{(@var{cursor-type}
3907 . @var{bitmap})}, which means to use the fringe bitmap @var{bitmap} to
3908 display cursors of type @var{cursor-type}.
3909
3910 Each @var{cursor-type} should be one of @code{box}, @code{hollow},
3911 @code{bar}, @code{hbar}, or @code{hollow-small}. The first four have
3912 the same meanings as in the @code{cursor-type} frame parameter
3913 (@pxref{Cursor Parameters}). The @code{hollow-small} type is used
3914 instead of @code{hollow} when the normal @code{hollow-rectangle}
3915 bitmap is too tall to fit on a specific display line.
3916
3917 Each @var{bitmap} should be a symbol specifying the fringe bitmap to
3918 be displayed for that logical cursor type.
3919 @iftex
3920 See the next subsection for details.
3921 @end iftex
3922 @ifnottex
3923 @xref{Fringe Bitmaps}.
3924 @end ifnottex
3925
3926 @c FIXME: I can't find the fringes-indicator-alist variable. Maybe
3927 @c it should be fringe-indicator-alist or fringe-cursor-alist? --xfq
3928 When @code{fringe-cursor-alist} has a buffer-local value, and there is
3929 no bitmap defined for a cursor type, the corresponding value from the
3930 default value of @code{fringes-indicator-alist} is used.
3931 @end defvar
3932
3933 @node Fringe Bitmaps
3934 @subsection Fringe Bitmaps
3935 @cindex fringe bitmaps
3936 @cindex bitmaps, fringe
3937
3938 The @dfn{fringe bitmaps} are the actual bitmaps which represent the
3939 logical fringe indicators for truncated or continued lines, buffer
3940 boundaries, overlay arrows, etc. Each bitmap is represented by a
3941 symbol.
3942 @iftex
3943 These symbols are referred to by the variables
3944 @code{fringe-indicator-alist} and @code{fringe-cursor-alist},
3945 described in the previous subsections.
3946 @end iftex
3947 @ifnottex
3948 These symbols are referred to by the variable
3949 @code{fringe-indicator-alist}, which maps fringe indicators to bitmaps
3950 (@pxref{Fringe Indicators}), and the variable
3951 @code{fringe-cursor-alist}, which maps fringe cursors to bitmaps
3952 (@pxref{Fringe Cursors}).
3953 @end ifnottex
3954
3955 Lisp programs can also directly display a bitmap in the left or
3956 right fringe, by using a @code{display} property for one of the
3957 characters appearing in the line (@pxref{Other Display Specs}). Such
3958 a display specification has the form
3959
3960 @example
3961 (@var{fringe} @var{bitmap} [@var{face}])
3962 @end example
3963
3964 @noindent
3965 @var{fringe} is either the symbol @code{left-fringe} or
3966 @code{right-fringe}. @var{bitmap} is a symbol identifying the bitmap
3967 to display. The optional @var{face} names a face whose foreground
3968 color is used to display the bitmap; this face is automatically merged
3969 with the @code{fringe} face.
3970
3971 Here is a list of the standard fringe bitmaps defined in Emacs, and
3972 how they are currently used in Emacs (via
3973 @code{fringe-indicator-alist} and @code{fringe-cursor-alist}):
3974
3975 @table @asis
3976 @item @code{left-arrow}, @code{right-arrow}
3977 Used to indicate truncated lines.
3978
3979 @item @code{left-curly-arrow}, @code{right-curly-arrow}
3980 Used to indicate continued lines.
3981
3982 @item @code{right-triangle}, @code{left-triangle}
3983 The former is used by overlay arrows. The latter is unused.
3984
3985 @item @code{up-arrow}, @code{down-arrow}, @code{top-left-angle} @code{top-right-angle}
3986 @itemx @code{bottom-left-angle}, @code{bottom-right-angle}
3987 @itemx @code{top-right-angle}, @code{top-left-angle}
3988 @itemx @code{left-bracket}, @code{right-bracket}, @code{top-right-angle}, @code{top-left-angle}
3989 Used to indicate buffer boundaries.
3990
3991 @item @code{filled-rectangle}, @code{hollow-rectangle}
3992 @itemx @code{filled-square}, @code{hollow-square}
3993 @itemx @code{vertical-bar}, @code{horizontal-bar}
3994 Used for different types of fringe cursors.
3995
3996 @item @code{empty-line}, @code{exclamation-mark}, @code{question-mark}, @code{exclamation-mark}
3997 Not used by core Emacs features.
3998 @end table
3999
4000 @noindent
4001 The next subsection describes how to define your own fringe bitmaps.
4002
4003 @defun fringe-bitmaps-at-pos &optional pos window
4004 This function returns the fringe bitmaps of the display line
4005 containing position @var{pos} in window @var{window}. The return
4006 value has the form @code{(@var{left} @var{right} @var{ov})}, where @var{left}
4007 is the symbol for the fringe bitmap in the left fringe (or @code{nil}
4008 if no bitmap), @var{right} is similar for the right fringe, and @var{ov}
4009 is non-@code{nil} if there is an overlay arrow in the left fringe.
4010
4011 The value is @code{nil} if @var{pos} is not visible in @var{window}.
4012 If @var{window} is @code{nil}, that stands for the selected window.
4013 If @var{pos} is @code{nil}, that stands for the value of point in
4014 @var{window}.
4015 @end defun
4016
4017 @node Customizing Bitmaps
4018 @subsection Customizing Fringe Bitmaps
4019 @cindex fringe bitmaps, customizing
4020
4021 @defun define-fringe-bitmap bitmap bits &optional height width align
4022 This function defines the symbol @var{bitmap} as a new fringe bitmap,
4023 or replaces an existing bitmap with that name.
4024
4025 The argument @var{bits} specifies the image to use. It should be
4026 either a string or a vector of integers, where each element (an
4027 integer) corresponds to one row of the bitmap. Each bit of an integer
4028 corresponds to one pixel of the bitmap, where the low bit corresponds
4029 to the rightmost pixel of the bitmap.
4030
4031 The height is normally the length of @var{bits}. However, you
4032 can specify a different height with non-@code{nil} @var{height}. The width
4033 is normally 8, but you can specify a different width with non-@code{nil}
4034 @var{width}. The width must be an integer between 1 and 16.
4035
4036 The argument @var{align} specifies the positioning of the bitmap
4037 relative to the range of rows where it is used; the default is to
4038 center the bitmap. The allowed values are @code{top}, @code{center},
4039 or @code{bottom}.
4040
4041 The @var{align} argument may also be a list @code{(@var{align}
4042 @var{periodic})} where @var{align} is interpreted as described above.
4043 If @var{periodic} is non-@code{nil}, it specifies that the rows in
4044 @code{bits} should be repeated enough times to reach the specified
4045 height.
4046 @end defun
4047
4048 @defun destroy-fringe-bitmap bitmap
4049 This function destroy the fringe bitmap identified by @var{bitmap}.
4050 If @var{bitmap} identifies a standard fringe bitmap, it actually
4051 restores the standard definition of that bitmap, instead of
4052 eliminating it entirely.
4053 @end defun
4054
4055 @defun set-fringe-bitmap-face bitmap &optional face
4056 This sets the face for the fringe bitmap @var{bitmap} to @var{face}.
4057 If @var{face} is @code{nil}, it selects the @code{fringe} face. The
4058 bitmap's face controls the color to draw it in.
4059
4060 @var{face} is merged with the @code{fringe} face, so normally
4061 @var{face} should specify only the foreground color.
4062 @end defun
4063
4064 @node Overlay Arrow
4065 @subsection The Overlay Arrow
4066 @c @cindex overlay arrow Duplicates variable names
4067
4068 The @dfn{overlay arrow} is useful for directing the user's attention
4069 to a particular line in a buffer. For example, in the modes used for
4070 interface to debuggers, the overlay arrow indicates the line of code
4071 about to be executed. This feature has nothing to do with
4072 @dfn{overlays} (@pxref{Overlays}).
4073
4074 @defvar overlay-arrow-string
4075 This variable holds the string to display to call attention to a
4076 particular line, or @code{nil} if the arrow feature is not in use.
4077 On a graphical display the contents of the string are ignored; instead a
4078 glyph is displayed in the fringe area to the left of the display area.
4079 @end defvar
4080
4081 @defvar overlay-arrow-position
4082 This variable holds a marker that indicates where to display the overlay
4083 arrow. It should point at the beginning of a line. On a non-graphical
4084 display the arrow text
4085 appears at the beginning of that line, overlaying any text that would
4086 otherwise appear. Since the arrow is usually short, and the line
4087 usually begins with indentation, normally nothing significant is
4088 overwritten.
4089
4090 The overlay-arrow string is displayed in any given buffer if the value
4091 of @code{overlay-arrow-position} in that buffer points into that
4092 buffer. Thus, it is possible to display multiple overlay arrow strings
4093 by creating buffer-local bindings of @code{overlay-arrow-position}.
4094 However, it is usually cleaner to use
4095 @code{overlay-arrow-variable-list} to achieve this result.
4096 @c !!! overlay-arrow-position: but the overlay string may remain in the display
4097 @c of some other buffer until an update is required. This should be fixed
4098 @c now. Is it?
4099 @end defvar
4100
4101 You can do a similar job by creating an overlay with a
4102 @code{before-string} property. @xref{Overlay Properties}.
4103
4104 You can define multiple overlay arrows via the variable
4105 @code{overlay-arrow-variable-list}.
4106
4107 @defvar overlay-arrow-variable-list
4108 This variable's value is a list of variables, each of which specifies
4109 the position of an overlay arrow. The variable
4110 @code{overlay-arrow-position} has its normal meaning because it is on
4111 this list.
4112 @end defvar
4113
4114 Each variable on this list can have properties
4115 @code{overlay-arrow-string} and @code{overlay-arrow-bitmap} that
4116 specify an overlay arrow string (for text terminals) or fringe bitmap
4117 (for graphical terminals) to display at the corresponding overlay
4118 arrow position. If either property is not set, the default
4119 @code{overlay-arrow-string} or @code{overlay-arrow} fringe indicator
4120 is used.
4121
4122
4123 @node Scroll Bars
4124 @section Scroll Bars
4125 @cindex scroll bars
4126
4127 Normally the frame parameter @code{vertical-scroll-bars} controls
4128 whether the windows in the frame have vertical scroll bars, and whether
4129 they are on the left or right. The frame parameter
4130 @code{scroll-bar-width} specifies how wide they are (@code{nil} meaning
4131 the default).
4132
4133 The frame parameter @code{horizontal-scroll-bars} controls whether
4134 the windows in the frame have horizontal scroll bars. The frame
4135 parameter @code{scroll-bar-height} specifies how high they are
4136 (@code{nil} meaning the default). @xref{Layout Parameters}.
4137
4138 @vindex horizontal-scroll-bars-available-p
4139 Horizontal scroll bars are not available on all platforms. The
4140 function @code{horizontal-scroll-bars-available-p} which takes no
4141 argument returns non-@code{nil} if they are available on your system.
4142
4143 The following three functions take as argument a live frame which
4144 defaults to the selected one.
4145
4146 @defun frame-current-scroll-bars &optional frame
4147 This function reports the scroll bar types for frame @var{frame}. The
4148 value is a cons cell @code{(@var{vertical-type} .@:
4149 @var{horizontal-type})}, where @var{vertical-type} is either
4150 @code{left}, @code{right}, or @code{nil} (which means no vertical scroll
4151 bar.) @var{horizontal-type} is either @code{bottom} or @code{nil}
4152 (which means no horizontal scroll bar).
4153 @end defun
4154
4155 @defun frame-scroll-bar-width &optional Lisp_Object &optional frame
4156 This function returns the width of vertical scroll bars of @var{frame}
4157 in pixels.
4158 @end defun
4159
4160 @defun frame-scroll-bar-height &optional Lisp_Object &optional frame
4161 This function returns the height of horizontal scroll bars of
4162 @var{frame} in pixels.
4163 @end defun
4164
4165 You can override the frame specific settings for individual windows by
4166 using the following function:
4167
4168 @defun set-window-scroll-bars window &optional width vertical-type height horizontal-type
4169 This function sets the width and/or height and the types of scroll bars
4170 for window @var{window}.
4171
4172 @var{width} specifies the width of the vertical scroll bar in pixels
4173 (@code{nil} means use the width specified for the frame).
4174 @var{vertical-type} specifies whether to have a vertical scroll bar and,
4175 if so, where. The possible values are @code{left}, @code{right},
4176 @code{t}, which means to use the frame's default, and @code{nil} for no
4177 vertical scroll bar.
4178
4179 @var{height} specifies the height of the horizontal scroll bar in pixels
4180 (@code{nil} means use the height specified for the frame).
4181 @var{horizontal-type} specifies whether to have a horizontal scroll bar.
4182 The possible values are @code{bottom}, @code{t}, which means to use the
4183 frame's default, and @code{nil} for no horizontal scroll bar.
4184
4185 If @var{window} is @code{nil}, the selected window is used.
4186 @end defun
4187
4188 The following four functions take as argument a live window which
4189 defaults to the selected one.
4190
4191 @defun window-scroll-bars &optional window
4192 This function returns a list of the form @code{(@var{width}
4193 @var{columns} @var{vertical-type} @var{height} @var{lines}
4194 @var{horizontal-type})}.
4195
4196 The value @var{width} is the value that was specified for the width of
4197 the vertical scroll bar (which may be @code{nil}); @var{columns} is the
4198 (possibly rounded) number of columns that the vertical scroll bar
4199 actually occupies.
4200
4201 The value @var{height} is the value that was specified for the height of
4202 the horizontal scroll bar (which may be @code{nil}); @var{lines} is the
4203 (possibly rounded) number of lines that the horizontally scroll bar
4204 actually occupies.
4205 @end defun
4206
4207 @defun window-current-scroll-bars &optional window
4208 This function reports the scroll bar type for window @var{window}. The
4209 value is a cons cell @code{(@var{vertical-type} .@:
4210 @var{horizontal-type})}. Unlike @code{window-scroll-bars}, this reports
4211 the scroll bar type actually used, once frame defaults and
4212 @code{scroll-bar-mode} are taken into account.
4213 @end defun
4214
4215 @defun window-scroll-bar-width &optional window
4216 This function returns the width in pixels of @var{window}'s vertical
4217 scrollbar.
4218 @end defun
4219
4220 @defun window-scroll-bar-height &optional window
4221 This function returns the height in pixels of @var{window}'s horizontal
4222 scrollbar.
4223 @end defun
4224
4225 If you don't specify these values for a window with
4226 @code{set-window-scroll-bars}, the buffer-local variables
4227 @code{vertical-scroll-bar}, @code{horizontal-scroll-bar},
4228 @code{scroll-bar-width} and @code{scroll-bar-height} in the buffer being
4229 displayed control the window's scroll bars. The function
4230 @code{set-window-buffer} examines these variables. If you change them
4231 in a buffer that is already visible in a window, you can make the window
4232 take note of the new values by calling @code{set-window-buffer}
4233 specifying the same buffer that is already displayed.
4234
4235 You can control the appearance of scroll bars for a particular buffer by
4236 setting the following variables which automatically become buffer-local
4237 when set.
4238
4239 @defvar vertical-scroll-bar
4240 This variable specifies the location of the vertical scroll bar. The
4241 possible values are @code{left}, @code{right}, @code{t}, which means to
4242 use the frame's default, and @code{nil} for no scroll bar.
4243 @end defvar
4244
4245 @defvar horizontal-scroll-bar
4246 This variable specifies the location of the horizontal scroll bar. The
4247 possible values are @code{bottom}, @code{t}, which means to use the
4248 frame's default, and @code{nil} for no scroll bar.
4249 @end defvar
4250
4251 @defvar scroll-bar-width
4252 This variable specifies the width of the buffer's vertical scroll bars,
4253 measured in pixels. A value of @code{nil} means to use the value
4254 specified by the frame.
4255 @end defvar
4256
4257 @defvar scroll-bar-height
4258 This variable specifies the height of the buffer's horizontal scroll
4259 bar, measured in pixels. A value of @code{nil} means to use the value
4260 specified by the frame.
4261 @end defvar
4262
4263 Finally you can toggle the display of scroll bars on all frames by
4264 customizing the variables @code{scroll-bar-mode} and
4265 @code{horizontal-scroll-bar-mode}.
4266
4267 @defopt scroll-bar-mode
4268 This variable controls whether and where to put vertical scroll bars in
4269 all frames. The possible values are @code{nil} for no scroll bars,
4270 @code{left} to put scroll bars on the left and @code{right} to put
4271 scroll bars on the right.
4272 @end defopt
4273
4274 @defopt horizontal-scroll-bar-mode
4275 This variable controls whether to display horizontal scroll bars on all
4276 frames.
4277 @end defopt
4278
4279
4280 @node Window Dividers
4281 @section Window Dividers
4282 @cindex window dividers
4283 @cindex right dividers
4284 @cindex bottom dividers
4285
4286 Window dividers are bars drawn between a frame's windows. A right
4287 divider is drawn between a window and any adjacent windows on the right.
4288 Its width (thickness) is specified by the frame parameter
4289 @code{right-divider-width}. A bottom divider is drawn between a
4290 window and adjacent windows on the bottom or the echo area. Its width
4291 is specified by the frame parameter @code{bottom-divider-width}. In
4292 either case, specifying a width of zero means to not draw such dividers.
4293 @xref{Layout Parameters}.
4294
4295 Technically, a right divider belongs to the window on its left,
4296 which means that its width contributes to the total width of that
4297 window. A bottom divider belongs to the window above it, which
4298 means that its width contributes to the total height of that window.
4299 @xref{Window Sizes}. When a window has both, a right and a bottom
4300 divider, the bottom divider prevails. This means that a bottom
4301 divider is drawn over the full total width of its window while the right
4302 divider ends above the bottom divider.
4303
4304 Dividers can be dragged with the mouse and are therefore useful for
4305 adjusting the sizes of adjacent windows with the mouse. They also serve
4306 to visually set apart adjacent windows when no scroll bars or mode lines
4307 are present. The following three faces allow the customization of the
4308 appearance of dividers:
4309
4310 @table @code
4311 @item window-divider
4312 When a divider is less than three pixels wide, it is drawn solidly with
4313 the foreground of this face. For larger dividers this face is used for
4314 the inner part only, excluding the first and last pixel.
4315
4316 @item window-divider-first-pixel
4317 This is the face used for drawing the first pixel of a divider that is
4318 at least three pixels wide. To obtain a solid appearance, set this to
4319 the same value used for the @code{window-divider} face.
4320
4321 @item window-divider-last-pixel
4322 This is the face used for drawing the last pixel of a divider that is at
4323 least three pixels wide. To obtain a solid appearance, set this to the
4324 same value used for the @code{window-divider} face.
4325 @end table
4326
4327 You can get the sizes of the dividers of a specific window with the
4328 following two functions.
4329
4330 @defun window-right-divider-width &optional window
4331 Return the width (thickness) in pixels of @var{window}'s right divider.
4332 @var{window} must be a live window and defaults to the selected one.
4333 The return value is always zero for a rightmost window.
4334 @end defun
4335
4336 @defun window-bottom-divider-width &optional window
4337 Return the width (thickness) in pixels of @var{window}'s bottom divider.
4338 @var{window} must be a live window and defaults to the selected one.
4339 The return value is zero for the minibuffer window or a bottommost
4340 window on a minibuffer-less frame.
4341 @end defun
4342
4343
4344 @node Display Property
4345 @section The @code{display} Property
4346 @cindex display specification
4347 @kindex display @r{(text property)}
4348
4349 The @code{display} text property (or overlay property) is used to
4350 insert images into text, and to control other aspects of how text
4351 displays. The value of the @code{display} property should be a
4352 display specification, or a list or vector containing several display
4353 specifications. Display specifications in the same @code{display}
4354 property value generally apply in parallel to the text they cover.
4355
4356 If several sources (overlays and/or a text property) specify values
4357 for the @code{display} property, only one of the values takes effect,
4358 following the rules of @code{get-char-property}. @xref{Examining
4359 Properties}.
4360
4361 The rest of this section describes several kinds of
4362 display specifications and what they mean.
4363
4364 @menu
4365 * Replacing Specs:: Display specs that replace the text.
4366 * Specified Space:: Displaying one space with a specified width.
4367 * Pixel Specification:: Specifying space width or height in pixels.
4368 * Other Display Specs:: Displaying an image; adjusting the height,
4369 spacing, and other properties of text.
4370 * Display Margins:: Displaying text or images to the side of the main text.
4371 @end menu
4372
4373 @node Replacing Specs
4374 @subsection Display Specs That Replace The Text
4375 @cindex replacing display specs
4376
4377 Some kinds of display specifications specify something to display
4378 instead of the text that has the property. These are called
4379 @dfn{replacing} display specifications. Emacs does not allow the user
4380 to interactively move point into the middle of buffer text that is
4381 replaced in this way.
4382
4383 If a list of display specifications includes more than one replacing
4384 display specification, the first overrides the rest. Replacing
4385 display specifications make most other display specifications
4386 irrelevant, since those don't apply to the replacement.
4387
4388 For replacing display specifications, @dfn{the text that has the
4389 property} means all the consecutive characters that have the same
4390 Lisp object as their @code{display} property; these characters are
4391 replaced as a single unit. If two characters have different Lisp
4392 objects as their @code{display} properties (i.e., objects which are
4393 not @code{eq}), they are handled separately.
4394
4395 Here is an example which illustrates this point. A string serves as
4396 a replacing display specification, which replaces the text that has
4397 the property with the specified string (@pxref{Other Display Specs}).
4398 Consider the following function:
4399
4400 @smallexample
4401 (defun foo ()
4402 (dotimes (i 5)
4403 (let ((string (concat "A"))
4404 (start (+ i i (point-min))))
4405 (put-text-property start (1+ start) 'display string)
4406 (put-text-property start (+ 2 start) 'display string))))
4407 @end smallexample
4408
4409 @noindent
4410 This function gives each of the first ten characters in the buffer a
4411 @code{display} property which is a string @code{"A"}, but they don't
4412 all get the same string object. The first two characters get the same
4413 string object, so they are replaced with one @samp{A}; the fact that
4414 the display property was assigned in two separate calls to
4415 @code{put-text-property} is irrelevant. Similarly, the next two
4416 characters get a second string (@code{concat} creates a new string
4417 object), so they are replaced with one @samp{A}; and so on. Thus, the
4418 ten characters appear as five A's.
4419
4420 @node Specified Space
4421 @subsection Specified Spaces
4422 @cindex spaces, specified height or width
4423 @cindex variable-width spaces
4424
4425 To display a space of specified width and/or height, use a display
4426 specification of the form @code{(space . @var{props})}, where
4427 @var{props} is a property list (a list of alternating properties and
4428 values). You can put this property on one or more consecutive
4429 characters; a space of the specified height and width is displayed in
4430 place of @emph{all} of those characters. These are the properties you
4431 can use in @var{props} to specify the weight of the space:
4432
4433 @table @code
4434 @item :width @var{width}
4435 If @var{width} is a number, it specifies
4436 that the space width should be @var{width} times the normal character
4437 width. @var{width} can also be a @dfn{pixel width} specification
4438 (@pxref{Pixel Specification}).
4439
4440 @item :relative-width @var{factor}
4441 Specifies that the width of the stretch should be computed from the
4442 first character in the group of consecutive characters that have the
4443 same @code{display} property. The space width is the pixel width of
4444 that character, multiplied by @var{factor}. (On text-mode terminals,
4445 the ``pixel width'' of a character is usually 1, but it could be more
4446 for TABs and double-width CJK characters.)
4447
4448 @item :align-to @var{hpos}
4449 Specifies that the space should be wide enough to reach @var{hpos}.
4450 If @var{hpos} is a number, it is measured in units of the normal
4451 character width. @var{hpos} can also be a @dfn{pixel width}
4452 specification (@pxref{Pixel Specification}).
4453 @end table
4454
4455 You should use one and only one of the above properties. You can
4456 also specify the height of the space, with these properties:
4457
4458 @table @code
4459 @item :height @var{height}
4460 Specifies the height of the space.
4461 If @var{height} is a number, it specifies
4462 that the space height should be @var{height} times the normal character
4463 height. The @var{height} may also be a @dfn{pixel height} specification
4464 (@pxref{Pixel Specification}).
4465
4466 @item :relative-height @var{factor}
4467 Specifies the height of the space, multiplying the ordinary height
4468 of the text having this display specification by @var{factor}.
4469
4470 @item :ascent @var{ascent}
4471 If the value of @var{ascent} is a non-negative number no greater than
4472 100, it specifies that @var{ascent} percent of the height of the space
4473 should be considered as the ascent of the space---that is, the part
4474 above the baseline. The ascent may also be specified in pixel units
4475 with a @dfn{pixel ascent} specification (@pxref{Pixel Specification}).
4476
4477 @end table
4478
4479 Don't use both @code{:height} and @code{:relative-height} together.
4480
4481 The @code{:width} and @code{:align-to} properties are supported on
4482 non-graphic terminals, but the other space properties in this section
4483 are not.
4484
4485 Note that space properties are treated as paragraph separators for
4486 the purposes of reordering bidirectional text for display.
4487 @xref{Bidirectional Display}, for the details.
4488
4489 @node Pixel Specification
4490 @subsection Pixel Specification for Spaces
4491 @cindex spaces, pixel specification
4492
4493 The value of the @code{:width}, @code{:align-to}, @code{:height},
4494 and @code{:ascent} properties can be a special kind of expression that
4495 is evaluated during redisplay. The result of the evaluation is used
4496 as an absolute number of pixels.
4497
4498 The following expressions are supported:
4499
4500 @smallexample
4501 @group
4502 @var{expr} ::= @var{num} | (@var{num}) | @var{unit} | @var{elem} | @var{pos} | @var{image} | @var{form}
4503 @var{num} ::= @var{integer} | @var{float} | @var{symbol}
4504 @var{unit} ::= in | mm | cm | width | height
4505 @end group
4506 @group
4507 @var{elem} ::= left-fringe | right-fringe | left-margin | right-margin
4508 | scroll-bar | text
4509 @var{pos} ::= left | center | right
4510 @var{form} ::= (@var{num} . @var{expr}) | (@var{op} @var{expr} ...)
4511 @var{op} ::= + | -
4512 @end group
4513 @end smallexample
4514
4515 The form @var{num} specifies a fraction of the default frame font
4516 height or width. The form @code{(@var{num})} specifies an absolute
4517 number of pixels. If @var{num} is a symbol, @var{symbol}, its
4518 buffer-local variable binding is used.
4519
4520 The @code{in}, @code{mm}, and @code{cm} units specify the number of
4521 pixels per inch, millimeter, and centimeter, respectively. The
4522 @code{width} and @code{height} units correspond to the default width
4523 and height of the current face. An image specification @code{image}
4524 corresponds to the width or height of the image.
4525
4526 The elements @code{left-fringe}, @code{right-fringe},
4527 @code{left-margin}, @code{right-margin}, @code{scroll-bar}, and
4528 @code{text} specify to the width of the corresponding area of the
4529 window.
4530
4531 The @code{left}, @code{center}, and @code{right} positions can be
4532 used with @code{:align-to} to specify a position relative to the left
4533 edge, center, or right edge of the text area.
4534
4535 Any of the above window elements (except @code{text}) can also be
4536 used with @code{:align-to} to specify that the position is relative to
4537 the left edge of the given area. Once the base offset for a relative
4538 position has been set (by the first occurrence of one of these
4539 symbols), further occurrences of these symbols are interpreted as the
4540 width of the specified area. For example, to align to the center of
4541 the left-margin, use
4542
4543 @example
4544 :align-to (+ left-margin (0.5 . left-margin))
4545 @end example
4546
4547 If no specific base offset is set for alignment, it is always relative
4548 to the left edge of the text area. For example, @samp{:align-to 0} in a
4549 header-line aligns with the first text column in the text area.
4550
4551 A value of the form @code{(@var{num} . @var{expr})} stands for the
4552 product of the values of @var{num} and @var{expr}. For example,
4553 @code{(2 . in)} specifies a width of 2 inches, while @code{(0.5 .
4554 @var{image})} specifies half the width (or height) of the specified
4555 image.
4556
4557 The form @code{(+ @var{expr} ...)} adds up the value of the
4558 expressions. The form @code{(- @var{expr} ...)} negates or subtracts
4559 the value of the expressions.
4560
4561 @node Other Display Specs
4562 @subsection Other Display Specifications
4563
4564 Here are the other sorts of display specifications that you can use
4565 in the @code{display} text property.
4566
4567 @table @code
4568 @item @var{string}
4569 Display @var{string} instead of the text that has this property.
4570
4571 Recursive display specifications are not supported---@var{string}'s
4572 @code{display} properties, if any, are not used.
4573
4574 @item (image . @var{image-props})
4575 This kind of display specification is an image descriptor (@pxref{Images}).
4576 When used as a display specification, it means to display the image
4577 instead of the text that has the display specification.
4578
4579 @item (slice @var{x} @var{y} @var{width} @var{height})
4580 This specification together with @code{image} specifies a @dfn{slice}
4581 (a partial area) of the image to display. The elements @var{y} and
4582 @var{x} specify the top left corner of the slice, within the image;
4583 @var{width} and @var{height} specify the width and height of the
4584 slice. Integers are numbers of pixels. A floating-point number
4585 in the range 0.0--1.0 stands for that fraction of the width or height
4586 of the entire image.
4587
4588 @item ((margin nil) @var{string})
4589 A display specification of this form means to display @var{string}
4590 instead of the text that has the display specification, at the same
4591 position as that text. It is equivalent to using just @var{string},
4592 but it is done as a special case of marginal display (@pxref{Display
4593 Margins}).
4594
4595 @item (left-fringe @var{bitmap} @r{[}@var{face}@r{]})
4596 @itemx (right-fringe @var{bitmap} @r{[}@var{face}@r{]})
4597 This display specification on any character of a line of text causes
4598 the specified @var{bitmap} be displayed in the left or right fringes
4599 for that line, instead of the characters that have the display
4600 specification. The optional @var{face} specifies the colors to be
4601 used for the bitmap. @xref{Fringe Bitmaps}, for the details.
4602
4603 @item (space-width @var{factor})
4604 This display specification affects all the space characters within the
4605 text that has the specification. It displays all of these spaces
4606 @var{factor} times as wide as normal. The element @var{factor} should
4607 be an integer or float. Characters other than spaces are not affected
4608 at all; in particular, this has no effect on tab characters.
4609
4610 @item (height @var{height})
4611 This display specification makes the text taller or shorter.
4612 Here are the possibilities for @var{height}:
4613
4614 @table @asis
4615 @item @code{(+ @var{n})}
4616 @c FIXME: Add an index for "step"? --xfq
4617 This means to use a font that is @var{n} steps larger. A @dfn{step} is
4618 defined by the set of available fonts---specifically, those that match
4619 what was otherwise specified for this text, in all attributes except
4620 height. Each size for which a suitable font is available counts as
4621 another step. @var{n} should be an integer.
4622
4623 @item @code{(- @var{n})}
4624 This means to use a font that is @var{n} steps smaller.
4625
4626 @item a number, @var{factor}
4627 A number, @var{factor}, means to use a font that is @var{factor} times
4628 as tall as the default font.
4629
4630 @item a symbol, @var{function}
4631 A symbol is a function to compute the height. It is called with the
4632 current height as argument, and should return the new height to use.
4633
4634 @item anything else, @var{form}
4635 If the @var{height} value doesn't fit the previous possibilities, it is
4636 a form. Emacs evaluates it to get the new height, with the symbol
4637 @code{height} bound to the current specified font height.
4638 @end table
4639
4640 @item (raise @var{factor})
4641 This kind of display specification raises or lowers the text
4642 it applies to, relative to the baseline of the line.
4643
4644 @var{factor} must be a number, which is interpreted as a multiple of the
4645 height of the affected text. If it is positive, that means to display
4646 the characters raised. If it is negative, that means to display them
4647 lower down.
4648
4649 If the text also has a @code{height} display specification, that does
4650 not affect the amount of raising or lowering, which is based on the
4651 faces used for the text.
4652 @end table
4653
4654 @c We put all the '@code{(when ...)}' on one line to encourage
4655 @c makeinfo's end-of-sentence heuristics to DTRT. Previously, the dot
4656 @c was at eol; the info file ended up w/ two spaces rendered after it.
4657 You can make any display specification conditional. To do that,
4658 package it in another list of the form
4659 @code{(when @var{condition} . @var{spec})}.
4660 Then the specification @var{spec} applies only when
4661 @var{condition} evaluates to a non-@code{nil} value. During the
4662 evaluation, @code{object} is bound to the string or buffer having the
4663 conditional @code{display} property. @code{position} and
4664 @code{buffer-position} are bound to the position within @code{object}
4665 and the buffer position where the @code{display} property was found,
4666 respectively. Both positions can be different when @code{object} is a
4667 string.
4668
4669 @node Display Margins
4670 @subsection Displaying in the Margins
4671 @cindex display margins
4672 @cindex margins, display
4673
4674 A buffer can have blank areas called @dfn{display margins} on the
4675 left and on the right. Ordinary text never appears in these areas,
4676 but you can put things into the display margins using the
4677 @code{display} property. There is currently no way to make text or
4678 images in the margin mouse-sensitive.
4679
4680 The way to display something in the margins is to specify it in a
4681 margin display specification in the @code{display} property of some
4682 text. This is a replacing display specification, meaning that the
4683 text you put it on does not get displayed; the margin display appears,
4684 but that text does not.
4685
4686 A margin display specification looks like @code{((margin
4687 right-margin) @var{spec})} or @code{((margin left-margin) @var{spec})}.
4688 Here, @var{spec} is another display specification that says what to
4689 display in the margin. Typically it is a string of text to display,
4690 or an image descriptor.
4691
4692 To display something in the margin @emph{in association with}
4693 certain buffer text, without altering or preventing the display of
4694 that text, put a @code{before-string} property on the text and put the
4695 margin display specification on the contents of the before-string.
4696
4697 Before the display margins can display anything, you must give
4698 them a nonzero width. The usual way to do that is to set these
4699 variables:
4700
4701 @defvar left-margin-width
4702 This variable specifies the width of the left margin, in character
4703 cell (a.k.a.@: ``column'') units. It is buffer-local in all buffers.
4704 A value of @code{nil} means no left marginal area.
4705 @end defvar
4706
4707 @defvar right-margin-width
4708 This variable specifies the width of the right margin, in character
4709 cell units. It is buffer-local in all buffers. A value of @code{nil}
4710 means no right marginal area.
4711 @end defvar
4712
4713 Setting these variables does not immediately affect the window. These
4714 variables are checked when a new buffer is displayed in the window.
4715 Thus, you can make changes take effect by calling
4716 @code{set-window-buffer}.
4717
4718 You can also set the margin widths immediately.
4719
4720 @defun set-window-margins window left &optional right
4721 This function specifies the margin widths for window @var{window}, in
4722 character cell units. The argument @var{left} controls the left
4723 margin, and @var{right} controls the right margin (default @code{0}).
4724 @end defun
4725
4726 @defun window-margins &optional window
4727 This function returns the width of the left and right margins of
4728 @var{window} as a cons cell of the form @w{@code{(@var{left}
4729 . @var{right})}}. If one of the two marginal areas does not exist,
4730 its width is returned as @code{nil}; if neither of the two margins exist,
4731 the function returns @code{(nil)}. If @var{window} is @code{nil}, the
4732 selected window is used.
4733 @end defun
4734
4735 @node Images
4736 @section Images
4737 @cindex images in buffers
4738
4739 To display an image in an Emacs buffer, you must first create an image
4740 descriptor, then use it as a display specifier in the @code{display}
4741 property of text that is displayed (@pxref{Display Property}).
4742
4743 Emacs is usually able to display images when it is run on a
4744 graphical terminal. Images cannot be displayed in a text terminal, on
4745 certain graphical terminals that lack the support for this, or if
4746 Emacs is compiled without image support. You can use the function
4747 @code{display-images-p} to determine if images can in principle be
4748 displayed (@pxref{Display Feature Testing}).
4749
4750 @menu
4751 * Image Formats:: Supported image formats.
4752 * Image Descriptors:: How to specify an image for use in @code{:display}.
4753 * XBM Images:: Special features for XBM format.
4754 * XPM Images:: Special features for XPM format.
4755 * PostScript Images:: Special features for PostScript format.
4756 * ImageMagick Images:: Special features available through ImageMagick.
4757 * Other Image Types:: Various other formats are supported.
4758 * Defining Images:: Convenient ways to define an image for later use.
4759 * Showing Images:: Convenient ways to display an image once it is defined.
4760 * Multi-Frame Images:: Some images contain more than one frame.
4761 * Image Cache:: Internal mechanisms of image display.
4762 @end menu
4763
4764 @node Image Formats
4765 @subsection Image Formats
4766 @cindex image formats
4767 @cindex image types
4768
4769 Emacs can display a number of different image formats. Some of
4770 these image formats are supported only if particular support libraries
4771 are installed. On some platforms, Emacs can load support libraries on
4772 demand; if so, the variable @code{dynamic-library-alist} can be used
4773 to modify the set of known names for these dynamic libraries.
4774 @xref{Dynamic Libraries}.
4775
4776 Supported image formats (and the required support libraries) include
4777 PBM and XBM (which do not depend on support libraries and are always
4778 available), XPM (@code{libXpm}), GIF (@code{libgif} or
4779 @code{libungif}), PostScript (@code{gs}), JPEG (@code{libjpeg}), TIFF
4780 (@code{libtiff}), PNG (@code{libpng}), and SVG (@code{librsvg}).
4781
4782 Each of these image formats is associated with an @dfn{image type
4783 symbol}. The symbols for the above formats are, respectively,
4784 @code{pbm}, @code{xbm}, @code{xpm}, @code{gif}, @code{postscript},
4785 @code{jpeg}, @code{tiff}, @code{png}, and @code{svg}.
4786
4787 Furthermore, if you build Emacs with ImageMagick
4788 (@code{libMagickWand}) support, Emacs can display any image format
4789 that ImageMagick can. @xref{ImageMagick Images}. All images
4790 displayed via ImageMagick have type symbol @code{imagemagick}.
4791
4792 @defvar image-types
4793 This variable contains a list of type symbols for image formats which
4794 are potentially supported in the current configuration.
4795
4796 ``Potentially'' means that Emacs knows about the image types, not
4797 necessarily that they can be used (for example, they could depend on
4798 unavailable dynamic libraries). To know which image types are really
4799 available, use @code{image-type-available-p}.
4800 @end defvar
4801
4802 @defun image-type-available-p type
4803 This function returns non-@code{nil} if images of type @var{type} can
4804 be loaded and displayed. @var{type} must be an image type symbol.
4805
4806 For image types whose support libraries are statically linked, this
4807 function always returns @code{t}. For image types whose support
4808 libraries are dynamically loaded, it returns @code{t} if the library
4809 could be loaded and @code{nil} otherwise.
4810 @end defun
4811
4812 @node Image Descriptors
4813 @subsection Image Descriptors
4814 @cindex image descriptor
4815
4816 An @dfn{image descriptor} is a list which specifies the underlying
4817 data for an image, and how to display it. It is typically used as the
4818 value of a @code{display} overlay or text property (@pxref{Other
4819 Display Specs}); but @xref{Showing Images}, for convenient helper
4820 functions to insert images into buffers.
4821
4822 Each image descriptor has the form @code{(image . @var{props})},
4823 where @var{props} is a property list of alternating keyword symbols
4824 and values, including at least the pair @code{:type @var{type}} that
4825 specifies the image type.
4826
4827 The following is a list of properties that are meaningful for all
4828 image types (there are also properties which are meaningful only for
4829 certain image types, as documented in the following subsections):
4830
4831 @table @code
4832 @item :type @var{type}
4833 The image type.
4834 @ifnottex
4835 @xref{Image Formats}.
4836 @end ifnottex
4837 Every image descriptor must include this property.
4838
4839 @item :file @var{file}
4840 This says to load the image from file @var{file}. If @var{file} is
4841 not an absolute file name, it is expanded in @code{data-directory}.
4842
4843 @item :data @var{data}
4844 This specifies the raw image data. Each image descriptor must have
4845 either @code{:data} or @code{:file}, but not both.
4846
4847 For most image types, the value of a @code{:data} property should be a
4848 string containing the image data. Some image types do not support
4849 @code{:data}; for some others, @code{:data} alone is not enough, so
4850 you need to use other image properties along with @code{:data}. See
4851 the following subsections for details.
4852
4853 @item :margin @var{margin}
4854 This specifies how many pixels to add as an extra margin around the
4855 image. The value, @var{margin}, must be a non-negative number, or a
4856 pair @code{(@var{x} . @var{y})} of such numbers. If it is a pair,
4857 @var{x} specifies how many pixels to add horizontally, and @var{y}
4858 specifies how many pixels to add vertically. If @code{:margin} is not
4859 specified, the default is zero.
4860
4861 @item :ascent @var{ascent}
4862 This specifies the amount of the image's height to use for its
4863 ascent---that is, the part above the baseline. The value,
4864 @var{ascent}, must be a number in the range 0 to 100, or the symbol
4865 @code{center}.
4866
4867 If @var{ascent} is a number, that percentage of the image's height is
4868 used for its ascent.
4869
4870 If @var{ascent} is @code{center}, the image is vertically centered
4871 around a centerline which would be the vertical centerline of text drawn
4872 at the position of the image, in the manner specified by the text
4873 properties and overlays that apply to the image.
4874
4875 If this property is omitted, it defaults to 50.
4876
4877 @item :relief @var{relief}
4878 This adds a shadow rectangle around the image. The value,
4879 @var{relief}, specifies the width of the shadow lines, in pixels. If
4880 @var{relief} is negative, shadows are drawn so that the image appears
4881 as a pressed button; otherwise, it appears as an unpressed button.
4882
4883 @item :conversion @var{algorithm}
4884 This specifies a conversion algorithm that should be applied to the
4885 image before it is displayed; the value, @var{algorithm}, specifies
4886 which algorithm.
4887
4888 @table @code
4889 @item laplace
4890 @itemx emboss
4891 Specifies the Laplace edge detection algorithm, which blurs out small
4892 differences in color while highlighting larger differences. People
4893 sometimes consider this useful for displaying the image for a
4894 disabled button.
4895
4896 @item (edge-detection :matrix @var{matrix} :color-adjust @var{adjust})
4897 @cindex edge detection, images
4898 Specifies a general edge-detection algorithm. @var{matrix} must be
4899 either a nine-element list or a nine-element vector of numbers. A pixel
4900 at position @math{x/y} in the transformed image is computed from
4901 original pixels around that position. @var{matrix} specifies, for each
4902 pixel in the neighborhood of @math{x/y}, a factor with which that pixel
4903 will influence the transformed pixel; element @math{0} specifies the
4904 factor for the pixel at @math{x-1/y-1}, element @math{1} the factor for
4905 the pixel at @math{x/y-1} etc., as shown below:
4906 @iftex
4907 @tex
4908 $$\pmatrix{x-1/y-1 & x/y-1 & x+1/y-1 \cr
4909 x-1/y & x/y & x+1/y \cr
4910 x-1/y+1& x/y+1 & x+1/y+1 \cr}$$
4911 @end tex
4912 @end iftex
4913 @ifnottex
4914 @display
4915 (x-1/y-1 x/y-1 x+1/y-1
4916 x-1/y x/y x+1/y
4917 x-1/y+1 x/y+1 x+1/y+1)
4918 @end display
4919 @end ifnottex
4920
4921 The resulting pixel is computed from the color intensity of the color
4922 resulting from summing up the RGB values of surrounding pixels,
4923 multiplied by the specified factors, and dividing that sum by the sum
4924 of the factors' absolute values.
4925
4926 Laplace edge-detection currently uses a matrix of
4927 @iftex
4928 @tex
4929 $$\pmatrix{1 & 0 & 0 \cr
4930 0& 0 & 0 \cr
4931 0 & 0 & -1 \cr}$$
4932 @end tex
4933 @end iftex
4934 @ifnottex
4935 @display
4936 (1 0 0
4937 0 0 0
4938 0 0 -1)
4939 @end display
4940 @end ifnottex
4941
4942 Emboss edge-detection uses a matrix of
4943 @iftex
4944 @tex
4945 $$\pmatrix{ 2 & -1 & 0 \cr
4946 -1 & 0 & 1 \cr
4947 0 & 1 & -2 \cr}$$
4948 @end tex
4949 @end iftex
4950 @ifnottex
4951 @display
4952 ( 2 -1 0
4953 -1 0 1
4954 0 1 -2)
4955 @end display
4956 @end ifnottex
4957
4958 @item disabled
4959 Specifies transforming the image so that it looks disabled.
4960 @end table
4961
4962 @item :mask @var{mask}
4963 If @var{mask} is @code{heuristic} or @code{(heuristic @var{bg})}, build
4964 a clipping mask for the image, so that the background of a frame is
4965 visible behind the image. If @var{bg} is not specified, or if @var{bg}
4966 is @code{t}, determine the background color of the image by looking at
4967 the four corners of the image, assuming the most frequently occurring
4968 color from the corners is the background color of the image. Otherwise,
4969 @var{bg} must be a list @code{(@var{red} @var{green} @var{blue})}
4970 specifying the color to assume for the background of the image.
4971
4972 If @var{mask} is @code{nil}, remove a mask from the image, if it has
4973 one. Images in some formats include a mask which can be removed by
4974 specifying @code{:mask nil}.
4975
4976 @item :pointer @var{shape}
4977 This specifies the pointer shape when the mouse pointer is over this
4978 image. @xref{Pointer Shape}, for available pointer shapes.
4979
4980 @item :map @var{map}
4981 @cindex image maps
4982 This associates an image map of @dfn{hot spots} with this image.
4983
4984 An image map is an alist where each element has the format
4985 @code{(@var{area} @var{id} @var{plist})}. An @var{area} is specified
4986 as either a rectangle, a circle, or a polygon.
4987
4988 A rectangle is a cons
4989 @code{(rect . ((@var{x0} . @var{y0}) . (@var{x1} . @var{y1})))}
4990 which specifies the pixel coordinates of the upper left and bottom right
4991 corners of the rectangle area.
4992
4993 A circle is a cons
4994 @code{(circle . ((@var{x0} . @var{y0}) . @var{r}))}
4995 which specifies the center and the radius of the circle; @var{r} may
4996 be a float or integer.
4997
4998 A polygon is a cons
4999 @code{(poly . [@var{x0} @var{y0} @var{x1} @var{y1} ...])}
5000 where each pair in the vector describes one corner in the polygon.
5001
5002 When the mouse pointer lies on a hot-spot area of an image, the
5003 @var{plist} of that hot-spot is consulted; if it contains a @code{help-echo}
5004 property, that defines a tool-tip for the hot-spot, and if it contains
5005 a @code{pointer} property, that defines the shape of the mouse cursor when
5006 it is on the hot-spot.
5007 @xref{Pointer Shape}, for available pointer shapes.
5008
5009 When you click the mouse when the mouse pointer is over a hot-spot, an
5010 event is composed by combining the @var{id} of the hot-spot with the
5011 mouse event; for instance, @code{[area4 mouse-1]} if the hot-spot's
5012 @var{id} is @code{area4}.
5013 @end table
5014
5015 @defun image-mask-p spec &optional frame
5016 This function returns @code{t} if image @var{spec} has a mask bitmap.
5017 @var{frame} is the frame on which the image will be displayed.
5018 @var{frame} @code{nil} or omitted means to use the selected frame
5019 (@pxref{Input Focus}).
5020 @end defun
5021
5022 @node XBM Images
5023 @subsection XBM Images
5024 @cindex XBM
5025
5026 To use XBM format, specify @code{xbm} as the image type. This image
5027 format doesn't require an external library, so images of this type are
5028 always supported.
5029
5030 Additional image properties supported for the @code{xbm} image type are:
5031
5032 @table @code
5033 @item :foreground @var{foreground}
5034 The value, @var{foreground}, should be a string specifying the image
5035 foreground color, or @code{nil} for the default color. This color is
5036 used for each pixel in the XBM that is 1. The default is the frame's
5037 foreground color.
5038
5039 @item :background @var{background}
5040 The value, @var{background}, should be a string specifying the image
5041 background color, or @code{nil} for the default color. This color is
5042 used for each pixel in the XBM that is 0. The default is the frame's
5043 background color.
5044 @end table
5045
5046 If you specify an XBM image using data within Emacs instead of an
5047 external file, use the following three properties:
5048
5049 @table @code
5050 @item :data @var{data}
5051 The value, @var{data}, specifies the contents of the image.
5052 There are three formats you can use for @var{data}:
5053
5054 @itemize @bullet
5055 @item
5056 A vector of strings or bool-vectors, each specifying one line of the
5057 image. Do specify @code{:height} and @code{:width}.
5058
5059 @item
5060 A string containing the same byte sequence as an XBM file would contain.
5061 You must not specify @code{:height} and @code{:width} in this case,
5062 because omitting them is what indicates the data has the format of an
5063 XBM file. The file contents specify the height and width of the image.
5064
5065 @item
5066 A string or a bool-vector containing the bits of the image (plus perhaps
5067 some extra bits at the end that will not be used). It should contain at
5068 least @var{width} * @code{height} bits. In this case, you must specify
5069 @code{:height} and @code{:width}, both to indicate that the string
5070 contains just the bits rather than a whole XBM file, and to specify the
5071 size of the image.
5072 @end itemize
5073
5074 @item :width @var{width}
5075 The value, @var{width}, specifies the width of the image, in pixels.
5076
5077 @item :height @var{height}
5078 The value, @var{height}, specifies the height of the image, in pixels.
5079 @end table
5080
5081 @node XPM Images
5082 @subsection XPM Images
5083 @cindex XPM
5084
5085 To use XPM format, specify @code{xpm} as the image type. The
5086 additional image property @code{:color-symbols} is also meaningful with
5087 the @code{xpm} image type:
5088
5089 @table @code
5090 @item :color-symbols @var{symbols}
5091 The value, @var{symbols}, should be an alist whose elements have the
5092 form @code{(@var{name} . @var{color})}. In each element, @var{name} is
5093 the name of a color as it appears in the image file, and @var{color}
5094 specifies the actual color to use for displaying that name.
5095 @end table
5096
5097 @node PostScript Images
5098 @subsection PostScript Images
5099 @cindex postscript images
5100
5101 To use PostScript for an image, specify image type @code{postscript}.
5102 This works only if you have Ghostscript installed. You must always use
5103 these three properties:
5104
5105 @table @code
5106 @item :pt-width @var{width}
5107 The value, @var{width}, specifies the width of the image measured in
5108 points (1/72 inch). @var{width} must be an integer.
5109
5110 @item :pt-height @var{height}
5111 The value, @var{height}, specifies the height of the image in points
5112 (1/72 inch). @var{height} must be an integer.
5113
5114 @item :bounding-box @var{box}
5115 The value, @var{box}, must be a list or vector of four integers, which
5116 specifying the bounding box of the PostScript image, analogous to the
5117 @samp{BoundingBox} comment found in PostScript files.
5118
5119 @example
5120 %%BoundingBox: 22 171 567 738
5121 @end example
5122 @end table
5123
5124 @node ImageMagick Images
5125 @subsection ImageMagick Images
5126 @cindex ImageMagick images
5127 @cindex images, support for more formats
5128
5129 If you build Emacs with ImageMagick support, you can use the
5130 ImageMagick library to load many image formats (@pxref{File
5131 Conveniences,,, emacs, The GNU Emacs Manual}). The image type symbol
5132 for images loaded via ImageMagick is @code{imagemagick}, regardless of
5133 the actual underlying image format.
5134
5135 @defun imagemagick-types
5136 This function returns a list of image file extensions supported by the
5137 current ImageMagick installation. Each list element is a symbol
5138 representing an internal ImageMagick name for an image type, such as
5139 @code{BMP} for @file{.bmp} images.
5140 @end defun
5141
5142 @defopt imagemagick-enabled-types
5143 The value of this variable is a list of ImageMagick image types which
5144 Emacs may attempt to render using ImageMagick. Each list element
5145 should be one of the symbols in the list returned by
5146 @code{imagemagick-types}, or an equivalent string. Alternatively, a
5147 value of @code{t} enables ImageMagick for all possible image types.
5148 Regardless of the value of this variable,
5149 @code{imagemagick-types-inhibit} (see below) takes precedence.
5150 @end defopt
5151
5152 @defopt imagemagick-types-inhibit
5153 The value of this variable lists the ImageMagick image types which
5154 should never be rendered using ImageMagick, regardless of the value of
5155 @code{imagemagick-enabled-types}. A value of @code{t} disables
5156 ImageMagick entirely.
5157 @end defopt
5158
5159 @defvar image-format-suffixes
5160 This variable is an alist mapping image types to file name extensions.
5161 Emacs uses this in conjunction with the @code{:format} image property
5162 (see below) to give a hint to the ImageMagick library as to the type
5163 of an image. Each element has the form @code{(@var{type}
5164 @var{extension})}, where @var{type} is a symbol specifying an image
5165 content-type, and @var{extension} is a string that specifies the
5166 associated file name extension.
5167 @end defvar
5168
5169 Images loaded with ImageMagick support the following additional
5170 image descriptor properties:
5171
5172 @table @code
5173 @item :background @var{background}
5174 @var{background}, if non-@code{nil}, should be a string specifying a
5175 color, which is used as the image's background color if the image
5176 supports transparency. If the value is @code{nil}, it defaults to the
5177 frame's background color.
5178
5179 @item :width @var{width}, :height @var{height}
5180 The @code{:width} and @code{:height} keywords are used for scaling the
5181 image. If only one of them is specified, the other one will be
5182 calculated so as to preserve the aspect ratio. If both are specified,
5183 aspect ratio may not be preserved.
5184
5185 @item :max-width @var{max-width}, :max-height @var{max-height}
5186 The @code{:max-width} and @code{:max-height} keywords are used for
5187 scaling if the size of the image of the image exceeds these values.
5188 If @code{:width} is set it will have precedence over @code{max-width},
5189 and if @code{:height} is set it will have precedence over
5190 @code{max-height}, but you can otherwise mix these keywords as you
5191 wish. @code{:max-width} and @code{:max-height} will always preserve
5192 the aspect ratio.
5193
5194 @item :format @var{type}
5195 The value, @var{type}, should be a symbol specifying the type of the
5196 image data, as found in @code{image-format-suffixes}. This is used
5197 when the image does not have an associated file name, to provide a
5198 hint to ImageMagick to help it detect the image type.
5199
5200 @item :rotation @var{angle}
5201 Specifies a rotation angle in degrees.
5202
5203 @item :index @var{frame}
5204 @c Doesn't work: http://debbugs.gnu.org/7978
5205 @xref{Multi-Frame Images}.
5206 @end table
5207
5208 @node Other Image Types
5209 @subsection Other Image Types
5210 @cindex PBM
5211
5212 For PBM images, specify image type @code{pbm}. Color, gray-scale and
5213 monochromatic images are supported. For mono PBM images, two additional
5214 image properties are supported.
5215
5216 @table @code
5217 @item :foreground @var{foreground}
5218 The value, @var{foreground}, should be a string specifying the image
5219 foreground color, or @code{nil} for the default color. This color is
5220 used for each pixel in the PBM that is 1. The default is the frame's
5221 foreground color.
5222
5223 @item :background @var{background}
5224 The value, @var{background}, should be a string specifying the image
5225 background color, or @code{nil} for the default color. This color is
5226 used for each pixel in the PBM that is 0. The default is the frame's
5227 background color.
5228 @end table
5229
5230 @noindent
5231 The remaining image types that Emacs can support are:
5232
5233 @table @asis
5234 @item GIF
5235 Image type @code{gif}.
5236 Supports the @code{:index} property. @xref{Multi-Frame Images}.
5237
5238 @item JPEG
5239 Image type @code{jpeg}.
5240
5241 @item PNG
5242 Image type @code{png}.
5243
5244 @item SVG
5245 Image type @code{svg}.
5246
5247 @item TIFF
5248 Image type @code{tiff}.
5249 Supports the @code{:index} property. @xref{Multi-Frame Images}.
5250 @end table
5251
5252 @node Defining Images
5253 @subsection Defining Images
5254 @cindex define image
5255
5256 The functions @code{create-image}, @code{defimage} and
5257 @code{find-image} provide convenient ways to create image descriptors.
5258
5259 @defun create-image file-or-data &optional type data-p &rest props
5260 This function creates and returns an image descriptor which uses the
5261 data in @var{file-or-data}. @var{file-or-data} can be a file name or
5262 a string containing the image data; @var{data-p} should be @code{nil}
5263 for the former case, non-@code{nil} for the latter case.
5264
5265 The optional argument @var{type} is a symbol specifying the image type.
5266 If @var{type} is omitted or @code{nil}, @code{create-image} tries to
5267 determine the image type from the file's first few bytes, or else
5268 from the file's name.
5269
5270 The remaining arguments, @var{props}, specify additional image
5271 properties---for example,
5272
5273 @c ':heuristic-mask' is not documented?
5274 @example
5275 (create-image "foo.xpm" 'xpm nil :heuristic-mask t)
5276 @end example
5277
5278 The function returns @code{nil} if images of this type are not
5279 supported. Otherwise it returns an image descriptor.
5280 @end defun
5281
5282 @defmac defimage symbol specs &optional doc
5283 This macro defines @var{symbol} as an image name. The arguments
5284 @var{specs} is a list which specifies how to display the image.
5285 The third argument, @var{doc}, is an optional documentation string.
5286
5287 Each argument in @var{specs} has the form of a property list, and each
5288 one should specify at least the @code{:type} property and either the
5289 @code{:file} or the @code{:data} property. The value of @code{:type}
5290 should be a symbol specifying the image type, the value of
5291 @code{:file} is the file to load the image from, and the value of
5292 @code{:data} is a string containing the actual image data. Here is an
5293 example:
5294
5295 @example
5296 (defimage test-image
5297 ((:type xpm :file "~/test1.xpm")
5298 (:type xbm :file "~/test1.xbm")))
5299 @end example
5300
5301 @code{defimage} tests each argument, one by one, to see if it is
5302 usable---that is, if the type is supported and the file exists. The
5303 first usable argument is used to make an image descriptor which is
5304 stored in @var{symbol}.
5305
5306 If none of the alternatives will work, then @var{symbol} is defined
5307 as @code{nil}.
5308 @end defmac
5309
5310 @defun find-image specs
5311 This function provides a convenient way to find an image satisfying one
5312 of a list of image specifications @var{specs}.
5313
5314 Each specification in @var{specs} is a property list with contents
5315 depending on image type. All specifications must at least contain the
5316 properties @code{:type @var{type}} and either @w{@code{:file @var{file}}}
5317 or @w{@code{:data @var{data}}}, where @var{type} is a symbol specifying
5318 the image type, e.g., @code{xbm}, @var{file} is the file to load the
5319 image from, and @var{data} is a string containing the actual image data.
5320 The first specification in the list whose @var{type} is supported, and
5321 @var{file} exists, is used to construct the image specification to be
5322 returned. If no specification is satisfied, @code{nil} is returned.
5323
5324 The image is looked for in @code{image-load-path}.
5325 @end defun
5326
5327 @defvar image-load-path
5328 This variable's value is a list of locations in which to search for
5329 image files. If an element is a string or a variable symbol whose
5330 value is a string, the string is taken to be the name of a directory
5331 to search. If an element is a variable symbol whose value is a list,
5332 that is taken to be a list of directory names to search.
5333
5334 The default is to search in the @file{images} subdirectory of the
5335 directory specified by @code{data-directory}, then the directory
5336 specified by @code{data-directory}, and finally in the directories in
5337 @code{load-path}. Subdirectories are not automatically included in
5338 the search, so if you put an image file in a subdirectory, you have to
5339 supply the subdirectory name explicitly. For example, to find the
5340 image @file{images/foo/bar.xpm} within @code{data-directory}, you
5341 should specify the image as follows:
5342
5343 @example
5344 (defimage foo-image '((:type xpm :file "foo/bar.xpm")))
5345 @end example
5346 @end defvar
5347
5348 @defun image-load-path-for-library library image &optional path no-error
5349 This function returns a suitable search path for images used by the
5350 Lisp package @var{library}.
5351
5352 The function searches for @var{image} first using @code{image-load-path},
5353 excluding @file{@code{data-directory}/images}, and then in
5354 @code{load-path}, followed by a path suitable for @var{library}, which
5355 includes @file{../../etc/images} and @file{../etc/images} relative to
5356 the library file itself, and finally in
5357 @file{@code{data-directory}/images}.
5358
5359 Then this function returns a list of directories which contains first
5360 the directory in which @var{image} was found, followed by the value of
5361 @code{load-path}. If @var{path} is given, it is used instead of
5362 @code{load-path}.
5363
5364 If @var{no-error} is non-@code{nil} and a suitable path can't be
5365 found, don't signal an error. Instead, return a list of directories as
5366 before, except that @code{nil} appears in place of the image directory.
5367
5368 Here is an example of using @code{image-load-path-for-library}:
5369
5370 @example
5371 (defvar image-load-path) ; shush compiler
5372 (let* ((load-path (image-load-path-for-library
5373 "mh-e" "mh-logo.xpm"))
5374 (image-load-path (cons (car load-path)
5375 image-load-path)))
5376 (mh-tool-bar-folder-buttons-init))
5377 @end example
5378 @end defun
5379
5380 @node Showing Images
5381 @subsection Showing Images
5382 @cindex show image
5383
5384 You can use an image descriptor by setting up the @code{display}
5385 property yourself, but it is easier to use the functions in this
5386 section.
5387
5388 @defun insert-image image &optional string area slice
5389 This function inserts @var{image} in the current buffer at point. The
5390 value @var{image} should be an image descriptor; it could be a value
5391 returned by @code{create-image}, or the value of a symbol defined with
5392 @code{defimage}. The argument @var{string} specifies the text to put
5393 in the buffer to hold the image. If it is omitted or @code{nil},
5394 @code{insert-image} uses @code{" "} by default.
5395
5396 The argument @var{area} specifies whether to put the image in a margin.
5397 If it is @code{left-margin}, the image appears in the left margin;
5398 @code{right-margin} specifies the right margin. If @var{area} is
5399 @code{nil} or omitted, the image is displayed at point within the
5400 buffer's text.
5401
5402 The argument @var{slice} specifies a slice of the image to insert. If
5403 @var{slice} is @code{nil} or omitted the whole image is inserted.
5404 Otherwise, @var{slice} is a list @code{(@var{x} @var{y} @var{width}
5405 @var{height})} which specifies the @var{x} and @var{y} positions and
5406 @var{width} and @var{height} of the image area to insert. Integer
5407 values are in units of pixels. A floating-point number in the range
5408 0.0--1.0 stands for that fraction of the width or height of the entire
5409 image.
5410
5411 Internally, this function inserts @var{string} in the buffer, and gives
5412 it a @code{display} property which specifies @var{image}. @xref{Display
5413 Property}.
5414 @end defun
5415
5416 @cindex slice, image
5417 @cindex image slice
5418 @defun insert-sliced-image image &optional string area rows cols
5419 This function inserts @var{image} in the current buffer at point, like
5420 @code{insert-image}, but splits the image into @var{rows}x@var{cols}
5421 equally sized slices.
5422
5423 Emacs displays each slice as a
5424 separate image, and allows more intuitive scrolling up/down, instead of
5425 jumping up/down the entire image when paging through a buffer that
5426 displays (large) images.
5427 @end defun
5428
5429 @defun put-image image pos &optional string area
5430 This function puts image @var{image} in front of @var{pos} in the
5431 current buffer. The argument @var{pos} should be an integer or a
5432 marker. It specifies the buffer position where the image should appear.
5433 The argument @var{string} specifies the text that should hold the image
5434 as an alternative to the default.
5435
5436 The argument @var{image} must be an image descriptor, perhaps returned
5437 by @code{create-image} or stored by @code{defimage}.
5438
5439 The argument @var{area} specifies whether to put the image in a margin.
5440 If it is @code{left-margin}, the image appears in the left margin;
5441 @code{right-margin} specifies the right margin. If @var{area} is
5442 @code{nil} or omitted, the image is displayed at point within the
5443 buffer's text.
5444
5445 Internally, this function creates an overlay, and gives it a
5446 @code{before-string} property containing text that has a @code{display}
5447 property whose value is the image. (Whew!)
5448 @end defun
5449
5450 @defun remove-images start end &optional buffer
5451 This function removes images in @var{buffer} between positions
5452 @var{start} and @var{end}. If @var{buffer} is omitted or @code{nil},
5453 images are removed from the current buffer.
5454
5455 This removes only images that were put into @var{buffer} the way
5456 @code{put-image} does it, not images that were inserted with
5457 @code{insert-image} or in other ways.
5458 @end defun
5459
5460 @defun image-size spec &optional pixels frame
5461 @cindex size of image
5462 This function returns the size of an image as a pair
5463 @w{@code{(@var{width} . @var{height})}}. @var{spec} is an image
5464 specification. @var{pixels} non-@code{nil} means return sizes measured
5465 in pixels, otherwise return sizes measured in the default character size
5466 of @var{frame} (@pxref{Frame Font}). @var{frame} is the frame on which
5467 the image will be displayed. @var{frame} null or omitted means use the
5468 selected frame (@pxref{Input Focus}).
5469 @end defun
5470
5471 @defvar max-image-size
5472 This variable is used to define the maximum size of image that Emacs
5473 will load. Emacs will refuse to load (and display) any image that is
5474 larger than this limit.
5475
5476 If the value is an integer, it directly specifies the maximum
5477 image height and width, measured in pixels. If it is floating
5478 point, it specifies the maximum image height and width
5479 as a ratio to the frame height and width. If the value is
5480 non-numeric, there is no explicit limit on the size of images.
5481
5482 The purpose of this variable is to prevent unreasonably large images
5483 from accidentally being loaded into Emacs. It only takes effect the
5484 first time an image is loaded. Once an image is placed in the image
5485 cache, it can always be displayed, even if the value of
5486 @code{max-image-size} is subsequently changed (@pxref{Image Cache}).
5487 @end defvar
5488
5489 @node Multi-Frame Images
5490 @subsection Multi-Frame Images
5491 @cindex multi-frame images
5492
5493 @cindex animation
5494 @cindex image animation
5495 @cindex image frames
5496 Some image files can contain more than one image. We say that there
5497 are multiple ``frames'' in the image. At present, Emacs supports
5498 multiple frames for GIF, TIFF, and certain ImageMagick formats such as
5499 DJVM@.
5500
5501 The frames can be used either to represent multiple pages (this is
5502 usually the case with multi-frame TIFF files, for example), or to
5503 create animation (usually the case with multi-frame GIF files).
5504
5505 A multi-frame image has a property @code{:index}, whose value is an
5506 integer (counting from 0) that specifies which frame is being displayed.
5507
5508 @defun image-multi-frame-p image
5509 This function returns non-@code{nil} if @var{image} contains more than
5510 one frame. The actual return value is a cons @code{(@var{nimages}
5511 . @var{delay})}, where @var{nimages} is the number of frames and
5512 @var{delay} is the delay in seconds between them, or @code{nil}
5513 if the image does not specify a delay. Images that are intended to be
5514 animated usually specify a frame delay, whereas ones that are intended
5515 to be treated as multiple pages do not.
5516 @end defun
5517
5518 @defun image-current-frame image
5519 This function returns the index of the current frame number for
5520 @var{image}, counting from 0.
5521 @end defun
5522
5523 @defun image-show-frame image n &optional nocheck
5524 This function switches @var{image} to frame number @var{n}. It
5525 replaces a frame number outside the valid range with that of the end
5526 of the range, unless @var{nocheck} is non-@code{nil}. If @var{image}
5527 does not contain a frame with the specified number, the image displays
5528 as a hollow box.
5529 @end defun
5530
5531 @defun image-animate image &optional index limit
5532 This function animates @var{image}. The optional integer @var{index}
5533 specifies the frame from which to start (default 0). The optional
5534 argument @var{limit} controls the length of the animation. If omitted
5535 or @code{nil}, the image animates once only; if @code{t} it loops
5536 forever; if a number animation stops after that many seconds.
5537 @end defun
5538
5539 @vindex image-minimum-frame-delay
5540 @vindex image-default-frame-delay
5541 @noindent Animation operates by means of a timer. Note that Emacs imposes a
5542 minimum frame delay of 0.01 (@code{image-minimum-frame-delay}) seconds.
5543 If the image itself does not specify a delay, Emacs uses
5544 @code{image-default-frame-delay}.
5545
5546 @defun image-animate-timer image
5547 This function returns the timer responsible for animating @var{image},
5548 if there is one.
5549 @end defun
5550
5551
5552 @node Image Cache
5553 @subsection Image Cache
5554 @cindex image cache
5555
5556 Emacs caches images so that it can display them again more
5557 efficiently. When Emacs displays an image, it searches the image
5558 cache for an existing image specification @code{equal} to the desired
5559 specification. If a match is found, the image is displayed from the
5560 cache. Otherwise, Emacs loads the image normally.
5561
5562 @defun image-flush spec &optional frame
5563 This function removes the image with specification @var{spec} from the
5564 image cache of frame @var{frame}. Image specifications are compared
5565 using @code{equal}. If @var{frame} is @code{nil}, it defaults to the
5566 selected frame. If @var{frame} is @code{t}, the image is flushed on
5567 all existing frames.
5568
5569 In Emacs's current implementation, each graphical terminal possesses an
5570 image cache, which is shared by all the frames on that terminal
5571 (@pxref{Multiple Terminals}). Thus, refreshing an image in one frame
5572 also refreshes it in all other frames on the same terminal.
5573 @end defun
5574
5575 One use for @code{image-flush} is to tell Emacs about a change in an
5576 image file. If an image specification contains a @code{:file}
5577 property, the image is cached based on the file's contents when the
5578 image is first displayed. Even if the file subsequently changes,
5579 Emacs continues displaying the old version of the image. Calling
5580 @code{image-flush} flushes the image from the cache, forcing Emacs to
5581 re-read the file the next time it needs to display that image.
5582
5583 Another use for @code{image-flush} is for memory conservation. If
5584 your Lisp program creates a large number of temporary images over a
5585 period much shorter than @code{image-cache-eviction-delay} (see
5586 below), you can opt to flush unused images yourself, instead of
5587 waiting for Emacs to do it automatically.
5588
5589 @defun clear-image-cache &optional filter
5590 This function clears an image cache, removing all the images stored in
5591 it. If @var{filter} is omitted or @code{nil}, it clears the cache for
5592 the selected frame. If @var{filter} is a frame, it clears the cache
5593 for that frame. If @var{filter} is @code{t}, all image caches are
5594 cleared. Otherwise, @var{filter} is taken to be a file name, and all
5595 images associated with that file name are removed from all image
5596 caches.
5597 @end defun
5598
5599 If an image in the image cache has not been displayed for a specified
5600 period of time, Emacs removes it from the cache and frees the
5601 associated memory.
5602
5603 @defvar image-cache-eviction-delay
5604 This variable specifies the number of seconds an image can remain in
5605 the cache without being displayed. When an image is not displayed for
5606 this length of time, Emacs removes it from the image cache.
5607
5608 Under some circumstances, if the number of images in the cache grows
5609 too large, the actual eviction delay may be shorter than this.
5610
5611 If the value is @code{nil}, Emacs does not remove images from the cache
5612 except when you explicitly clear it. This mode can be useful for
5613 debugging.
5614 @end defvar
5615
5616 @node Xwidgets
5617 @section Embedded Native Widgets
5618 @cindex xwidget
5619 @cindex embedded widgets
5620 @cindex webkit browser widget
5621
5622 Emacs is able to display native widgets, such as GTK WebKit widgets,
5623 in Emacs buffers when it was built with the necessary support
5624 libraries and is running on a graphical terminal. To test whether
5625 Emacs supports display of embedded widgets, check that the
5626 @code{xwidget-internal} feature is available (@pxref{Named Features}).
5627
5628 To display an embedded widget in a buffer, you must first create an
5629 xwidget object, and then use that object as the display specifier
5630 in a @code{display} text or overlay property (@pxref{Display
5631 Property}).
5632
5633 @defun make-xwidget beg end type title width height arguments &optional buffer
5634 This creates an xwidget object between @var{beg} and @var{end}, buffer
5635 positions in @var{buffer}, and returns the new object. If
5636 @var{buffer} is omitted or @code{nil}, it defaults to the current
5637 buffer. If @var{buffer} names a buffer that doesn't exist, it will be
5638 created. The @var{type} identifies the type of the xwidget component,
5639 it can be one of the following:
5640
5641 @table @code
5642 @item webkit-osr
5643 The WebKit OSR (@dfn{on-stack replacement}) component.
5644 @end table
5645
5646 The @var{width} and @var{height} arguments specify the widget size in
5647 pixels, and @var{title}, a string, specifies its title.
5648 @end defun
5649
5650 @defun xwidgetp object
5651 This function returns @code{t} if @var{object} is an xwidget,
5652 @code{nil} otherwise.
5653 @end defun
5654
5655 @defun xwidget-plist xwidget
5656 This function returns the property list of @var{xwidget}.
5657 @end defun
5658
5659 @defun set-xwidget-plist xwidget plist
5660 This function replaces the property list of @var{xwidget} with a new
5661 property list given by @var{plist}.
5662 @end defun
5663
5664 @defun xwidget-buffer xwidget
5665 This function returns the buffer of @var{xwidget}.
5666 @end defun
5667
5668 @defun get-buffer-xwidgets buffer
5669 This function returns a list of xwidget objects associated with the
5670 @var{buffer}, which can be specified as a buffer object or a name of
5671 an existing buffer, a string. The value is @code{nil} if @var{buffer}
5672 contains no xwidgets.
5673 @end defun
5674
5675 @defun xwidget-webkit-goto-uri xwidget uri
5676 This function browses the specified @var{uri} in the given
5677 @var{xwidget}. The @var{uri} is a string that specifies the name of a
5678 file or a URL. @c FIXME: What else can a URI specify in this context?
5679 @end defun
5680
5681 @defun xwidget-webkit-execute-script xwidget script
5682 This function causes the browser widget specified by @var{xwidget} to
5683 execute the specified JavaScript @code{script}.
5684 @end defun
5685
5686 @defun xwidget-webkit-execute-script-rv xwidget script &optional default
5687 This function executes the specified @var{script} like
5688 @code{xwidget-webkit-execute-script} does, but it also returns the
5689 script's return value as a string. If @var{script} doesn't return a
5690 value, this function returns @var{default}, or @code{nil} if
5691 @var{default} was omitted.
5692 @end defun
5693
5694 @defun xwidget-webkit-get-title xwidget
5695 This function returns the title of @var{xwidget} as a string.
5696 @end defun
5697
5698 @defun xwidget-resize xwidget width height
5699 This function resizes the specified @var{xwidget} to the size
5700 @var{width}x@var{height} pixels.
5701 @end defun
5702
5703 @defun xwidget-size-request xwidget
5704 This function returns the desired size of @var{xwidget} as a list of
5705 the form @code{(@var{width} @var{height})}. The dimensions are in
5706 pixels.
5707 @end defun
5708
5709 @defun xwidget-info xwidget
5710 This function returns the attributes of @var{xwidget} as a vector of
5711 the form @code{[@var{type} @var{title} @var{width} @var{height}]}.
5712 The attributes are usually determined by @code{make-xwidget} when the
5713 xwidget is created.
5714 @end defun
5715
5716 @defun set-xwidget-query-on-exit-flag xwidget flag
5717 This function allows you to arrange that Emacs will ask the user for
5718 confirmation before exiting or before killing a buffer that has
5719 @var{xwidget} associated with it. If @var{flag} is non-@code{nil},
5720 Emacs will query the user, otherwise it will not.
5721 @end defun
5722
5723 @defun xwidget-query-on-exit-flag xwidget
5724 This function returns the current setting of @var{xwidget}s
5725 query-on-exit flag, either @code{t} or @code{nil}.
5726 @end defun
5727
5728 @node Buttons
5729 @section Buttons
5730 @cindex buttons in buffers
5731 @cindex clickable buttons in buffers
5732
5733 The Button package defines functions for inserting and manipulating
5734 @dfn{buttons} that can be activated with the mouse or via keyboard
5735 commands. These buttons are typically used for various kinds of
5736 hyperlinks.
5737
5738 A button is essentially a set of text or overlay properties,
5739 attached to a stretch of text in a buffer. These properties are
5740 called @dfn{button properties}. One of these properties, the
5741 @dfn{action property}, specifies a function which is called when the
5742 user invokes the button using the keyboard or the mouse. The action
5743 function may examine the button and use its other properties as
5744 desired.
5745
5746 In some ways, the Button package duplicates the functionality in the
5747 Widget package. @xref{Top, , Introduction, widget, The Emacs Widget
5748 Library}. The advantage of the Button package is that it is faster,
5749 smaller, and simpler to program. From the point of view of the user,
5750 the interfaces produced by the two packages are very similar.
5751
5752 @menu
5753 * Button Properties:: Button properties with special meanings.
5754 * Button Types:: Defining common properties for classes of buttons.
5755 * Making Buttons:: Adding buttons to Emacs buffers.
5756 * Manipulating Buttons:: Getting and setting properties of buttons.
5757 * Button Buffer Commands:: Buffer-wide commands and bindings for buttons.
5758 @end menu
5759
5760 @node Button Properties
5761 @subsection Button Properties
5762 @cindex button properties
5763
5764 Each button has an associated list of properties defining its
5765 appearance and behavior, and other arbitrary properties may be used
5766 for application specific purposes. The following properties have
5767 special meaning to the Button package:
5768
5769 @table @code
5770 @item action
5771 @kindex action @r{(button property)}
5772 The function to call when the user invokes the button, which is passed
5773 the single argument @var{button}. By default this is @code{ignore},
5774 which does nothing.
5775
5776 @item mouse-action
5777 @kindex mouse-action @r{(button property)}
5778 This is similar to @code{action}, and when present, will be used
5779 instead of @code{action} for button invocations resulting from
5780 mouse-clicks (instead of the user hitting @key{RET}). If not
5781 present, mouse-clicks use @code{action} instead.
5782
5783 @item face
5784 @kindex face @r{(button property)}
5785 This is an Emacs face controlling how buttons of this type are
5786 displayed; by default this is the @code{button} face.
5787
5788 @item mouse-face
5789 @kindex mouse-face @r{(button property)}
5790 This is an additional face which controls appearance during
5791 mouse-overs (merged with the usual button face); by default this is
5792 the usual Emacs @code{highlight} face.
5793
5794 @item keymap
5795 @kindex keymap @r{(button property)}
5796 The button's keymap, defining bindings active within the button
5797 region. By default this is the usual button region keymap, stored
5798 in the variable @code{button-map}, which defines @key{RET} and
5799 @key{mouse-2} to invoke the button.
5800
5801 @item type
5802 @kindex type @r{(button property)}
5803 The button type. @xref{Button Types}.
5804
5805 @item help-echo
5806 @kindex help-index @r{(button property)}
5807 A string displayed by the Emacs tool-tip help system; by default,
5808 @code{"mouse-2, RET: Push this button"}.
5809
5810 @item follow-link
5811 @kindex follow-link @r{(button property)}
5812 The follow-link property, defining how a @key{Mouse-1} click behaves
5813 on this button, @xref{Clickable Text}.
5814
5815 @item button
5816 @kindex button @r{(button property)}
5817 All buttons have a non-@code{nil} @code{button} property, which may be useful
5818 in finding regions of text that comprise buttons (which is what the
5819 standard button functions do).
5820 @end table
5821
5822 There are other properties defined for the regions of text in a
5823 button, but these are not generally interesting for typical uses.
5824
5825 @node Button Types
5826 @subsection Button Types
5827 @cindex button types
5828
5829 Every button has a @dfn{button type}, which defines default values
5830 for the button's properties. Button types are arranged in a
5831 hierarchy, with specialized types inheriting from more general types,
5832 so that it's easy to define special-purpose types of buttons for
5833 specific tasks.
5834
5835 @defun define-button-type name &rest properties
5836 Define a button type called @var{name} (a symbol).
5837 The remaining arguments
5838 form a sequence of @var{property value} pairs, specifying default
5839 property values for buttons with this type (a button's type may be set
5840 by giving it a @code{type} property when creating the button, using
5841 the @code{:type} keyword argument).
5842
5843 In addition, the keyword argument @code{:supertype} may be used to
5844 specify a button-type from which @var{name} inherits its default
5845 property values. Note that this inheritance happens only when
5846 @var{name} is defined; subsequent changes to a supertype are not
5847 reflected in its subtypes.
5848 @end defun
5849
5850 Using @code{define-button-type} to define default properties for
5851 buttons is not necessary---buttons without any specified type use the
5852 built-in button-type @code{button}---but it is encouraged, since
5853 doing so usually makes the resulting code clearer and more efficient.
5854
5855 @node Making Buttons
5856 @subsection Making Buttons
5857 @cindex making buttons
5858
5859 Buttons are associated with a region of text, using an overlay or
5860 text properties to hold button-specific information, all of which are
5861 initialized from the button's type (which defaults to the built-in
5862 button type @code{button}). Like all Emacs text, the appearance of
5863 the button is governed by the @code{face} property; by default (via
5864 the @code{face} property inherited from the @code{button} button-type)
5865 this is a simple underline, like a typical web-page link.
5866
5867 For convenience, there are two sorts of button-creation functions,
5868 those that add button properties to an existing region of a buffer,
5869 called @code{make-...button}, and those that also insert the button
5870 text, called @code{insert-...button}.
5871
5872 The button-creation functions all take the @code{&rest} argument
5873 @var{properties}, which should be a sequence of @var{property value}
5874 pairs, specifying properties to add to the button; see @ref{Button
5875 Properties}. In addition, the keyword argument @code{:type} may be
5876 used to specify a button-type from which to inherit other properties;
5877 see @ref{Button Types}. Any properties not explicitly specified
5878 during creation will be inherited from the button's type (if the type
5879 defines such a property).
5880
5881 The following functions add a button using an overlay
5882 (@pxref{Overlays}) to hold the button properties:
5883
5884 @defun make-button beg end &rest properties
5885 This makes a button from @var{beg} to @var{end} in the
5886 current buffer, and returns it.
5887 @end defun
5888
5889 @defun insert-button label &rest properties
5890 This insert a button with the label @var{label} at point,
5891 and returns it.
5892 @end defun
5893
5894 The following functions are similar, but using text properties
5895 (@pxref{Text Properties}) to hold the button properties. Such buttons
5896 do not add markers to the buffer, so editing in the buffer does not
5897 slow down if there is an extremely large numbers of buttons. However,
5898 if there is an existing face text property on the text (e.g., a face
5899 assigned by Font Lock mode), the button face may not be visible. Both
5900 of these functions return the starting position of the new button.
5901
5902 @defun make-text-button beg end &rest properties
5903 This makes a button from @var{beg} to @var{end} in the current buffer,
5904 using text properties.
5905 @end defun
5906
5907 @defun insert-text-button label &rest properties
5908 This inserts a button with the label @var{label} at point, using text
5909 properties.
5910 @end defun
5911
5912 @node Manipulating Buttons
5913 @subsection Manipulating Buttons
5914 @cindex manipulating buttons
5915
5916 These are functions for getting and setting properties of buttons.
5917 Often these are used by a button's invocation function to determine
5918 what to do.
5919
5920 Where a @var{button} parameter is specified, it means an object
5921 referring to a specific button, either an overlay (for overlay
5922 buttons), or a buffer-position or marker (for text property buttons).
5923 Such an object is passed as the first argument to a button's
5924 invocation function when it is invoked.
5925
5926 @defun button-start button
5927 Return the position at which @var{button} starts.
5928 @end defun
5929
5930 @defun button-end button
5931 Return the position at which @var{button} ends.
5932 @end defun
5933
5934 @defun button-get button prop
5935 Get the property of button @var{button} named @var{prop}.
5936 @end defun
5937
5938 @defun button-put button prop val
5939 Set @var{button}'s @var{prop} property to @var{val}.
5940 @end defun
5941
5942 @defun button-activate button &optional use-mouse-action
5943 Call @var{button}'s @code{action} property (i.e., invoke the function
5944 that is the value of that property, passing it the single argument
5945 @var{button}). If @var{use-mouse-action} is non-@code{nil}, try to
5946 invoke the button's @code{mouse-action} property instead of
5947 @code{action}; if the button has no @code{mouse-action} property, use
5948 @code{action} as normal.
5949 @end defun
5950
5951 @defun button-label button
5952 Return @var{button}'s text label.
5953 @end defun
5954
5955 @defun button-type button
5956 Return @var{button}'s button-type.
5957 @end defun
5958
5959 @defun button-has-type-p button type
5960 Return @code{t} if @var{button} has button-type @var{type}, or one of
5961 @var{type}'s subtypes.
5962 @end defun
5963
5964 @defun button-at pos
5965 Return the button at position @var{pos} in the current buffer, or
5966 @code{nil}. If the button at @var{pos} is a text property button, the
5967 return value is a marker pointing to @var{pos}.
5968 @end defun
5969
5970 @defun button-type-put type prop val
5971 Set the button-type @var{type}'s @var{prop} property to @var{val}.
5972 @end defun
5973
5974 @defun button-type-get type prop
5975 Get the property of button-type @var{type} named @var{prop}.
5976 @end defun
5977
5978 @defun button-type-subtype-p type supertype
5979 Return @code{t} if button-type @var{type} is a subtype of @var{supertype}.
5980 @end defun
5981
5982 @node Button Buffer Commands
5983 @subsection Button Buffer Commands
5984 @cindex button buffer commands
5985
5986 These are commands and functions for locating and operating on
5987 buttons in an Emacs buffer.
5988
5989 @code{push-button} is the command that a user uses to actually push
5990 a button, and is bound by default in the button itself to @key{RET}
5991 and to @key{mouse-2} using a local keymap in the button's overlay or
5992 text properties. Commands that are useful outside the buttons itself,
5993 such as @code{forward-button} and @code{backward-button} are
5994 additionally available in the keymap stored in
5995 @code{button-buffer-map}; a mode which uses buttons may want to use
5996 @code{button-buffer-map} as a parent keymap for its keymap.
5997
5998 If the button has a non-@code{nil} @code{follow-link} property, and
5999 @code{mouse-1-click-follows-link} is set, a quick @key{Mouse-1} click
6000 will also activate the @code{push-button} command.
6001 @xref{Clickable Text}.
6002
6003 @deffn Command push-button &optional pos use-mouse-action
6004 Perform the action specified by a button at location @var{pos}.
6005 @var{pos} may be either a buffer position or a mouse-event. If
6006 @var{use-mouse-action} is non-@code{nil}, or @var{pos} is a
6007 mouse-event (@pxref{Mouse Events}), try to invoke the button's
6008 @code{mouse-action} property instead of @code{action}; if the button
6009 has no @code{mouse-action} property, use @code{action} as normal.
6010 @var{pos} defaults to point, except when @code{push-button} is invoked
6011 interactively as the result of a mouse-event, in which case, the mouse
6012 event's position is used. If there's no button at @var{pos}, do
6013 nothing and return @code{nil}, otherwise return @code{t}.
6014 @end deffn
6015
6016 @deffn Command forward-button n &optional wrap display-message
6017 Move to the @var{n}th next button, or @var{n}th previous button if
6018 @var{n} is negative. If @var{n} is zero, move to the start of any
6019 button at point. If @var{wrap} is non-@code{nil}, moving past either
6020 end of the buffer continues from the other end. If
6021 @var{display-message} is non-@code{nil}, the button's help-echo string
6022 is displayed. Any button with a non-@code{nil} @code{skip} property
6023 is skipped over. Returns the button found.
6024 @end deffn
6025
6026 @deffn Command backward-button n &optional wrap display-message
6027 Move to the @var{n}th previous button, or @var{n}th next button if
6028 @var{n} is negative. If @var{n} is zero, move to the start of any
6029 button at point. If @var{wrap} is non-@code{nil}, moving past either
6030 end of the buffer continues from the other end. If
6031 @var{display-message} is non-@code{nil}, the button's help-echo string
6032 is displayed. Any button with a non-@code{nil} @code{skip} property
6033 is skipped over. Returns the button found.
6034 @end deffn
6035
6036 @defun next-button pos &optional count-current
6037 @defunx previous-button pos &optional count-current
6038 Return the next button after (for @code{next-button}) or before (for
6039 @code{previous-button}) position @var{pos} in the current buffer. If
6040 @var{count-current} is non-@code{nil}, count any button at @var{pos}
6041 in the search, instead of starting at the next button.
6042 @end defun
6043
6044 @node Abstract Display
6045 @section Abstract Display
6046 @cindex ewoc
6047 @cindex display, abstract
6048 @cindex display, arbitrary objects
6049 @cindex model/view/controller
6050 @cindex view part, model/view/controller
6051
6052 The Ewoc package constructs buffer text that represents a structure
6053 of Lisp objects, and updates the text to follow changes in that
6054 structure. This is like the ``view'' component in the
6055 ``model--view--controller'' design paradigm. Ewoc means ``Emacs's
6056 Widget for Object Collections''.
6057
6058 An @dfn{ewoc} is a structure that organizes information required to
6059 construct buffer text that represents certain Lisp data. The buffer
6060 text of the ewoc has three parts, in order: first, fixed @dfn{header}
6061 text; next, textual descriptions of a series of data elements (Lisp
6062 objects that you specify); and last, fixed @dfn{footer} text.
6063 Specifically, an ewoc contains information on:
6064
6065 @itemize @bullet
6066 @item
6067 The buffer which its text is generated in.
6068
6069 @item
6070 The text's start position in the buffer.
6071
6072 @item
6073 The header and footer strings.
6074
6075 @item
6076 @cindex node, ewoc
6077 @c or "@cindex node, abstract display"?
6078 A doubly-linked chain of @dfn{nodes}, each of which contains:
6079
6080 @itemize
6081 @item
6082 A @dfn{data element}, a single Lisp object.
6083
6084 @item
6085 Links to the preceding and following nodes in the chain.
6086 @end itemize
6087
6088 @item
6089 A @dfn{pretty-printer} function which is responsible for
6090 inserting the textual representation of a data
6091 element value into the current buffer.
6092 @end itemize
6093
6094 Typically, you define an ewoc with @code{ewoc-create}, and then pass
6095 the resulting ewoc structure to other functions in the Ewoc package to
6096 build nodes within it, and display it in the buffer. Once it is
6097 displayed in the buffer, other functions determine the correspondence
6098 between buffer positions and nodes, move point from one node's textual
6099 representation to another, and so forth. @xref{Abstract Display
6100 Functions}.
6101
6102 @cindex encapsulation, ewoc
6103 @c or "@cindex encapsulation, abstract display"?
6104 A node @dfn{encapsulates} a data element much the way a variable
6105 holds a value. Normally, encapsulation occurs as a part of adding a
6106 node to the ewoc. You can retrieve the data element value and place a
6107 new value in its place, like so:
6108
6109 @lisp
6110 (ewoc-data @var{node})
6111 @result{} value
6112
6113 (ewoc-set-data @var{node} @var{new-value})
6114 @result{} @var{new-value}
6115 @end lisp
6116
6117 @noindent
6118 You can also use, as the data element value, a Lisp object (list or
6119 vector) that is a container for the real value, or an index into
6120 some other structure. The example (@pxref{Abstract Display Example})
6121 uses the latter approach.
6122
6123 When the data changes, you will want to update the text in the
6124 buffer. You can update all nodes by calling @code{ewoc-refresh}, or
6125 just specific nodes using @code{ewoc-invalidate}, or all nodes
6126 satisfying a predicate using @code{ewoc-map}. Alternatively, you can
6127 delete invalid nodes using @code{ewoc-delete} or @code{ewoc-filter},
6128 and add new nodes in their place. Deleting a node from an ewoc deletes
6129 its associated textual description from buffer, as well.
6130
6131 @menu
6132 * Abstract Display Functions:: Functions in the Ewoc package.
6133 * Abstract Display Example:: Example of using Ewoc.
6134 @end menu
6135
6136 @node Abstract Display Functions
6137 @subsection Abstract Display Functions
6138
6139 In this subsection, @var{ewoc} and @var{node} stand for the
6140 structures described above (@pxref{Abstract Display}), while
6141 @var{data} stands for an arbitrary Lisp object used as a data element.
6142
6143 @defun ewoc-create pretty-printer &optional header footer nosep
6144 This constructs and returns a new ewoc, with no nodes (and thus no data
6145 elements). @var{pretty-printer} should be a function that takes one
6146 argument, a data element of the sort you plan to use in this ewoc, and
6147 inserts its textual description at point using @code{insert} (and never
6148 @code{insert-before-markers}, because that would interfere with the
6149 Ewoc package's internal mechanisms).
6150
6151 Normally, a newline is automatically inserted after the header,
6152 the footer and every node's textual description. If @var{nosep}
6153 is non-@code{nil}, no newline is inserted. This may be useful for
6154 displaying an entire ewoc on a single line, for example, or for
6155 making nodes invisible by arranging for @var{pretty-printer}
6156 to do nothing for those nodes.
6157
6158 An ewoc maintains its text in the buffer that is current when
6159 you create it, so switch to the intended buffer before calling
6160 @code{ewoc-create}.
6161 @end defun
6162
6163 @defun ewoc-buffer ewoc
6164 This returns the buffer where @var{ewoc} maintains its text.
6165 @end defun
6166
6167 @defun ewoc-get-hf ewoc
6168 This returns a cons cell @code{(@var{header} . @var{footer})}
6169 made from @var{ewoc}'s header and footer.
6170 @end defun
6171
6172 @defun ewoc-set-hf ewoc header footer
6173 This sets the header and footer of @var{ewoc} to the strings
6174 @var{header} and @var{footer}, respectively.
6175 @end defun
6176
6177 @defun ewoc-enter-first ewoc data
6178 @defunx ewoc-enter-last ewoc data
6179 These add a new node encapsulating @var{data}, putting it, respectively,
6180 at the beginning or end of @var{ewoc}'s chain of nodes.
6181 @end defun
6182
6183 @defun ewoc-enter-before ewoc node data
6184 @defunx ewoc-enter-after ewoc node data
6185 These add a new node encapsulating @var{data}, adding it to
6186 @var{ewoc} before or after @var{node}, respectively.
6187 @end defun
6188
6189 @defun ewoc-prev ewoc node
6190 @defunx ewoc-next ewoc node
6191 These return, respectively, the previous node and the next node of @var{node}
6192 in @var{ewoc}.
6193 @end defun
6194
6195 @defun ewoc-nth ewoc n
6196 This returns the node in @var{ewoc} found at zero-based index @var{n}.
6197 A negative @var{n} means count from the end. @code{ewoc-nth} returns
6198 @code{nil} if @var{n} is out of range.
6199 @end defun
6200
6201 @defun ewoc-data node
6202 This extracts the data encapsulated by @var{node} and returns it.
6203 @end defun
6204
6205 @defun ewoc-set-data node data
6206 This sets the data encapsulated by @var{node} to @var{data}.
6207 @end defun
6208
6209 @defun ewoc-locate ewoc &optional pos guess
6210 This determines the node in @var{ewoc} which contains point (or
6211 @var{pos} if specified), and returns that node. If @var{ewoc} has no
6212 nodes, it returns @code{nil}. If @var{pos} is before the first node,
6213 it returns the first node; if @var{pos} is after the last node, it returns
6214 the last node. The optional third arg @var{guess}
6215 should be a node that is likely to be near @var{pos}; this doesn't
6216 alter the result, but makes the function run faster.
6217 @end defun
6218
6219 @defun ewoc-location node
6220 This returns the start position of @var{node}.
6221 @end defun
6222
6223 @defun ewoc-goto-prev ewoc arg
6224 @defunx ewoc-goto-next ewoc arg
6225 These move point to the previous or next, respectively, @var{arg}th node
6226 in @var{ewoc}. @code{ewoc-goto-prev} does not move if it is already at
6227 the first node or if @var{ewoc} is empty, whereas @code{ewoc-goto-next}
6228 moves past the last node, returning @code{nil}. Excepting this special
6229 case, these functions return the node moved to.
6230 @end defun
6231
6232 @defun ewoc-goto-node ewoc node
6233 This moves point to the start of @var{node} in @var{ewoc}.
6234 @end defun
6235
6236 @defun ewoc-refresh ewoc
6237 This function regenerates the text of @var{ewoc}. It works by
6238 deleting the text between the header and the footer, i.e., all the
6239 data elements' representations, and then calling the pretty-printer
6240 function for each node, one by one, in order.
6241 @end defun
6242
6243 @defun ewoc-invalidate ewoc &rest nodes
6244 This is similar to @code{ewoc-refresh}, except that only @var{nodes} in
6245 @var{ewoc} are updated instead of the entire set.
6246 @end defun
6247
6248 @defun ewoc-delete ewoc &rest nodes
6249 This deletes each node in @var{nodes} from @var{ewoc}.
6250 @end defun
6251
6252 @defun ewoc-filter ewoc predicate &rest args
6253 This calls @var{predicate} for each data element in @var{ewoc} and
6254 deletes those nodes for which @var{predicate} returns @code{nil}.
6255 Any @var{args} are passed to @var{predicate}.
6256 @end defun
6257
6258 @defun ewoc-collect ewoc predicate &rest args
6259 This calls @var{predicate} for each data element in @var{ewoc}
6260 and returns a list of those elements for which @var{predicate}
6261 returns non-@code{nil}. The elements in the list are ordered
6262 as in the buffer. Any @var{args} are passed to @var{predicate}.
6263 @end defun
6264
6265 @defun ewoc-map map-function ewoc &rest args
6266 This calls @var{map-function} for each data element in @var{ewoc} and
6267 updates those nodes for which @var{map-function} returns non-@code{nil}.
6268 Any @var{args} are passed to @var{map-function}.
6269 @end defun
6270
6271 @node Abstract Display Example
6272 @subsection Abstract Display Example
6273
6274 Here is a simple example using functions of the ewoc package to
6275 implement a @dfn{color components} display, an area in a buffer that
6276 represents a vector of three integers (itself representing a 24-bit RGB
6277 value) in various ways.
6278
6279 @example
6280 (setq colorcomp-ewoc nil
6281 colorcomp-data nil
6282 colorcomp-mode-map nil
6283 colorcomp-labels ["Red" "Green" "Blue"])
6284
6285 (defun colorcomp-pp (data)
6286 (if data
6287 (let ((comp (aref colorcomp-data data)))
6288 (insert (aref colorcomp-labels data) "\t: #x"
6289 (format "%02X" comp) " "
6290 (make-string (ash comp -2) ?#) "\n"))
6291 (let ((cstr (format "#%02X%02X%02X"
6292 (aref colorcomp-data 0)
6293 (aref colorcomp-data 1)
6294 (aref colorcomp-data 2)))
6295 (samp " (sample text) "))
6296 (insert "Color\t: "
6297 (propertize samp 'face
6298 `(foreground-color . ,cstr))
6299 (propertize samp 'face
6300 `(background-color . ,cstr))
6301 "\n"))))
6302
6303 (defun colorcomp (color)
6304 "Allow fiddling with COLOR in a new buffer.
6305 The buffer is in Color Components mode."
6306 (interactive "sColor (name or #RGB or #RRGGBB): ")
6307 (when (string= "" color)
6308 (setq color "green"))
6309 (unless (color-values color)
6310 (error "No such color: %S" color))
6311 (switch-to-buffer
6312 (generate-new-buffer (format "originally: %s" color)))
6313 (kill-all-local-variables)
6314 (setq major-mode 'colorcomp-mode
6315 mode-name "Color Components")
6316 (use-local-map colorcomp-mode-map)
6317 (erase-buffer)
6318 (buffer-disable-undo)
6319 (let ((data (apply 'vector (mapcar (lambda (n) (ash n -8))
6320 (color-values color))))
6321 (ewoc (ewoc-create 'colorcomp-pp
6322 "\nColor Components\n\n"
6323 (substitute-command-keys
6324 "\n\\@{colorcomp-mode-map@}"))))
6325 (set (make-local-variable 'colorcomp-data) data)
6326 (set (make-local-variable 'colorcomp-ewoc) ewoc)
6327 (ewoc-enter-last ewoc 0)
6328 (ewoc-enter-last ewoc 1)
6329 (ewoc-enter-last ewoc 2)
6330 (ewoc-enter-last ewoc nil)))
6331 @end example
6332
6333 @cindex controller part, model/view/controller
6334 This example can be extended to be a color selection widget (in
6335 other words, the ``controller'' part of the ``model--view--controller''
6336 design paradigm) by defining commands to modify @code{colorcomp-data}
6337 and to finish the selection process, and a keymap to tie it all
6338 together conveniently.
6339
6340 @smallexample
6341 (defun colorcomp-mod (index limit delta)
6342 (let ((cur (aref colorcomp-data index)))
6343 (unless (= limit cur)
6344 (aset colorcomp-data index (+ cur delta)))
6345 (ewoc-invalidate
6346 colorcomp-ewoc
6347 (ewoc-nth colorcomp-ewoc index)
6348 (ewoc-nth colorcomp-ewoc -1))))
6349
6350 (defun colorcomp-R-more () (interactive) (colorcomp-mod 0 255 1))
6351 (defun colorcomp-G-more () (interactive) (colorcomp-mod 1 255 1))
6352 (defun colorcomp-B-more () (interactive) (colorcomp-mod 2 255 1))
6353 (defun colorcomp-R-less () (interactive) (colorcomp-mod 0 0 -1))
6354 (defun colorcomp-G-less () (interactive) (colorcomp-mod 1 0 -1))
6355 (defun colorcomp-B-less () (interactive) (colorcomp-mod 2 0 -1))
6356
6357 (defun colorcomp-copy-as-kill-and-exit ()
6358 "Copy the color components into the kill ring and kill the buffer.
6359 The string is formatted #RRGGBB (hash followed by six hex digits)."
6360 (interactive)
6361 (kill-new (format "#%02X%02X%02X"
6362 (aref colorcomp-data 0)
6363 (aref colorcomp-data 1)
6364 (aref colorcomp-data 2)))
6365 (kill-buffer nil))
6366
6367 (setq colorcomp-mode-map
6368 (let ((m (make-sparse-keymap)))
6369 (suppress-keymap m)
6370 (define-key m "i" 'colorcomp-R-less)
6371 (define-key m "o" 'colorcomp-R-more)
6372 (define-key m "k" 'colorcomp-G-less)
6373 (define-key m "l" 'colorcomp-G-more)
6374 (define-key m "," 'colorcomp-B-less)
6375 (define-key m "." 'colorcomp-B-more)
6376 (define-key m " " 'colorcomp-copy-as-kill-and-exit)
6377 m))
6378 @end smallexample
6379
6380 Note that we never modify the data in each node, which is fixed when the
6381 ewoc is created to be either @code{nil} or an index into the vector
6382 @code{colorcomp-data}, the actual color components.
6383
6384 @node Blinking
6385 @section Blinking Parentheses
6386 @cindex parenthesis matching
6387 @cindex blinking parentheses
6388 @cindex balancing parentheses
6389
6390 This section describes the mechanism by which Emacs shows a matching
6391 open parenthesis when the user inserts a close parenthesis.
6392
6393 @defvar blink-paren-function
6394 The value of this variable should be a function (of no arguments) to
6395 be called whenever a character with close parenthesis syntax is inserted.
6396 The value of @code{blink-paren-function} may be @code{nil}, in which
6397 case nothing is done.
6398 @end defvar
6399
6400 @defopt blink-matching-paren
6401 If this variable is @code{nil}, then @code{blink-matching-open} does
6402 nothing.
6403 @end defopt
6404
6405 @defopt blink-matching-paren-distance
6406 This variable specifies the maximum distance to scan for a matching
6407 parenthesis before giving up.
6408 @end defopt
6409
6410 @defopt blink-matching-delay
6411 This variable specifies the number of seconds to keep indicating the
6412 matching parenthesis. A fraction of a second often gives good
6413 results, but the default is 1, which works on all systems.
6414 @end defopt
6415
6416 @deffn Command blink-matching-open
6417 This function is the default value of @code{blink-paren-function}. It
6418 assumes that point follows a character with close parenthesis syntax
6419 and applies the appropriate effect momentarily to the matching opening
6420 character. If that character is not already on the screen, it
6421 displays the character's context in the echo area. To avoid long
6422 delays, this function does not search farther than
6423 @code{blink-matching-paren-distance} characters.
6424
6425 Here is an example of calling this function explicitly.
6426
6427 @smallexample
6428 @group
6429 (defun interactive-blink-matching-open ()
6430 "Indicate momentarily the start of parenthesized sexp before point."
6431 (interactive)
6432 @end group
6433 @group
6434 (let ((blink-matching-paren-distance
6435 (buffer-size))
6436 (blink-matching-paren t))
6437 (blink-matching-open)))
6438 @end group
6439 @end smallexample
6440 @end deffn
6441
6442 @node Character Display
6443 @section Character Display
6444
6445 This section describes how characters are actually displayed by
6446 Emacs. Typically, a character is displayed as a @dfn{glyph} (a
6447 graphical symbol which occupies one character position on the screen),
6448 whose appearance corresponds to the character itself. For example,
6449 the character @samp{a} (character code 97) is displayed as @samp{a}.
6450 Some characters, however, are displayed specially. For example, the
6451 formfeed character (character code 12) is usually displayed as a
6452 sequence of two glyphs, @samp{^L}, while the newline character
6453 (character code 10) starts a new screen line.
6454
6455 You can modify how each character is displayed by defining a
6456 @dfn{display table}, which maps each character code into a sequence of
6457 glyphs. @xref{Display Tables}.
6458
6459 @menu
6460 * Usual Display:: The usual conventions for displaying characters.
6461 * Display Tables:: What a display table consists of.
6462 * Active Display Table:: How Emacs selects a display table to use.
6463 * Glyphs:: How to define a glyph, and what glyphs mean.
6464 * Glyphless Chars:: How glyphless characters are drawn.
6465 @end menu
6466
6467 @node Usual Display
6468 @subsection Usual Display Conventions
6469
6470 Here are the conventions for displaying each character code (in the
6471 absence of a display table, which can override these
6472 @iftex
6473 conventions).
6474 @end iftex
6475 @ifnottex
6476 conventions; @pxref{Display Tables}).
6477 @end ifnottex
6478
6479 @cindex printable ASCII characters
6480 @itemize @bullet
6481 @item
6482 The @dfn{printable @acronym{ASCII} characters}, character codes 32
6483 through 126 (consisting of numerals, English letters, and symbols like
6484 @samp{#}) are displayed literally.
6485
6486 @item
6487 The tab character (character code 9) displays as whitespace stretching
6488 up to the next tab stop column. @xref{Text Display,,, emacs, The GNU
6489 Emacs Manual}. The variable @code{tab-width} controls the number of
6490 spaces per tab stop (see below).
6491
6492 @item
6493 The newline character (character code 10) has a special effect: it
6494 ends the preceding line and starts a new line.
6495
6496 @cindex ASCII control characters
6497 @item
6498 The non-printable @dfn{@acronym{ASCII} control characters}---character
6499 codes 0 through 31, as well as the @key{DEL} character (character code
6500 127)---display in one of two ways according to the variable
6501 @code{ctl-arrow}. If this variable is non-@code{nil} (the default),
6502 these characters are displayed as sequences of two glyphs, where the
6503 first glyph is @samp{^} (a display table can specify a glyph to use
6504 instead of @samp{^}); e.g., the @key{DEL} character is displayed as
6505 @samp{^?}.
6506
6507 If @code{ctl-arrow} is @code{nil}, these characters are displayed as
6508 octal escapes (see below).
6509
6510 This rule also applies to carriage return (character code 13), if that
6511 character appears in the buffer. But carriage returns usually do not
6512 appear in buffer text; they are eliminated as part of end-of-line
6513 conversion (@pxref{Coding System Basics}).
6514
6515 @cindex octal escapes
6516 @item
6517 @dfn{Raw bytes} are non-@acronym{ASCII} characters with codes 128
6518 through 255 (@pxref{Text Representations}). These characters display
6519 as @dfn{octal escapes}: sequences of four glyphs, where the first
6520 glyph is the @acronym{ASCII} code for @samp{\}, and the others are
6521 digit characters representing the character code in octal. (A display
6522 table can specify a glyph to use instead of @samp{\}.)
6523
6524 @item
6525 Each non-@acronym{ASCII} character with code above 255 is displayed
6526 literally, if the terminal supports it. If the terminal does not
6527 support it, the character is said to be @dfn{glyphless}, and it is
6528 usually displayed using a placeholder glyph. For example, if a
6529 graphical terminal has no font for a character, Emacs usually displays
6530 a box containing the character code in hexadecimal. @xref{Glyphless
6531 Chars}.
6532 @end itemize
6533
6534 The above display conventions apply even when there is a display
6535 table, for any character whose entry in the active display table is
6536 @code{nil}. Thus, when you set up a display table, you need only
6537 specify the characters for which you want special behavior.
6538
6539 The following variables affect how certain characters are displayed
6540 on the screen. Since they change the number of columns the characters
6541 occupy, they also affect the indentation functions. They also affect
6542 how the mode line is displayed; if you want to force redisplay of the
6543 mode line using the new values, call the function
6544 @code{force-mode-line-update} (@pxref{Mode Line Format}).
6545
6546 @defopt ctl-arrow
6547 @cindex control characters in display
6548 This buffer-local variable controls how control characters are
6549 displayed. If it is non-@code{nil}, they are displayed as a caret
6550 followed by the character: @samp{^A}. If it is @code{nil}, they are
6551 displayed as octal escapes: a backslash followed by three octal
6552 digits, as in @samp{\001}.
6553 @end defopt
6554
6555 @defopt tab-width
6556 The value of this buffer-local variable is the spacing between tab
6557 stops used for displaying tab characters in Emacs buffers. The value
6558 is in units of columns, and the default is 8. Note that this feature
6559 is completely independent of the user-settable tab stops used by the
6560 command @code{tab-to-tab-stop}. @xref{Indent Tabs}.
6561 @end defopt
6562
6563 @node Display Tables
6564 @subsection Display Tables
6565
6566 @cindex display table
6567 A display table is a special-purpose char-table
6568 (@pxref{Char-Tables}), with @code{display-table} as its subtype, which
6569 is used to override the usual character display conventions. This
6570 section describes how to make, inspect, and assign elements to a
6571 display table object.
6572
6573 @defun make-display-table
6574 This creates and returns a display table. The table initially has
6575 @code{nil} in all elements.
6576 @end defun
6577
6578 The ordinary elements of the display table are indexed by character
6579 codes; the element at index @var{c} says how to display the character
6580 code @var{c}. The value should be @code{nil} (which means to display
6581 the character @var{c} according to the usual display conventions;
6582 @pxref{Usual Display}), or a vector of glyph codes (which means to
6583 display the character @var{c} as those glyphs; @pxref{Glyphs}).
6584
6585 @strong{Warning:} if you use the display table to change the display
6586 of newline characters, the whole buffer will be displayed as one long
6587 line.
6588
6589 The display table also has six @dfn{extra slots} which serve special
6590 purposes. Here is a table of their meanings; @code{nil} in any slot
6591 means to use the default for that slot, as stated below.
6592
6593 @table @asis
6594 @item 0
6595 The glyph for the end of a truncated screen line (the default for this
6596 is @samp{$}). @xref{Glyphs}. On graphical terminals, Emacs uses
6597 arrows in the fringes to indicate truncation, so the display table has
6598 no effect.
6599
6600 @item 1
6601 The glyph for the end of a continued line (the default is @samp{\}).
6602 On graphical terminals, Emacs uses curved arrows in the fringes to
6603 indicate continuation, so the display table has no effect.
6604
6605 @item 2
6606 The glyph for indicating a character displayed as an octal character
6607 code (the default is @samp{\}).
6608
6609 @item 3
6610 The glyph for indicating a control character (the default is @samp{^}).
6611
6612 @item 4
6613 A vector of glyphs for indicating the presence of invisible lines (the
6614 default is @samp{...}). @xref{Selective Display}.
6615
6616 @item 5
6617 The glyph used to draw the border between side-by-side windows (the
6618 default is @samp{|}). @xref{Splitting Windows}. This takes effect only
6619 when there are no scroll bars; if scroll bars are supported and in use,
6620 a scroll bar separates the two windows.
6621 @end table
6622
6623 For example, here is how to construct a display table that mimics
6624 the effect of setting @code{ctl-arrow} to a non-@code{nil} value
6625 (@pxref{Glyphs}, for the function @code{make-glyph-code}):
6626
6627 @example
6628 (setq disptab (make-display-table))
6629 (dotimes (i 32)
6630 (or (= i ?\t)
6631 (= i ?\n)
6632 (aset disptab i
6633 (vector (make-glyph-code ?^ 'escape-glyph)
6634 (make-glyph-code (+ i 64) 'escape-glyph)))))
6635 (aset disptab 127
6636 (vector (make-glyph-code ?^ 'escape-glyph)
6637 (make-glyph-code ?? 'escape-glyph)))))
6638 @end example
6639
6640 @defun display-table-slot display-table slot
6641 This function returns the value of the extra slot @var{slot} of
6642 @var{display-table}. The argument @var{slot} may be a number from 0 to
6643 5 inclusive, or a slot name (symbol). Valid symbols are
6644 @code{truncation}, @code{wrap}, @code{escape}, @code{control},
6645 @code{selective-display}, and @code{vertical-border}.
6646 @end defun
6647
6648 @defun set-display-table-slot display-table slot value
6649 This function stores @var{value} in the extra slot @var{slot} of
6650 @var{display-table}. The argument @var{slot} may be a number from 0 to
6651 5 inclusive, or a slot name (symbol). Valid symbols are
6652 @code{truncation}, @code{wrap}, @code{escape}, @code{control},
6653 @code{selective-display}, and @code{vertical-border}.
6654 @end defun
6655
6656 @defun describe-display-table display-table
6657 This function displays a description of the display table
6658 @var{display-table} in a help buffer.
6659 @end defun
6660
6661 @deffn Command describe-current-display-table
6662 This command displays a description of the current display table in a
6663 help buffer.
6664 @end deffn
6665
6666 @node Active Display Table
6667 @subsection Active Display Table
6668 @cindex active display table
6669
6670 Each window can specify a display table, and so can each buffer.
6671 The window's display table, if there is one, takes precedence over the
6672 buffer's display table. If neither exists, Emacs tries to use the
6673 standard display table; if that is @code{nil}, Emacs uses the usual
6674 character display conventions (@pxref{Usual Display}).
6675
6676 Note that display tables affect how the mode line is displayed, so
6677 if you want to force redisplay of the mode line using a new display
6678 table, call @code{force-mode-line-update} (@pxref{Mode Line Format}).
6679
6680 @defun window-display-table &optional window
6681 This function returns @var{window}'s display table, or @code{nil} if
6682 there is none. The default for @var{window} is the selected window.
6683 @end defun
6684
6685 @defun set-window-display-table window table
6686 This function sets the display table of @var{window} to @var{table}.
6687 The argument @var{table} should be either a display table or
6688 @code{nil}.
6689 @end defun
6690
6691 @defvar buffer-display-table
6692 This variable is automatically buffer-local in all buffers; its value
6693 specifies the buffer's display table. If it is @code{nil}, there is
6694 no buffer display table.
6695 @end defvar
6696
6697 @defvar standard-display-table
6698 The value of this variable is the standard display table, which is
6699 used when Emacs is displaying a buffer in a window with neither a
6700 window display table nor a buffer display table defined, or when Emacs
6701 is outputting text to the standard output or error streams. Although its
6702 default is typically @code{nil}, in an interactive session if the
6703 terminal cannot display curved quotes, its default maps curved quotes
6704 to ASCII approximations. @xref{Keys in Documentation}.
6705 @end defvar
6706
6707 The @file{disp-table} library defines several functions for changing
6708 the standard display table.
6709
6710 @node Glyphs
6711 @subsection Glyphs
6712 @cindex glyph
6713
6714 @cindex glyph code
6715 A @dfn{glyph} is a graphical symbol which occupies a single
6716 character position on the screen. Each glyph is represented in Lisp
6717 as a @dfn{glyph code}, which specifies a character and optionally a
6718 face to display it in (@pxref{Faces}). The main use of glyph codes is
6719 as the entries of display tables (@pxref{Display Tables}). The
6720 following functions are used to manipulate glyph codes:
6721
6722 @defun make-glyph-code char &optional face
6723 This function returns a glyph code representing char @var{char} with
6724 face @var{face}. If @var{face} is omitted or @code{nil}, the glyph
6725 uses the default face; in that case, the glyph code is an integer. If
6726 @var{face} is non-@code{nil}, the glyph code is not necessarily an
6727 integer object.
6728 @end defun
6729
6730 @defun glyph-char glyph
6731 This function returns the character of glyph code @var{glyph}.
6732 @end defun
6733
6734 @defun glyph-face glyph
6735 This function returns face of glyph code @var{glyph}, or @code{nil} if
6736 @var{glyph} uses the default face.
6737 @end defun
6738
6739 @ifnottex
6740 You can set up a @dfn{glyph table} to change how glyph codes are
6741 actually displayed on text terminals. This feature is semi-obsolete;
6742 use @code{glyphless-char-display} instead (@pxref{Glyphless Chars}).
6743
6744 @defvar glyph-table
6745 The value of this variable, if non-@code{nil}, is the current glyph
6746 table. It takes effect only on character terminals; on graphical
6747 displays, all glyphs are displayed literally. The glyph table should
6748 be a vector whose @var{g}th element specifies how to display glyph
6749 code @var{g}, where @var{g} is the glyph code for a glyph whose face
6750 is unspecified. Each element should be one of the following:
6751
6752 @table @asis
6753 @item @code{nil}
6754 Display this glyph literally.
6755
6756 @item a string
6757 Display this glyph by sending the specified string to the terminal.
6758
6759 @item a glyph code
6760 Display the specified glyph code instead.
6761 @end table
6762
6763 Any integer glyph code greater than or equal to the length of the
6764 glyph table is displayed literally.
6765 @end defvar
6766 @end ifnottex
6767
6768 @node Glyphless Chars
6769 @subsection Glyphless Character Display
6770 @cindex glyphless characters
6771
6772 @dfn{Glyphless characters} are characters which are displayed in a
6773 special way, e.g., as a box containing a hexadecimal code, instead of
6774 being displayed literally. These include characters which are
6775 explicitly defined to be glyphless, as well as characters for which
6776 there is no available font (on a graphical display), and characters
6777 which cannot be encoded by the terminal's coding system (on a text
6778 terminal).
6779
6780 @defvar glyphless-char-display
6781 The value of this variable is a char-table which defines glyphless
6782 characters and how they are displayed. Each entry must be one of the
6783 following display methods:
6784
6785 @table @asis
6786 @item @code{nil}
6787 Display the character in the usual way.
6788
6789 @item @code{zero-width}
6790 Don't display the character.
6791
6792 @item @code{thin-space}
6793 Display a thin space, 1-pixel wide on graphical displays, or
6794 1-character wide on text terminals.
6795
6796 @item @code{empty-box}
6797 Display an empty box.
6798
6799 @item @code{hex-code}
6800 Display a box containing the Unicode codepoint of the character, in
6801 hexadecimal notation.
6802
6803 @item an @acronym{ASCII} string
6804 Display a box containing that string. The string should contain at
6805 most 6 @acronym{ASCII} characters.
6806
6807 @item a cons cell @code{(@var{graphical} . @var{text})}
6808 Display with @var{graphical} on graphical displays, and with
6809 @var{text} on text terminals. Both @var{graphical} and @var{text}
6810 must be one of the display methods described above.
6811 @end table
6812
6813 @noindent
6814 The @code{thin-space}, @code{empty-box}, @code{hex-code}, and
6815 @acronym{ASCII} string display methods are drawn with the
6816 @code{glyphless-char} face. On text terminals, a box is emulated by
6817 square brackets, @samp{[]}.
6818
6819 The char-table has one extra slot, which determines how to display any
6820 character that cannot be displayed with any available font, or cannot
6821 be encoded by the terminal's coding system. Its value should be one
6822 of the above display methods, except @code{zero-width} or a cons cell.
6823
6824 If a character has a non-@code{nil} entry in an active display table,
6825 the display table takes effect; in this case, Emacs does not consult
6826 @code{glyphless-char-display} at all.
6827 @end defvar
6828
6829 @defopt glyphless-char-display-control
6830 This user option provides a convenient way to set
6831 @code{glyphless-char-display} for groups of similar characters. Do
6832 not set its value directly from Lisp code; the value takes effect only
6833 via a custom @code{:set} function (@pxref{Variable Definitions}),
6834 which updates @code{glyphless-char-display}.
6835
6836 Its value should be an alist of elements @code{(@var{group}
6837 . @var{method})}, where @var{group} is a symbol specifying a group of
6838 characters, and @var{method} is a symbol specifying how to display
6839 them.
6840
6841 @var{group} should be one of the following:
6842
6843 @table @code
6844 @item c0-control
6845 @acronym{ASCII} control characters @code{U+0000} to @code{U+001F},
6846 excluding the newline and tab characters (normally displayed as escape
6847 sequences like @samp{^A}; @pxref{Text Display,, How Text Is Displayed,
6848 emacs, The GNU Emacs Manual}).
6849
6850 @item c1-control
6851 Non-@acronym{ASCII}, non-printing characters @code{U+0080} to
6852 @code{U+009F} (normally displayed as octal escape sequences like
6853 @samp{\230}).
6854
6855 @item format-control
6856 Characters of Unicode General Category [Cf], such as @samp{U+200E}
6857 (Left-to-Right Mark), but excluding characters that have graphic
6858 images, such as @samp{U+00AD} (Soft Hyphen).
6859
6860 @item no-font
6861 Characters for there is no suitable font, or which cannot be encoded
6862 by the terminal's coding system.
6863 @end table
6864
6865 @c FIXME: this can also be 'acronym', but that's not currently
6866 @c completely implemented; it applies only to the format-control
6867 @c group, and only works if the acronym is in 'char-acronym-table'.
6868 The @var{method} symbol should be one of @code{zero-width},
6869 @code{thin-space}, @code{empty-box}, or @code{hex-code}. These have
6870 the same meanings as in @code{glyphless-char-display}, above.
6871 @end defopt
6872
6873 @node Beeping
6874 @section Beeping
6875 @cindex bell
6876
6877 This section describes how to make Emacs ring the bell (or blink the
6878 screen) to attract the user's attention. Be conservative about how
6879 often you do this; frequent bells can become irritating. Also be
6880 careful not to use just beeping when signaling an error is more
6881 appropriate (@pxref{Errors}).
6882
6883 @defun ding &optional do-not-terminate
6884 @cindex keyboard macro termination
6885 This function beeps, or flashes the screen (see @code{visible-bell} below).
6886 It also terminates any keyboard macro currently executing unless
6887 @var{do-not-terminate} is non-@code{nil}.
6888 @end defun
6889
6890 @defun beep &optional do-not-terminate
6891 This is a synonym for @code{ding}.
6892 @end defun
6893
6894 @defopt visible-bell
6895 This variable determines whether Emacs should flash the screen to
6896 represent a bell. Non-@code{nil} means yes, @code{nil} means no.
6897 This is effective on graphical displays, and on text terminals
6898 provided the terminal's Termcap entry defines the visible bell
6899 capability (@samp{vb}).
6900 @end defopt
6901
6902 @defvar ring-bell-function
6903 If this is non-@code{nil}, it specifies how Emacs should ring the
6904 bell. Its value should be a function of no arguments. If this is
6905 non-@code{nil}, it takes precedence over the @code{visible-bell}
6906 variable.
6907 @end defvar
6908
6909 @node Window Systems
6910 @section Window Systems
6911
6912 Emacs works with several window systems, most notably the X Window
6913 System. Both Emacs and X use the term ``window'', but use it
6914 differently. An Emacs frame is a single window as far as X is
6915 concerned; the individual Emacs windows are not known to X at all.
6916
6917 @defvar window-system
6918 This terminal-local variable tells Lisp programs what window system
6919 Emacs is using for displaying the frame. The possible values are
6920
6921 @table @code
6922 @item x
6923 @cindex X Window System
6924 Emacs is displaying the frame using X.
6925 @item w32
6926 Emacs is displaying the frame using native MS-Windows GUI.
6927 @item ns
6928 Emacs is displaying the frame using the Nextstep interface (used on
6929 GNUstep and Mac OS X).
6930 @item pc
6931 Emacs is displaying the frame using MS-DOS direct screen writes.
6932 @item nil
6933 Emacs is displaying the frame on a character-based terminal.
6934 @end table
6935 @end defvar
6936
6937 @defvar initial-window-system
6938 This variable holds the value of @code{window-system} used for the
6939 first frame created by Emacs during startup. (When Emacs is invoked
6940 with the @option{--daemon} option, it does not create any initial
6941 frames, so @code{initial-window-system} is @code{nil}, except on
6942 MS-Windows, where it is still @code{w32}. @xref{Initial Options,
6943 daemon,, emacs, The GNU Emacs Manual}.)
6944 @end defvar
6945
6946 @defun window-system &optional frame
6947 This function returns a symbol whose name tells what window system is
6948 used for displaying @var{frame} (which defaults to the currently
6949 selected frame). The list of possible symbols it returns is the same
6950 one documented for the variable @code{window-system} above.
6951 @end defun
6952
6953 Do @emph{not} use @code{window-system} and
6954 @code{initial-window-system} as predicates or boolean flag variables,
6955 if you want to write code that works differently on text terminals and
6956 graphic displays. That is because @code{window-system} is not a good
6957 indicator of Emacs capabilities on a given display type. Instead, use
6958 @code{display-graphic-p} or any of the other @code{display-*-p}
6959 predicates described in @ref{Display Feature Testing}.
6960
6961 @node Bidirectional Display
6962 @section Bidirectional Display
6963 @cindex bidirectional display
6964 @cindex right-to-left text
6965
6966 Emacs can display text written in scripts, such as Arabic, Farsi,
6967 and Hebrew, whose natural ordering for horizontal text display runs
6968 from right to left. Furthermore, segments of Latin script and digits
6969 embedded in right-to-left text are displayed left-to-right, while
6970 segments of right-to-left script embedded in left-to-right text
6971 (e.g., Arabic or Hebrew text in comments or strings in a program
6972 source file) are appropriately displayed right-to-left. We call such
6973 mixtures of left-to-right and right-to-left text @dfn{bidirectional
6974 text}. This section describes the facilities and options for editing
6975 and displaying bidirectional text.
6976
6977 @cindex logical order
6978 @cindex reading order
6979 @cindex visual order
6980 @cindex unicode bidirectional algorithm
6981 @cindex UBA
6982 @cindex bidirectional reordering
6983 @cindex reordering, of bidirectional text
6984 Text is stored in Emacs buffers and strings in @dfn{logical} (or
6985 @dfn{reading}) order, i.e., the order in which a human would read
6986 each character. In right-to-left and bidirectional text, the order in
6987 which characters are displayed on the screen (called @dfn{visual
6988 order}) is not the same as logical order; the characters' screen
6989 positions do not increase monotonically with string or buffer
6990 position. In performing this @dfn{bidirectional reordering}, Emacs
6991 follows the Unicode Bidirectional Algorithm (a.k.a.@: @acronym{UBA}),
6992 which is described in Annex #9 of the Unicode standard
6993 (@url{http://www.unicode.org/reports/tr9/}). Emacs provides a ``Full
6994 Bidirectionality'' class implementation of the @acronym{UBA},
6995 consistent with the requirements of the Unicode Standard v8.0.
6996
6997 @defvar bidi-display-reordering
6998 If the value of this buffer-local variable is non-@code{nil} (the
6999 default), Emacs performs bidirectional reordering for display. The
7000 reordering affects buffer text, as well as display strings and overlay
7001 strings from text and overlay properties in the buffer (@pxref{Overlay
7002 Properties}, and @pxref{Display Property}). If the value is
7003 @code{nil}, Emacs does not perform bidirectional reordering in the
7004 buffer.
7005
7006 The default value of @code{bidi-display-reordering} controls the
7007 reordering of strings which are not directly supplied by a buffer,
7008 including the text displayed in mode lines (@pxref{Mode Line Format})
7009 and header lines (@pxref{Header Lines}).
7010 @end defvar
7011
7012 @cindex unibyte buffers, and bidi reordering
7013 Emacs never reorders the text of a unibyte buffer, even if
7014 @code{bidi-display-reordering} is non-@code{nil} in the buffer. This
7015 is because unibyte buffers contain raw bytes, not characters, and thus
7016 lack the directionality properties required for reordering.
7017 Therefore, to test whether text in a buffer will be reordered for
7018 display, it is not enough to test the value of
7019 @code{bidi-display-reordering} alone. The correct test is this:
7020
7021 @example
7022 (if (and enable-multibyte-characters
7023 bidi-display-reordering)
7024 ;; Buffer is being reordered for display
7025 )
7026 @end example
7027
7028 However, unibyte display and overlay strings @emph{are} reordered if
7029 their parent buffer is reordered. This is because plain-@sc{ascii}
7030 strings are stored by Emacs as unibyte strings. If a unibyte display
7031 or overlay string includes non-@sc{ascii} characters, these characters
7032 are assumed to have left-to-right direction.
7033
7034 @cindex display properties, and bidi reordering of text
7035 Text covered by @code{display} text properties, by overlays with
7036 @code{display} properties whose value is a string, and by any other
7037 properties that replace buffer text, is treated as a single unit when
7038 it is reordered for display. That is, the entire chunk of text
7039 covered by these properties is reordered together. Moreover, the
7040 bidirectional properties of the characters in such a chunk of text are
7041 ignored, and Emacs reorders them as if they were replaced with a
7042 single character @code{U+FFFC}, known as the @dfn{Object Replacement
7043 Character}. This means that placing a display property over a portion
7044 of text may change the way that the surrounding text is reordered for
7045 display. To prevent this unexpected effect, always place such
7046 properties on text whose directionality is identical with text that
7047 surrounds it.
7048
7049 @cindex base direction of a paragraph
7050 Each paragraph of bidirectional text has a @dfn{base direction},
7051 either right-to-left or left-to-right. Left-to-right paragraphs are
7052 displayed beginning at the left margin of the window, and are
7053 truncated or continued when the text reaches the right margin.
7054 Right-to-left paragraphs are displayed beginning at the right margin,
7055 and are continued or truncated at the left margin.
7056
7057 By default, Emacs determines the base direction of each paragraph by
7058 looking at the text at its beginning. The precise method of
7059 determining the base direction is specified by the @acronym{UBA}; in a
7060 nutshell, the first character in a paragraph that has an explicit
7061 directionality determines the base direction of the paragraph.
7062 However, sometimes a buffer may need to force a certain base direction
7063 for its paragraphs. For example, buffers containing program source
7064 code should force all paragraphs to be displayed left-to-right. You
7065 can use following variable to do this:
7066
7067 @defvar bidi-paragraph-direction
7068 If the value of this buffer-local variable is the symbol
7069 @code{right-to-left} or @code{left-to-right}, all paragraphs in the
7070 buffer are assumed to have that specified direction. Any other value
7071 is equivalent to @code{nil} (the default), which means to determine
7072 the base direction of each paragraph from its contents.
7073
7074 @cindex @code{prog-mode}, and @code{bidi-paragraph-direction}
7075 Modes for program source code should set this to @code{left-to-right}.
7076 Prog mode does this by default, so modes derived from Prog mode do not
7077 need to set this explicitly (@pxref{Basic Major Modes}).
7078 @end defvar
7079
7080 @defun current-bidi-paragraph-direction &optional buffer
7081 This function returns the paragraph direction at point in the named
7082 @var{buffer}. The returned value is a symbol, either
7083 @code{left-to-right} or @code{right-to-left}. If @var{buffer} is
7084 omitted or @code{nil}, it defaults to the current buffer. If the
7085 buffer-local value of the variable @code{bidi-paragraph-direction} is
7086 non-@code{nil}, the returned value will be identical to that value;
7087 otherwise, the returned value reflects the paragraph direction
7088 determined dynamically by Emacs. For buffers whose value of
7089 @code{bidi-display-reordering} is @code{nil} as well as unibyte
7090 buffers, this function always returns @code{left-to-right}.
7091 @end defun
7092
7093 @cindex visual-order cursor motion
7094 Sometimes there's a need to move point in strict visual order,
7095 either to the left or to the right of its current screen position.
7096 Emacs provides a primitive to do that.
7097
7098 @defun move-point-visually direction
7099 This function moves point of the currently selected window to the
7100 buffer position that appears immediately to the right or to the left
7101 of point on the screen. If @var{direction} is positive, point will
7102 move one screen position to the right, otherwise it will move one
7103 screen position to the left. Note that, depending on the surrounding
7104 bidirectional context, this could potentially move point many buffer
7105 positions away. If invoked at the end of a screen line, the function
7106 moves point to the rightmost or leftmost screen position of the next
7107 or previous screen line, as appropriate for the value of
7108 @var{direction}.
7109
7110 The function returns the new buffer position as its value.
7111 @end defun
7112
7113 @cindex layout on display, and bidirectional text
7114 @cindex jumbled display of bidirectional text
7115 @cindex concatenating bidirectional strings
7116 Bidirectional reordering can have surprising and unpleasant effects
7117 when two strings with bidirectional content are juxtaposed in a
7118 buffer, or otherwise programmatically concatenated into a string of
7119 text. A typical problematic case is when a buffer consists of
7120 sequences of text fields separated by whitespace or punctuation
7121 characters, like Buffer Menu mode or Rmail Summary Mode. Because the
7122 punctuation characters used as separators have @dfn{weak
7123 directionality}, they take on the directionality of surrounding text.
7124 As result, a numeric field that follows a field with bidirectional
7125 content can be displayed @emph{to the left} of the preceding field,
7126 messing up the expected layout. There are several ways to avoid this
7127 problem:
7128
7129 @itemize @minus
7130 @item
7131 Append the special character @code{U+200E}, LEFT-TO-RIGHT MARK, or
7132 @acronym{LRM}, to the end of each field that may have bidirectional
7133 content, or prepend it to the beginning of the following field. The
7134 function @code{bidi-string-mark-left-to-right}, described below, comes
7135 in handy for this purpose. (In a right-to-left paragraph, use
7136 @code{U+200F}, RIGHT-TO-LEFT MARK, or @acronym{RLM}, instead.) This
7137 is one of the solutions recommended by the UBA.
7138
7139 @item
7140 Include the tab character in the field separator. The tab character
7141 plays the role of @dfn{segment separator} in bidirectional reordering,
7142 causing the text on either side to be reordered separately.
7143
7144 @cindex @code{space} display spec, and bidirectional text
7145 @item
7146 Separate fields with a @code{display} property or overlay with a
7147 property value of the form @code{(space . PROPS)} (@pxref{Specified
7148 Space}). Emacs treats this display specification as a @dfn{paragraph
7149 separator}, and reorders the text on either side separately.
7150 @end itemize
7151
7152 @defun bidi-string-mark-left-to-right string
7153 This function returns its argument @var{string}, possibly modified,
7154 such that the result can be safely concatenated with another string,
7155 or juxtaposed with another string in a buffer, without disrupting the
7156 relative layout of this string and the next one on display. If the
7157 string returned by this function is displayed as part of a
7158 left-to-right paragraph, it will always appear on display to the left
7159 of the text that follows it. The function works by examining the
7160 characters of its argument, and if any of those characters could cause
7161 reordering on display, the function appends the @acronym{LRM}
7162 character to the string. The appended @acronym{LRM} character is made
7163 invisible by giving it an @code{invisible} text property of @code{t}
7164 (@pxref{Invisible Text}).
7165 @end defun
7166
7167 The reordering algorithm uses the bidirectional properties of the
7168 characters stored as their @code{bidi-class} property
7169 (@pxref{Character Properties}). Lisp programs can change these
7170 properties by calling the @code{put-char-code-property} function.
7171 However, doing this requires a thorough understanding of the
7172 @acronym{UBA}, and is therefore not recommended. Any changes to the
7173 bidirectional properties of a character have global effect: they
7174 affect all Emacs frames and windows.
7175
7176 Similarly, the @code{mirroring} property is used to display the
7177 appropriate mirrored character in the reordered text. Lisp programs
7178 can affect the mirrored display by changing this property. Again, any
7179 such changes affect all of Emacs display.
7180
7181 @cindex overriding bidirectional properties
7182 @cindex directional overrides
7183 @cindex LRO
7184 @cindex RLO
7185 The bidirectional properties of characters can be overridden by
7186 inserting into the text special directional control characters,
7187 LEFT-TO-RIGHT OVERRIDE (@acronym{LRO}) and RIGHT-TO-LEFT OVERRIDE
7188 (@acronym{RLO}). Any characters between a @acronym{RLO} and the
7189 following newline or POP DIRECTIONAL FORMATTING (@acronym{PDF})
7190 control character, whichever comes first, will be displayed as if they
7191 were strong right-to-left characters, i.e.@: they will be reversed on
7192 display. Similarly, any characters between @acronym{LRO} and
7193 @acronym{PDF} or newline will display as if they were strong
7194 left-to-right, and will @emph{not} be reversed even if they are strong
7195 right-to-left characters.
7196
7197 @cindex phishing using directional overrides
7198 @cindex malicious use of directional overrides
7199 These overrides are useful when you want to make some text
7200 unaffected by the reordering algorithm, and instead directly control
7201 the display order. But they can also be used for malicious purposes,
7202 known as @dfn{phishing}. Specifically, a URL on a Web page or a link
7203 in an email message can be manipulated to make its visual appearance
7204 unrecognizable, or similar to some popular benign location, while the
7205 real location, interpreted by a browser in the logical order, is very
7206 different.
7207
7208 Emacs provides a primitive that applications can use to detect
7209 instances of text whose bidirectional properties were overridden so as
7210 to make a left-to-right character display as if it were a
7211 right-to-left character, or vise versa.
7212
7213 @defun bidi-find-overridden-directionality from to &optional object
7214 This function looks at the text of the specified @var{object} between
7215 positions @var{from} (inclusive) and @var{to} (exclusive), and returns
7216 the first position where it finds a strong left-to-right character
7217 whose directional properties were forced to display the character as
7218 right-to-left, or for a strong right-to-left character that was forced
7219 to display as left-to-right. If it finds no such characters in the
7220 specified region of text, it returns @code{nil}.
7221
7222 The optional argument @var{object} specifies which text to search, and
7223 defaults to the current buffer. If @var{object} is non-@code{nil}, it
7224 can be some other buffer, or it can be a string or a window. If it is
7225 a string, the function searches that string. If it is a window, the
7226 function searches the buffer displayed in that window. If a buffer
7227 whose text you want to examine is displayed in some window, we
7228 recommend to specify it by that window, rather than pass the buffer to
7229 the function. This is because telling the function about the window
7230 allows it to correctly account for window-specific overlays, which
7231 might change the result of the function if some text in the buffer is
7232 covered by overlays.
7233 @end defun
7234
7235 @cindex copying bidirectional text, preserve visual order
7236 @cindex visual order, preserve when copying bidirectional text
7237 When text that includes mixed right-to-left and left-to-right
7238 characters and bidirectional controls is copied into a different
7239 location, it can change its visual appearance, and also can affect the
7240 visual appearance of the surrounding text at destination. This is
7241 because reordering of bidirectional text specified by the
7242 @acronym{UBA} has non-trivial context-dependent effects both on the
7243 copied text and on the text at copy destination that will surround it.
7244
7245 Sometimes, a Lisp program may need to preserve the exact visual
7246 appearance of the copied text at destination, and of the text that
7247 surrounds the copy. Lisp programs can use the following function to
7248 achieve that effect.
7249
7250 @defun buffer-substring-with-bidi-context start end &optional no-properties
7251 This function works similar to @code{buffer-substring} (@pxref{Buffer
7252 Contents}), but it prepends and appends to the copied text bidi
7253 directional control characters necessary to preserve the visual
7254 appearance of the text when it is inserted at another place. Optional
7255 argument @var{no-properties}, if non-@code{nil}, means remove the text
7256 properties from the copy of the text.
7257 @end defun