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