428
+ − 1 @c -*-texinfo-*-
+ − 2 @c This is part of the XEmacs Lisp Reference Manual.
444
+ − 3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1998 Free Software Foundation, Inc.
428
+ − 4 @c See the file lispref.texi for copying conditions.
+ − 5 @setfilename ../../info/display.info
+ − 6 @node Display, Hash Tables, Annotations, Top
+ − 7 @chapter Emacs Display
+ − 8
+ − 9 This chapter describes a number of other features related to the display
+ − 10 that XEmacs presents to the user.
+ − 11
+ − 12 @menu
+ − 13 * Refresh Screen:: Clearing the screen and redrawing everything on it.
+ − 14 * Truncation:: Folding or wrapping long text lines.
+ − 15 * The Echo Area:: Where messages are displayed.
+ − 16 * Warnings:: Display of Warnings.
+ − 17 * Invisible Text:: Hiding part of the buffer text.
+ − 18 * Selective Display:: Hiding part of the buffer text (the old way).
+ − 19 * Overlay Arrow:: Display of an arrow to indicate position.
+ − 20 * Temporary Displays:: Displays that go away automatically.
+ − 21 * Blinking:: How XEmacs shows the matching open parenthesis.
+ − 22 * Usual Display:: The usual conventions for displaying nonprinting chars.
+ − 23 * Display Tables:: How to specify other conventions.
+ − 24 * Beeping:: Audible signal to the user.
+ − 25 @end menu
+ − 26
+ − 27 @node Refresh Screen
+ − 28 @section Refreshing the Screen
+ − 29
+ − 30 The function @code{redraw-frame} redisplays the entire contents of a
+ − 31 given frame. @xref{Frames}.
+ − 32
444
+ − 33 @defun redraw-frame &optional frame no-preempt
428
+ − 34 This function clears and redisplays frame @var{frame}.
444
+ − 35
+ − 36 @var{frame} defaults to the selected frame if omitted.
+ − 37
+ − 38 Normally, redisplay is preempted as normal if input arrives. However,
+ − 39 if optional second arg @var{no-preempt} is non-@code{nil}, redisplay
+ − 40 will not stop for input and is guaranteed to proceed to completion.
428
+ − 41 @end defun
+ − 42
+ − 43 Even more powerful is @code{redraw-display}:
+ − 44
+ − 45 @deffn Command redraw-display &optional device
+ − 46 This function redraws all frames on @var{device} marked as having their
+ − 47 image garbled. @var{device} defaults to the selected device. If
+ − 48 @var{device} is @code{t}, all devices will have their frames checked.
+ − 49 @end deffn
+ − 50
+ − 51 Processing user input takes absolute priority over redisplay. If you
+ − 52 call these functions when input is available, they do nothing
+ − 53 immediately, but a full redisplay does happen eventually---after all the
+ − 54 input has been processed.
+ − 55
+ − 56 Normally, suspending and resuming XEmacs also refreshes the screen.
+ − 57 Some terminal emulators record separate contents for display-oriented
+ − 58 programs such as XEmacs and for ordinary sequential display. If you are
+ − 59 using such a terminal, you might want to inhibit the redisplay on
+ − 60 resumption. @xref{Suspending XEmacs}.
+ − 61
+ − 62 @defvar no-redraw-on-reenter
+ − 63 @cindex suspend (cf. @code{no-redraw-on-reenter})
+ − 64 @cindex resume (cf. @code{no-redraw-on-reenter})
+ − 65 This variable controls whether XEmacs redraws the entire screen after it
+ − 66 has been suspended and resumed. Non-@code{nil} means yes, @code{nil}
+ − 67 means no.
+ − 68 @end defvar
+ − 69
+ − 70 @cindex display update
+ − 71 @cindex update display
+ − 72 @cindex refresh display
+ − 73 The above functions do not actually cause the display to be updated;
+ − 74 rather, they clear out the internal display records that XEmacs
+ − 75 maintains, so that the next time the display is updated it will be
+ − 76 redrawn from scratch. Normally this occurs the next time that
+ − 77 @code{next-event} or @code{sit-for} is called; however, a display update
+ − 78 will not occur if there is input pending. @xref{Command Loop}.
+ − 79
444
+ − 80 @defun force-cursor-redisplay &optional frame
+ − 81 This function causes an immediate update of the cursor on @var{frame},
+ − 82 which defaults to the selected frame.
428
+ − 83 @end defun
+ − 84
+ − 85 @node Truncation
+ − 86 @section Truncation
+ − 87 @cindex line wrapping
+ − 88 @cindex continuation lines
+ − 89 @cindex @samp{$} in display
+ − 90 @cindex @samp{\} in display
+ − 91
+ − 92 When a line of text extends beyond the right edge of a window, the
+ − 93 line can either be truncated or continued on the next line. When a line
+ − 94 is truncated, this is normally shown with a @samp{\} in the rightmost
+ − 95 column of the window on X displays, and with a @samp{$} on TTY devices.
+ − 96 When a line is continued or ``wrapped'' onto the next line, this is
+ − 97 shown with a curved arrow in the rightmost column of the window (or with
+ − 98 a @samp{\} on TTY devices). The additional screen lines used to display
+ − 99 a long text line are called @dfn{continuation} lines.
+ − 100
+ − 101 Normally, whenever line truncation is in effect for a particular
+ − 102 window, a horizontal scrollbar is displayed in that window if the
+ − 103 device supports scrollbars. @xref{Scrollbars}.
+ − 104
+ − 105 Note that continuation is different from filling; continuation happens
+ − 106 on the screen only, not in the buffer contents, and it breaks a line
+ − 107 precisely at the right margin, not at a word boundary. @xref{Filling}.
+ − 108
+ − 109 @defopt truncate-lines
+ − 110 This buffer-local variable controls how XEmacs displays lines that
+ − 111 extend beyond the right edge of the window. If it is non-@code{nil},
+ − 112 then XEmacs does not display continuation lines; rather each line of
+ − 113 text occupies exactly one screen line, and a backslash appears at the
+ − 114 edge of any line that extends to or beyond the edge of the window. The
+ − 115 default is @code{nil}.
+ − 116
+ − 117 If the variable @code{truncate-partial-width-windows} is non-@code{nil},
+ − 118 then truncation is always used for side-by-side windows (within one
+ − 119 frame) regardless of the value of @code{truncate-lines}.
+ − 120 @end defopt
+ − 121
+ − 122 @defopt default-truncate-lines
+ − 123 This variable is the default value for @code{truncate-lines}, for
+ − 124 buffers that do not have local values for it.
+ − 125 @end defopt
+ − 126
+ − 127 @defopt truncate-partial-width-windows
+ − 128 This variable controls display of lines that extend beyond the right
+ − 129 edge of the window, in side-by-side windows (@pxref{Splitting Windows}).
+ − 130 If it is non-@code{nil}, these lines are truncated; otherwise,
+ − 131 @code{truncate-lines} says what to do with them.
+ − 132 @end defopt
+ − 133
+ − 134 The backslash and curved arrow used to indicate truncated or continued
+ − 135 lines are only defaults, and can be changed. These images are actually
+ − 136 glyphs (@pxref{Glyphs}). XEmacs provides a great deal of flexibility
+ − 137 in how glyphs can be controlled. (This differs from FSF Emacs, which
+ − 138 uses display tables to control these images.)
+ − 139
+ − 140 For details, @ref{Redisplay Glyphs}.
+ − 141
+ − 142 @ignore Not yet in XEmacs
+ − 143 If your buffer contains @strong{very} long lines, and you use
+ − 144 continuation to display them, just thinking about them can make Emacs
+ − 145 redisplay slow. The column computation and indentation functions also
+ − 146 become slow. Then you might find it advisable to set
+ − 147 @code{cache-long-line-scans} to @code{t}.
+ − 148
+ − 149 @defvar cache-long-line-scans
+ − 150 If this variable is non-@code{nil}, various indentation and motion
+ − 151 functions, and Emacs redisplay, cache the results of scanning the
+ − 152 buffer, and consult the cache to avoid rescanning regions of the buffer
+ − 153 unless they are modified.
+ − 154
+ − 155 Turning on the cache slows down processing of short lines somewhat.
+ − 156
+ − 157 This variable is automatically local in every buffer.
+ − 158 @end defvar
+ − 159 @end ignore
+ − 160
+ − 161 @node The Echo Area
+ − 162 @section The Echo Area
+ − 163 @cindex error display
+ − 164 @cindex echo area
+ − 165
+ − 166 The @dfn{echo area} is used for displaying messages made with the
+ − 167 @code{message} primitive, and for echoing keystrokes. It is not the
+ − 168 same as the minibuffer, despite the fact that the minibuffer appears
+ − 169 (when active) in the same place on the screen as the echo area. The
446
+ − 170 @cite{XEmacs Lisp Reference Manual} specifies the rules for resolving conflicts
428
+ − 171 between the echo area and the minibuffer for use of that screen space
446
+ − 172 (@pxref{Minibuffer,, The Minibuffer, xemacs, The XEmacs Lisp Reference Manual}).
1703
+ − 173 Such a conflicts may be avoided at all as described in @ref{Customizing Message
+ − 174 Display}.
+ − 175
428
+ − 176 Error messages appear in the echo area; see @ref{Errors}.
+ − 177
+ − 178 You can write output in the echo area by using the Lisp printing
+ − 179 functions with @code{t} as the stream (@pxref{Output Functions}), or as
+ − 180 follows:
+ − 181
+ − 182 @defun message string &rest arguments
+ − 183 This function displays a one-line message in the echo area. The
+ − 184 argument @var{string} is similar to a C language @code{printf} control
+ − 185 string. See @code{format} in @ref{String Conversion}, for the details
+ − 186 on the conversion specifications. @code{message} returns the
+ − 187 constructed string.
+ − 188
+ − 189 In batch mode, @code{message} prints the message text on the standard
+ − 190 error stream, followed by a newline.
+ − 191
+ − 192 @c Emacs 19 feature
+ − 193 If @var{string} is @code{nil}, @code{message} clears the echo area. If
+ − 194 the minibuffer is active, this brings the minibuffer contents back onto
+ − 195 the screen immediately.
+ − 196
+ − 197 @example
+ − 198 @group
+ − 199 (message "Minibuffer depth is %d."
+ − 200 (minibuffer-depth))
+ − 201 @print{} Minibuffer depth is 0.
+ − 202 @result{} "Minibuffer depth is 0."
+ − 203 @end group
+ − 204
+ − 205 @group
+ − 206 ---------- Echo Area ----------
+ − 207 Minibuffer depth is 0.
+ − 208 ---------- Echo Area ----------
+ − 209 @end group
+ − 210 @end example
+ − 211 @end defun
+ − 212
+ − 213 In addition to only displaying a message, XEmacs allows you to
+ − 214 @dfn{label} your messages, giving you fine-grained control of their
+ − 215 display. Message label is a symbol denoting the message type. Some
+ − 216 standard labels are:
+ − 217
+ − 218 @itemize @bullet
+ − 219 @item @code{message}---default label used by the @code{message}
+ − 220 function;
+ − 221
+ − 222 @item @code{error}---default label used for reporting errors;
+ − 223
+ − 224 @item @code{progress}---progress indicators like
+ − 225 @samp{Converting... 45%} (not logged by default);
+ − 226
444
+ − 227 @item @code{prompt}---prompt-like messages like @samp{Isearch: foo} (not
428
+ − 228 logged by default);
+ − 229
444
+ − 230 @item @code{command}---helper command messages like @samp{Mark set} (not
428
+ − 231 logged by default);
+ − 232
+ − 233 @item @code{no-log}---messages that should never be logged
+ − 234 @end itemize
+ − 235
444
+ − 236 Several messages may be stacked in the echo area at once. Lisp programs
428
+ − 237 may access these messages, or remove them as appropriate, via the
+ − 238 message stack.
+ − 239
+ − 240 @defun display-message label message &optional frame stdout-p
+ − 241 This function displays @var{message} (a string) labeled as @var{label},
+ − 242 as described above.
+ − 243
+ − 244 The @var{frame} argument specifies the frame to whose minibuffer the
+ − 245 message should be printed. This is currently unimplemented. The
+ − 246 @var{stdout-p} argument is used internally.
+ − 247
+ − 248 @example
+ − 249 (display-message 'command "Mark set")
+ − 250 @end example
+ − 251 @end defun
+ − 252
+ − 253 @defun lmessage label string &rest arguments
+ − 254 This function displays a message @var{string} with label @var{label}.
+ − 255 It is similar to @code{message} in that it accepts a @code{printf}-like
+ − 256 strings and any number of arguments.
+ − 257
+ − 258 @example
+ − 259 @group
+ − 260 ;; @r{Display a command message.}
+ − 261 (lmessage 'command "Comment column set to %d" comment-column)
+ − 262 @end group
+ − 263
+ − 264 @group
+ − 265 ;; @r{Display a progress message.}
+ − 266 (lmessage 'progress "Fontifying %s... (%d)" buffer percentage)
+ − 267 @end group
+ − 268
+ − 269 @group
+ − 270 ;; @r{Display a message that should not be logged.}
+ − 271 (lmessage 'no-log "Done")
+ − 272 @end group
+ − 273 @end example
+ − 274 @end defun
+ − 275
+ − 276 @defun clear-message &optional label frame stdout-p no-restore
+ − 277 This function remove any message with the given @var{label}
+ − 278 from the message-stack, erasing it from the echo area if it's currently
+ − 279 displayed there.
+ − 280
+ − 281 If a message remains at the head of the message-stack and
+ − 282 @var{no-restore} is @code{nil}, it will be displayed. The string which
+ − 283 remains in the echo area will be returned, or @code{nil} if the
444
+ − 284 message-stack is now empty. If @var{label} is @code{nil}, the entire
428
+ − 285 message-stack is cleared.
+ − 286
+ − 287 @example
+ − 288 ;; @r{Show a message, wait for 2 seconds, and restore old minibuffer}
+ − 289 ;; @r{contents.}
+ − 290 (message "A message")
+ − 291 @print{} A message
+ − 292 @result{} "A Message"
+ − 293 (lmessage 'my-label "Newsflash! Newsflash!")
+ − 294 @print{} Newsflash! Newsflash!
+ − 295 @result{} "Newsflash! Newsflash!"
+ − 296 (sit-for 2)
+ − 297 (clear-message 'my-label)
+ − 298 @print{} A message
+ − 299 @result{} "A message"
+ − 300 @end example
+ − 301
+ − 302 Unless you need the return value or you need to specify a label,
+ − 303 you should just use @code{(message nil)}.
+ − 304 @end defun
+ − 305
+ − 306 @defun current-message &optional frame
+ − 307 This function returns the current message in the echo area, or
+ − 308 @code{nil}. The @var{frame} argument is currently unused.
+ − 309 @end defun
+ − 310
+ − 311 Some of the messages displayed in the echo area are also recorded in the
+ − 312 @samp{ *Message-Log*} buffer. Exactly which messages will be recorded
+ − 313 can be tuned using the following variables.
+ − 314
+ − 315 @defopt log-message-max-size
+ − 316 This variable specifies the maximum size of the @samp{ *Message-log*}
+ − 317 buffer.
+ − 318 @end defopt
+ − 319
+ − 320 @defvar log-message-ignore-labels
+ − 321 This variable specifies the labels whose messages will not be logged.
+ − 322 It should be a list of symbols.
+ − 323 @end defvar
+ − 324
+ − 325 @defvar log-message-ignore-regexps
+ − 326 This variable specifies the regular expressions matching messages that
+ − 327 will not be logged. It should be a list of regular expressions.
+ − 328
+ − 329 Normally, packages that generate messages that might need to be ignored
+ − 330 should label them with @code{progress}, @code{prompt}, or @code{no-log},
+ − 331 so they can be filtered by @code{log-message-ignore-labels}.
+ − 332 @end defvar
+ − 333
+ − 334 @defvar echo-keystrokes
+ − 335 This variable determines how much time should elapse before command
+ − 336 characters echo. Its value must be a number, which specifies the number
+ − 337 of seconds to wait before echoing. If the user types a prefix key (such
+ − 338 as @kbd{C-x}) and then delays this many seconds before continuing, the
+ − 339 prefix key is echoed in the echo area. Any subsequent characters in the
+ − 340 same command will be echoed as well.
+ − 341
+ − 342 If the value is zero, then command input is not echoed.
+ − 343 @end defvar
+ − 344
+ − 345 @defvar cursor-in-echo-area
+ − 346 This variable controls where the cursor appears when a message is
+ − 347 displayed in the echo area. If it is non-@code{nil}, then the cursor
+ − 348 appears at the end of the message. Otherwise, the cursor appears at
+ − 349 point---not in the echo area at all.
+ − 350
+ − 351 The value is normally @code{nil}; Lisp programs bind it to @code{t}
+ − 352 for brief periods of time.
+ − 353 @end defvar
+ − 354
1703
+ − 355 @menu
+ − 356 * Customizing Message Display::
+ − 357 @end menu
+ − 358
+ − 359 @node Customizing Message Display
+ − 360 @subsection Customizing Message Display
+ − 361
+ − 362 Message display function specify message intended for echo area by
+ − 363 putting message text into @code{" *Echo Area*"} buffer. When event
+ − 364 loop code decides to update display after displaying the message, text
+ − 365 of this buffer is erased. How exactly the text will be displayed may
+ − 366 be affected by the following.
+ − 367
+ − 368 @findex redisplay-echo-area
+ − 369 @defvar redisplay-echo-area-function
+ − 370 The function called to display echo area text. The default variable
+ − 371 value, @code{redisplay-echo-area} function, does that by displaying
+ − 372 the text in the same place on the screen as the echo area. So does
+ − 373 other redisplay code. User code can avoid this regardless of what
+ − 374 redisplay code will run afterwards by erasing text of @code{" *Echo
+ − 375 Area*"} buffer.
+ − 376 @end defvar
+ − 377
+ − 378 @defvar undisplay-echo-area-function
+ − 379 The variable value, if non-@code{nil}, is called by command loop after
+ − 380 erasing text of @code{" *Echo Area*"} buffer. It must clean up data
+ − 381 created by @code{redisplay-echo-area-function} value.
+ − 382 @end defvar
+ − 383
+ − 384 @defvar minibuffer-echo-wait-function
+ − 385 The function is called by command loop only when minibuffer was active
+ − 386 and message was displayed (text appeared in @code{" *Echo Area*"}
+ − 387 buffer). It must wait after displaying message so that user can read
+ − 388 it. By default, when the variable value is @code{nil}, the equivalent
+ − 389 of @code{(sit-for 2)} is run.
+ − 390 @end defvar
+ − 391
428
+ − 392 @node Warnings
+ − 393 @section Warnings
+ − 394
+ − 395 XEmacs contains a facility for unified display of various warnings.
+ − 396 Unlike errors, warnings are displayed in the situations when XEmacs
+ − 397 encounters a problem that is recoverable, but which should be fixed for
+ − 398 safe future operation.
+ − 399
+ − 400 For example, warnings are printed by the startup code when it encounters
+ − 401 problems with X keysyms, when there is an error in @file{.emacs}, and in
+ − 402 other problematic situations. Unlike messages, warnings are displayed
+ − 403 in a separate buffer, and include an explanatory message that may span
+ − 404 across several lines. Here is an example of how a warning is displayed:
+ − 405
+ − 406 @example
+ − 407 (1) (initialization/error) An error has occurred while loading ~/.emacs:
+ − 408
+ − 409 Symbol's value as variable is void: bogus-variable
+ − 410
+ − 411 To ensure normal operation, you should investigate the cause of the error
+ − 412 in your initialization file and remove it. Use the `-debug-init' option
+ − 413 to XEmacs to view a complete error backtrace.
+ − 414 @end example
+ − 415
+ − 416 Each warning has a @dfn{class} and a @dfn{priority level}. The class is
+ − 417 a symbol describing what sort of warning this is, such as
+ − 418 @code{initialization}, @code{resource} or @code{key-mapping}.
+ − 419
+ − 420 The warning priority level specifies how important the warning is. The
+ − 421 recognized warning levels, in increased order of priority, are:
+ − 422 @code{debug}, @code{info}, @code{notice}, @code{warning}, @code{error},
+ − 423 @code{critical}, @code{alert} and @code{emergency}.
+ − 424
+ − 425 @defun display-warning class message &optional level
+ − 426 This function displays a warning message @var{message} (a string).
+ − 427 @var{class} should be a warning class symbol, as described above, or a
+ − 428 list of such symbols. @var{level} describes the warning priority level.
+ − 429 If unspecified, it default to @code{warning}.
+ − 430
+ − 431 @example
+ − 432 @group
+ − 433 (display-warning 'resource
+ − 434 "Bad resource specification encountered:
+ − 435 something like
+ − 436
+ − 437 Emacs*foo: bar
+ − 438
+ − 439 You should replace the * with a . in order to get proper behavior when
+ − 440 you use the specifier and/or `set-face-*' functions.")
+ − 441 @end group
+ − 442
+ − 443 @group
+ − 444 ---------- Warning buffer ----------
+ − 445 (1) (resource/warning) Bad resource specification encountered:
+ − 446 something like
+ − 447
+ − 448 Emacs*foo: bar
+ − 449
+ − 450 You should replace the * with a . in order to get proper behavior when
+ − 451 you use the specifier and/or `set-face-*' functions.
+ − 452 ---------- Warning buffer ----------
+ − 453 @end group
+ − 454 @end example
+ − 455 @end defun
+ − 456
+ − 457 @defun lwarn class level message &rest args
+ − 458 This function displays a formatted labeled warning message. As above,
+ − 459 @var{class} should be the warning class symbol, or a list of such
+ − 460 symbols, and @var{level} should specify the warning priority level
+ − 461 (@code{warning} by default).
+ − 462
+ − 463 Unlike in @code{display-warning}, @var{message} may be a formatted
+ − 464 message, which will be, together with the rest of the arguments, passed
+ − 465 to @code{format}.
+ − 466
+ − 467 @example
+ − 468 (lwarn 'message-log 'warning
+ − 469 "Error caught in `remove-message-hook': %s"
+ − 470 (error-message-string e))
+ − 471 @end example
+ − 472 @end defun
+ − 473
+ − 474 @defvar log-warning-minimum-level
+ − 475 This variable specifies the minimum level of warnings that should be
+ − 476 generated. Warnings with level lower than defined by this variable are
+ − 477 completely ignored, as if they never happened.
+ − 478 @end defvar
+ − 479
+ − 480 @defvar display-warning-minimum-level
+ − 481 This variable specifies the minimum level of warnings that should be
+ − 482 displayed. Unlike @code{log-warning-minimum-level}, setting this
+ − 483 function does not suppress warnings entirely---they are still generated
+ − 484 in the @samp{*Warnings*} buffer, only they are not displayed by default.
+ − 485 @end defvar
+ − 486
+ − 487 @defvar log-warning-suppressed-classes
+ − 488 This variable specifies a list of classes that should not be logged or
+ − 489 displayed. If any of the class symbols associated with a warning is the
+ − 490 same as any of the symbols listed here, the warning will be completely
+ − 491 ignored, as it they never happened.
+ − 492 @end defvar
+ − 493
+ − 494 @defvar display-warning-suppressed-classes
+ − 495 This variable specifies a list of classes that should not be logged or
+ − 496 displayed. If any of the class symbols associated with a warning is the
+ − 497 same as any of the symbols listed here, the warning will not be
+ − 498 displayed. The warning will still logged in the *Warnings* buffer
+ − 499 (unless also contained in `log-warning-suppressed-classes'), but the
+ − 500 buffer will not be automatically popped up.
+ − 501 @end defvar
+ − 502
+ − 503 @node Invisible Text
+ − 504 @section Invisible Text
+ − 505
+ − 506 @cindex invisible text
+ − 507 You can make characters @dfn{invisible}, so that they do not appear on
+ − 508 the screen, with the @code{invisible} property. This can be either a
+ − 509 text property or a property of an overlay.
+ − 510
+ − 511 In the simplest case, any non-@code{nil} @code{invisible} property makes
+ − 512 a character invisible. This is the default case---if you don't alter
+ − 513 the default value of @code{buffer-invisibility-spec}, this is how the
+ − 514 @code{invisibility} property works. This feature is much like selective
+ − 515 display (@pxref{Selective Display}), but more general and cleaner.
+ − 516
+ − 517 More generally, you can use the variable @code{buffer-invisibility-spec}
+ − 518 to control which values of the @code{invisible} property make text
+ − 519 invisible. This permits you to classify the text into different subsets
+ − 520 in advance, by giving them different @code{invisible} values, and
+ − 521 subsequently make various subsets visible or invisible by changing the
+ − 522 value of @code{buffer-invisibility-spec}.
+ − 523
+ − 524 Controlling visibility with @code{buffer-invisibility-spec} is
+ − 525 especially useful in a program to display the list of entries in a data
+ − 526 base. It permits the implementation of convenient filtering commands to
+ − 527 view just a part of the entries in the data base. Setting this variable
+ − 528 is very fast, much faster than scanning all the text in the buffer
+ − 529 looking for properties to change.
+ − 530
+ − 531 @defvar buffer-invisibility-spec
+ − 532 This variable specifies which kinds of @code{invisible} properties
+ − 533 actually make a character invisible.
+ − 534
+ − 535 @table @asis
+ − 536 @item @code{t}
+ − 537 A character is invisible if its @code{invisible} property is
+ − 538 non-@code{nil}. This is the default.
+ − 539
+ − 540 @item a list
+ − 541 Each element of the list makes certain characters invisible.
+ − 542 Ultimately, a character is invisible if any of the elements of this list
+ − 543 applies to it. The list can have two kinds of elements:
+ − 544
+ − 545 @table @code
+ − 546 @item @var{atom}
+ − 547 A character is invisible if its @code{invisible} property value
+ − 548 is @var{atom} or if it is a list with @var{atom} as a member.
+ − 549
+ − 550 @item (@var{atom} . t)
+ − 551 A character is invisible if its @code{invisible} property value
+ − 552 is @var{atom} or if it is a list with @var{atom} as a member.
+ − 553 Moreover, if this character is at the end of a line and is followed
+ − 554 by a visible newline, it displays an ellipsis.
+ − 555 @end table
+ − 556 @end table
+ − 557 @end defvar
+ − 558
+ − 559 Ordinarily, commands that operate on text or move point do not care
+ − 560 whether the text is invisible. However, the user-level line motion
1620
+ − 561 commands explicitly ignore invisible newlines. Since this causes a
+ − 562 slow-down of these commands it is turned off by default, controlled by
+ − 563 the variable @code{line-move-ignore-invisible}.
428
+ − 564
+ − 565 @node Selective Display
+ − 566 @section Selective Display
+ − 567 @cindex selective display
+ − 568
+ − 569 @dfn{Selective display} is a pair of features that hide certain
+ − 570 lines on the screen.
+ − 571
+ − 572 The first variant, explicit selective display, is designed for use in
+ − 573 a Lisp program. The program controls which lines are hidden by altering
+ − 574 the text. Outline mode has traditionally used this variant. It has
+ − 575 been partially replaced by the invisible text feature (@pxref{Invisible
+ − 576 Text}); there is a new version of Outline mode which uses that instead.
+ − 577
+ − 578 In the second variant, the choice of lines to hide is made
+ − 579 automatically based on indentation. This variant is designed to be a
+ − 580 user-level feature.
+ − 581
+ − 582 The way you control explicit selective display is by replacing a
+ − 583 newline (control-j) with a carriage return (control-m). The text that
+ − 584 was formerly a line following that newline is now invisible. Strictly
+ − 585 speaking, it is temporarily no longer a line at all, since only newlines
+ − 586 can separate lines; it is now part of the previous line.
+ − 587
+ − 588 Selective display does not directly affect editing commands. For
+ − 589 example, @kbd{C-f} (@code{forward-char}) moves point unhesitatingly into
+ − 590 invisible text. However, the replacement of newline characters with
+ − 591 carriage return characters affects some editing commands. For example,
+ − 592 @code{next-line} skips invisible lines, since it searches only for
+ − 593 newlines. Modes that use selective display can also define commands
+ − 594 that take account of the newlines, or that make parts of the text
+ − 595 visible or invisible.
+ − 596
+ − 597 When you write a selectively displayed buffer into a file, all the
+ − 598 control-m's are output as newlines. This means that when you next read
+ − 599 in the file, it looks OK, with nothing invisible. The selective display
+ − 600 effect is seen only within XEmacs.
+ − 601
+ − 602 @defvar selective-display
+ − 603 This buffer-local variable enables selective display. This means that
444
+ − 604 lines, or portions of lines, may be made invisible.
428
+ − 605
+ − 606 @itemize @bullet
+ − 607 @item
+ − 608 If the value of @code{selective-display} is @code{t}, then any portion
+ − 609 of a line that follows a control-m is not displayed.
+ − 610
+ − 611 @item
+ − 612 If the value of @code{selective-display} is a positive integer, then
+ − 613 lines that start with more than that many columns of indentation are not
+ − 614 displayed.
+ − 615 @end itemize
+ − 616
+ − 617 When some portion of a buffer is invisible, the vertical movement
+ − 618 commands operate as if that portion did not exist, allowing a single
+ − 619 @code{next-line} command to skip any number of invisible lines.
+ − 620 However, character movement commands (such as @code{forward-char}) do
+ − 621 not skip the invisible portion, and it is possible (if tricky) to insert
+ − 622 or delete text in an invisible portion.
+ − 623
+ − 624 In the examples below, we show the @emph{display appearance} of the
+ − 625 buffer @code{foo}, which changes with the value of
+ − 626 @code{selective-display}. The @emph{contents} of the buffer do not
+ − 627 change.
+ − 628
+ − 629 @example
+ − 630 @group
+ − 631 (setq selective-display nil)
+ − 632 @result{} nil
+ − 633
+ − 634 ---------- Buffer: foo ----------
+ − 635 1 on this column
+ − 636 2on this column
+ − 637 3n this column
+ − 638 3n this column
+ − 639 2on this column
+ − 640 1 on this column
+ − 641 ---------- Buffer: foo ----------
+ − 642 @end group
+ − 643
+ − 644 @group
+ − 645 (setq selective-display 2)
+ − 646 @result{} 2
+ − 647
+ − 648 ---------- Buffer: foo ----------
+ − 649 1 on this column
+ − 650 2on this column
+ − 651 2on this column
+ − 652 1 on this column
+ − 653 ---------- Buffer: foo ----------
+ − 654 @end group
+ − 655 @end example
+ − 656 @end defvar
+ − 657
+ − 658 @defvar selective-display-ellipses
+ − 659 If this buffer-local variable is non-@code{nil}, then XEmacs displays
+ − 660 @samp{@dots{}} at the end of a line that is followed by invisible text.
+ − 661 This example is a continuation of the previous one.
+ − 662
+ − 663 @example
+ − 664 @group
+ − 665 (setq selective-display-ellipses t)
+ − 666 @result{} t
+ − 667
+ − 668 ---------- Buffer: foo ----------
+ − 669 1 on this column
+ − 670 2on this column ...
+ − 671 2on this column
+ − 672 1 on this column
+ − 673 ---------- Buffer: foo ----------
+ − 674 @end group
+ − 675 @end example
+ − 676
+ − 677 You can use a display table to substitute other text for the ellipsis
+ − 678 (@samp{@dots{}}). @xref{Display Tables}.
+ − 679 @end defvar
+ − 680
+ − 681 @node Overlay Arrow
+ − 682 @section The Overlay Arrow
+ − 683 @cindex overlay arrow
+ − 684
+ − 685 The @dfn{overlay arrow} is useful for directing the user's attention
+ − 686 to a particular line in a buffer. For example, in the modes used for
+ − 687 interface to debuggers, the overlay arrow indicates the line of code
+ − 688 about to be executed.
+ − 689
+ − 690 @defvar overlay-arrow-string
+ − 691 This variable holds the string to display to call attention to a
+ − 692 particular line, or @code{nil} if the arrow feature is not in use.
+ − 693 Despite its name, the value of this variable can be either a string
+ − 694 or a glyph (@pxref{Glyphs}).
+ − 695 @end defvar
+ − 696
+ − 697 @defvar overlay-arrow-position
+ − 698 This variable holds a marker that indicates where to display the overlay
+ − 699 arrow. It should point at the beginning of a line. The arrow text
+ − 700 appears at the beginning of that line, overlaying any text that would
+ − 701 otherwise appear. Since the arrow is usually short, and the line
+ − 702 usually begins with indentation, normally nothing significant is
+ − 703 overwritten.
+ − 704
+ − 705 The overlay string is displayed only in the buffer that this marker
+ − 706 points into. Thus, only one buffer can have an overlay arrow at any
+ − 707 given time.
+ − 708 @c !!! overlay-arrow-position: but the overlay string may remain in the display
+ − 709 @c of some other buffer until an update is required. This should be fixed
+ − 710 @c now. Is it?
+ − 711 @end defvar
+ − 712
+ − 713 You can do the same job by creating an extent with a
+ − 714 @code{begin-glyph} property. @xref{Extent Properties}.
+ − 715
+ − 716 @node Temporary Displays
+ − 717 @section Temporary Displays
+ − 718
+ − 719 Temporary displays are used by commands to put output into a buffer
+ − 720 and then present it to the user for perusal rather than for editing.
+ − 721 Many of the help commands use this feature.
+ − 722
+ − 723 @defspec with-output-to-temp-buffer buffer-name forms@dots{}
+ − 724 This function executes @var{forms} while arranging to insert any
+ − 725 output they print into the buffer named @var{buffer-name}. The buffer
+ − 726 is then shown in some window for viewing, displayed but not selected.
+ − 727
+ − 728 The string @var{buffer-name} specifies the temporary buffer, which
+ − 729 need not already exist. The argument must be a string, not a buffer.
+ − 730 The buffer is erased initially (with no questions asked), and it is
+ − 731 marked as unmodified after @code{with-output-to-temp-buffer} exits.
+ − 732
+ − 733 @code{with-output-to-temp-buffer} binds @code{standard-output} to the
+ − 734 temporary buffer, then it evaluates the forms in @var{forms}. Output
+ − 735 using the Lisp output functions within @var{forms} goes by default to
+ − 736 that buffer (but screen display and messages in the echo area, although
+ − 737 they are ``output'' in the general sense of the word, are not affected).
+ − 738 @xref{Output Functions}.
+ − 739
+ − 740 The value of the last form in @var{forms} is returned.
+ − 741
+ − 742 @example
+ − 743 @group
+ − 744 ---------- Buffer: foo ----------
+ − 745 This is the contents of foo.
+ − 746 ---------- Buffer: foo ----------
+ − 747 @end group
+ − 748
+ − 749 @group
+ − 750 (with-output-to-temp-buffer "foo"
+ − 751 (print 20)
+ − 752 (print standard-output))
+ − 753 @result{} #<buffer foo>
+ − 754
+ − 755 ---------- Buffer: foo ----------
+ − 756 20
+ − 757
+ − 758 #<buffer foo>
+ − 759
+ − 760 ---------- Buffer: foo ----------
+ − 761 @end group
+ − 762 @end example
+ − 763 @end defspec
+ − 764
+ − 765 @defvar temp-buffer-show-function
+ − 766 If this variable is non-@code{nil}, @code{with-output-to-temp-buffer}
+ − 767 calls it as a function to do the job of displaying a help buffer. The
+ − 768 function gets one argument, which is the buffer it should display.
+ − 769
+ − 770 In Emacs versions 18 and earlier, this variable was called
+ − 771 @code{temp-buffer-show-hook}.
+ − 772 @end defvar
+ − 773
+ − 774 @defun momentary-string-display string position &optional char message
+ − 775 This function momentarily displays @var{string} in the current buffer at
+ − 776 @var{position}. It has no effect on the undo list or on the buffer's
+ − 777 modification status.
+ − 778
+ − 779 The momentary display remains until the next input event. If the next
+ − 780 input event is @var{char}, @code{momentary-string-display} ignores it
+ − 781 and returns. Otherwise, that event remains buffered for subsequent use
+ − 782 as input. Thus, typing @var{char} will simply remove the string from
+ − 783 the display, while typing (say) @kbd{C-f} will remove the string from
+ − 784 the display and later (presumably) move point forward. The argument
+ − 785 @var{char} is a space by default.
+ − 786
+ − 787 The return value of @code{momentary-string-display} is not meaningful.
+ − 788
+ − 789 You can do the same job in a more general way by creating an extent
+ − 790 with a begin-glyph property. @xref{Extent Properties}.
+ − 791
+ − 792 If @var{message} is non-@code{nil}, it is displayed in the echo area
+ − 793 while @var{string} is displayed in the buffer. If it is @code{nil}, a
+ − 794 default message says to type @var{char} to continue.
+ − 795
+ − 796 In this example, point is initially located at the beginning of the
+ − 797 second line:
+ − 798
+ − 799 @example
+ − 800 @group
+ − 801 ---------- Buffer: foo ----------
+ − 802 This is the contents of foo.
+ − 803 @point{}Second line.
+ − 804 ---------- Buffer: foo ----------
+ − 805 @end group
+ − 806
+ − 807 @group
+ − 808 (momentary-string-display
+ − 809 "**** Important Message! ****"
+ − 810 (point) ?\r
+ − 811 "Type RET when done reading")
+ − 812 @result{} t
+ − 813 @end group
+ − 814
+ − 815 @group
+ − 816 ---------- Buffer: foo ----------
+ − 817 This is the contents of foo.
+ − 818 **** Important Message! ****Second line.
+ − 819 ---------- Buffer: foo ----------
+ − 820
+ − 821 ---------- Echo Area ----------
+ − 822 Type RET when done reading
+ − 823 ---------- Echo Area ----------
+ − 824 @end group
+ − 825 @end example
+ − 826
+ − 827 This function works by actually changing the text in the buffer. As a
+ − 828 result, if you later undo in this buffer, you will see the message come
+ − 829 and go.
+ − 830 @end defun
+ − 831
+ − 832 @node Blinking
+ − 833 @section Blinking Parentheses
+ − 834 @cindex parenthesis matching
+ − 835 @cindex blinking
+ − 836 @cindex balancing parentheses
+ − 837 @cindex close parenthesis
+ − 838
+ − 839 This section describes the mechanism by which XEmacs shows a matching
+ − 840 open parenthesis when the user inserts a close parenthesis.
+ − 841
+ − 842 @vindex blink-paren-hook
+ − 843 @defvar blink-paren-function
+ − 844 The value of this variable should be a function (of no arguments) to
+ − 845 be called whenever a character with close parenthesis syntax is inserted.
+ − 846 The value of @code{blink-paren-function} may be @code{nil}, in which
+ − 847 case nothing is done.
+ − 848
+ − 849 @quotation
+ − 850 @strong{Please note:} This variable was named @code{blink-paren-hook} in
+ − 851 older Emacs versions, but since it is not called with the standard
+ − 852 convention for hooks, it was renamed to @code{blink-paren-function} in
+ − 853 version 19.
+ − 854 @end quotation
+ − 855 @end defvar
+ − 856
+ − 857 @defvar blink-matching-paren
+ − 858 If this variable is @code{nil}, then @code{blink-matching-open} does
+ − 859 nothing.
+ − 860 @end defvar
+ − 861
+ − 862 @defvar blink-matching-paren-distance
+ − 863 This variable specifies the maximum distance to scan for a matching
+ − 864 parenthesis before giving up.
+ − 865 @end defvar
+ − 866
+ − 867 @defvar blink-matching-paren-delay
+ − 868 This variable specifies the number of seconds for the cursor to remain
+ − 869 at the matching parenthesis. A fraction of a second often gives
+ − 870 good results, but the default is 1, which works on all systems.
+ − 871 @end defvar
+ − 872
444
+ − 873 @deffn Command blink-matching-open
428
+ − 874 This function is the default value of @code{blink-paren-function}. It
+ − 875 assumes that point follows a character with close parenthesis syntax and
+ − 876 moves the cursor momentarily to the matching opening character. If that
+ − 877 character is not already on the screen, it displays the character's
+ − 878 context in the echo area. To avoid long delays, this function does not
+ − 879 search farther than @code{blink-matching-paren-distance} characters.
+ − 880
+ − 881 Here is an example of calling this function explicitly.
+ − 882
+ − 883 @smallexample
+ − 884 @group
+ − 885 (defun interactive-blink-matching-open ()
+ − 886 "Indicate momentarily the start of sexp before point."
+ − 887 (interactive)
+ − 888 @end group
+ − 889 @group
+ − 890 (let ((blink-matching-paren-distance
+ − 891 (buffer-size))
+ − 892 (blink-matching-paren t))
+ − 893 (blink-matching-open)))
+ − 894 @end group
+ − 895 @end smallexample
444
+ − 896 @end deffn
428
+ − 897
+ − 898 @node Usual Display
+ − 899 @section Usual Display Conventions
+ − 900
+ − 901 The usual display conventions define how to display each character
+ − 902 code. You can override these conventions by setting up a display table
+ − 903 (@pxref{Display Tables}). Here are the usual display conventions:
+ − 904
+ − 905 @itemize @bullet
+ − 906 @item
+ − 907 Character codes 32 through 126 map to glyph codes 32 through 126.
+ − 908 Normally this means they display as themselves.
+ − 909
+ − 910 @item
+ − 911 Character code 9 is a horizontal tab. It displays as whitespace
+ − 912 up to a position determined by @code{tab-width}.
+ − 913
+ − 914 @item
+ − 915 Character code 10 is a newline.
+ − 916
+ − 917 @item
+ − 918 All other codes in the range 0 through 31, and code 127, display in one
+ − 919 of two ways according to the value of @code{ctl-arrow}. If it is
+ − 920 non-@code{nil}, these codes map to sequences of two glyphs, where the
+ − 921 first glyph is the @sc{ascii} code for @samp{^}. (A display table can
+ − 922 specify a glyph to use instead of @samp{^}.) Otherwise, these codes map
+ − 923 just like the codes in the range 128 to 255.
+ − 924
+ − 925 @item
+ − 926 Character codes 128 through 255 map to sequences of four glyphs, where
+ − 927 the first glyph is the @sc{ascii} code for @samp{\}, and the others are
+ − 928 digit characters representing the code in octal. (A display table can
+ − 929 specify a glyph to use instead of @samp{\}.)
+ − 930 @end itemize
+ − 931
+ − 932 The usual display conventions apply even when there is a display
+ − 933 table, for any character whose entry in the active display table is
+ − 934 @code{nil}. Thus, when you set up a display table, you need only
+ − 935 specify the characters for which you want unusual behavior.
+ − 936
+ − 937 These variables affect the way certain characters are displayed on the
+ − 938 screen. Since they change the number of columns the characters occupy,
+ − 939 they also affect the indentation functions.
+ − 940
+ − 941 @defopt ctl-arrow
+ − 942 @cindex control characters in display
+ − 943 This buffer-local variable controls how control characters are
+ − 944 displayed. If it is non-@code{nil}, they are displayed as a caret
+ − 945 followed by the character: @samp{^A}. If it is @code{nil}, they are
+ − 946 displayed as a backslash followed by three octal digits: @samp{\001}.
+ − 947 @end defopt
+ − 948
+ − 949 @c Following may have overfull hbox.
+ − 950 @defvar default-ctl-arrow
+ − 951 The value of this variable is the default value for @code{ctl-arrow} in
+ − 952 buffers that do not override it. @xref{Default Value}.
+ − 953 @end defvar
+ − 954
+ − 955 @defopt tab-width
+ − 956 The value of this variable is the spacing between tab stops used for
+ − 957 displaying tab characters in Emacs buffers. The default is 8. Note
+ − 958 that this feature is completely independent from the user-settable tab
+ − 959 stops used by the command @code{tab-to-tab-stop}. @xref{Indent Tabs}.
+ − 960 @end defopt
+ − 961
+ − 962 @node Display Tables
+ − 963 @section Display Tables
+ − 964
+ − 965 @cindex display table
+ − 966 You can use the @dfn{display table} feature to control how all 256
+ − 967 possible character codes display on the screen. This is useful for
+ − 968 displaying European languages that have letters not in the @sc{ascii}
+ − 969 character set.
+ − 970
+ − 971 The display table maps each character code into a sequence of
+ − 972 @dfn{runes}, each rune being an image that takes up one character
+ − 973 position on the screen. You can also define how to display each rune
+ − 974 on your terminal, using the @dfn{rune table}.
+ − 975
+ − 976 @menu
+ − 977 * Display Table Format:: What a display table consists of.
+ − 978 * Active Display Table:: How XEmacs selects a display table to use.
+ − 979 * Character Descriptors:: Format of an individual element of a
+ − 980 display table.
+ − 981 @end menu
+ − 982
+ − 983 @ignore Not yet working in XEmacs?
+ − 984 * ISO Latin 1:: How to use display tables
+ − 985 to support the ISO Latin 1 character set.
+ − 986 @end ignore
+ − 987
+ − 988 @node Display Table Format
+ − 989 @subsection Display Table Format
+ − 990
+ − 991 A display table is an array of 256 elements. (In FSF Emacs, a display
+ − 992 table is 262 elements. The six extra elements specify the truncation
+ − 993 and continuation glyphs, etc. This method is very kludgey, and in
+ − 994 XEmacs the variables @code{truncation-glyph}, @code{continuation-glyph},
+ − 995 etc. are used. @xref{Truncation}.)
+ − 996
+ − 997 @defun make-display-table
+ − 998 This creates and returns a display table. The table initially has
+ − 999 @code{nil} in all elements.
+ − 1000 @end defun
+ − 1001
+ − 1002 The 256 elements correspond to character codes; the @var{n}th
+ − 1003 element says how to display the character code @var{n}. The value
+ − 1004 should be @code{nil}, a string, a glyph, or a vector of strings and
+ − 1005 glyphs (@pxref{Character Descriptors}). If an element is @code{nil},
+ − 1006 it says to display that character according to the usual display
+ − 1007 conventions (@pxref{Usual Display}).
+ − 1008
+ − 1009 If you use the display table to change the display of newline
+ − 1010 characters, the whole buffer will be displayed as one long ``line.''
+ − 1011
+ − 1012 For example, here is how to construct a display table that mimics the
+ − 1013 effect of setting @code{ctl-arrow} to a non-@code{nil} value:
+ − 1014
+ − 1015 @example
+ − 1016 (setq disptab (make-display-table))
+ − 1017 (let ((i 0))
+ − 1018 (while (< i 32)
+ − 1019 (or (= i ?\t) (= i ?\n)
+ − 1020 (aset disptab i (concat "^" (char-to-string (+ i 64)))))
+ − 1021 (setq i (1+ i)))
+ − 1022 (aset disptab 127 "^?"))
+ − 1023 @end example
+ − 1024
+ − 1025 @node Active Display Table
+ − 1026 @subsection Active Display Table
+ − 1027 @cindex active display table
+ − 1028
+ − 1029 The active display table is controlled by the variable
+ − 1030 @code{current-display-table}. This is a specifier, which means
+ − 1031 that you can specify separate values for it in individual buffers,
+ − 1032 windows, frames, and devices, as well as a global value. It also
+ − 1033 means that you cannot set this variable using @code{setq}; use
+ − 1034 @code{set-specifier} instead. @xref{Specifiers}. (FSF Emacs
+ − 1035 uses @code{window-display-table}, @code{buffer-display-table},
+ − 1036 @code{standard-display-table}, etc. to control the display table.
+ − 1037 However, specifiers are a cleaner and more powerful way of doing
+ − 1038 the same thing. FSF Emacs also uses a different format for
+ − 1039 the contents of a display table, using additional indirection
+ − 1040 to a ``glyph table'' and such. Note that ``glyph'' has a different
+ − 1041 meaning in XEmacs.)
+ − 1042
442
+ − 1043 @defvar current-display-table
+ − 1044
+ − 1045 The display table currently in use. This is a specifier.
+ − 1046
+ − 1047 Display tables are used to control how characters are displayed. Each
+ − 1048 time that redisplay processes a character, it is looked up in all the
+ − 1049 display tables that apply (obtained by calling @code{specifier-instance}
+ − 1050 on @code{current-display-table} and any overriding display tables
+ − 1051 specified in currently active faces). The first entry found that
+ − 1052 matches the character determines how the character is displayed. If
+ − 1053 there is no matching entry, the default display method is
+ − 1054 used. (Non-control characters are displayed as themselves and control
+ − 1055 characters are displayed according to the buffer-local variable
+ − 1056 @code{ctl-arrow}. Control characters are further affected by
+ − 1057 @code{control-arrow-glyph} and @code{octal-escape-glyph}.)
+ − 1058
+ − 1059 Each instantiator in this specifier and the display-table specifiers
+ − 1060 in faces is a display table or a list of such tables. If a list, each
+ − 1061 table will be searched in turn for an entry matching a particular
+ − 1062 character. Each display table is one of
+ − 1063
+ − 1064 @itemize @bullet
+ − 1065 @item
+ − 1066 A vector, specifying values for characters starting at 0.
+ − 1067 @item
+ − 1068 A char table, either of type @code{char} or @code{generic}.
+ − 1069 @item
+ − 1070 A range table.
+ − 1071 @end itemize
+ − 1072
+ − 1073 Each entry in a display table should be one of
+ − 1074
+ − 1075 @itemize @bullet
+ − 1076 @item
+ − 1077 nil (this entry is ignored and the search continues).
+ − 1078 @item
+ − 1079 A character (use this character; if it happens to be the same as
+ − 1080 the original character, default processing happens, otherwise
+ − 1081 redisplay attempts to display this character directly;
+ − 1082 #### At some point recursive display-table lookup will be
+ − 1083 implemented).
+ − 1084 @item
+ − 1085 A string (display each character in the string directly;
+ − 1086 #### At some point recursive display-table lookup will be
+ − 1087 implemented).
+ − 1088 @item
+ − 1089 A glyph (display the glyph;
+ − 1090 #### At some point recursive display-table lookup will be
+ − 1091 implemented when a string glyph is being processed).
+ − 1092 @item
+ − 1093 A cons of the form (format "@var{string}") where @var{string} is a
+ − 1094 printf-like spec used to process the character. #### Unfortunately no
+ − 1095 formatting directives other than %% are implemented.
+ − 1096 @item
+ − 1097 A vector (each element of the vector is processed recursively;
+ − 1098 in such a case, nil elements in the vector are simply ignored).
+ − 1099
+ − 1100 #### At some point in the near future, display tables are likely to
+ − 1101 be expanded to include other features, such as referencing characters
+ − 1102 in particular fonts and allowing the character search to continue
+ − 1103 all the way up the chain of specifier instantiators. These features
+ − 1104 are necessary to properly display Unicode characters.
+ − 1105 @end itemize
+ − 1106 @end defvar
+ − 1107
428
+ − 1108 Individual faces can also specify an overriding display table;
+ − 1109 this is set using @code{set-face-display-table}. @xref{Faces}.
+ − 1110
+ − 1111 If no display table can be determined for a particular window,
+ − 1112 then XEmacs uses the usual display conventions. @xref{Usual Display}.
+ − 1113
+ − 1114 @node Character Descriptors
+ − 1115 @subsection Character Descriptors
+ − 1116
+ − 1117 @cindex character descriptor
+ − 1118 Each element of the display-table vector describes how to display
+ − 1119 a particular character and is called a @dfn{character descriptor}.
+ − 1120 A character descriptor can be:
+ − 1121
+ − 1122 @table @asis
+ − 1123 @item a string
+ − 1124 Display this particular string wherever the character is to be displayed.
+ − 1125
+ − 1126 @item a glyph
+ − 1127 Display this particular glyph wherever the character is to be displayed.
+ − 1128
+ − 1129 @item a vector
+ − 1130 The vector may contain strings and/or glyphs. Display the elements of
+ − 1131 the vector one after another wherever the character is to be displayed.
+ − 1132
+ − 1133 @item @code{nil}
+ − 1134 Display according to the standard interpretation (@pxref{Usual Display}).
+ − 1135 @end table
+ − 1136
+ − 1137 @ignore Not yet working in XEmacs?
+ − 1138 @node ISO Latin 1
+ − 1139 @subsection ISO Latin 1
+ − 1140
+ − 1141 If you have a terminal that can handle the entire ISO Latin 1 character
+ − 1142 set, you can arrange to use that character set as follows:
+ − 1143
+ − 1144 @example
+ − 1145 (require 'disp-table)
+ − 1146 ;; @r{Set char codes 160--255 to display as themselves.}
+ − 1147 ;; @r{(Codes 128--159 are the additional control characters.)}
+ − 1148 (standard-display-8bit 160 255)
+ − 1149 @end example
+ − 1150
+ − 1151 If you are editing buffers written in the ISO Latin 1 character set and
+ − 1152 your terminal doesn't handle anything but @sc{ascii}, you can load the
+ − 1153 file @file{iso-ascii} to set up a display table that displays the other
+ − 1154 ISO characters as explanatory sequences of @sc{ascii} characters. For
+ − 1155 example, the character ``o with umlaut'' displays as @samp{@{"o@}}.
+ − 1156
+ − 1157 Some European countries have terminals that don't support ISO Latin 1
+ − 1158 but do support the special characters for that country's language. You
+ − 1159 can define a display table to work one language using such terminals.
+ − 1160 For an example, see @file{lisp/iso-swed.el}, which handles certain
+ − 1161 Swedish terminals.
+ − 1162
+ − 1163 You can load the appropriate display table for your terminal
+ − 1164 automatically by writing a terminal-specific Lisp file for the terminal
+ − 1165 type.
+ − 1166 @end ignore
+ − 1167
+ − 1168 @node Beeping
+ − 1169 @section Beeping
+ − 1170 @cindex beeping
+ − 1171 @cindex bell
+ − 1172 @cindex sound
+ − 1173
+ − 1174 You can make XEmacs ring a bell, play a sound, or blink the screen to
+ − 1175 attract the user's attention. Be conservative about how often you do
+ − 1176 this; frequent bells can become irritating. Also be careful not to use
+ − 1177 beeping alone when signaling an error is appropriate. (@xref{Errors}.)
+ − 1178
+ − 1179 @defun ding &optional dont-terminate sound device
+ − 1180 @cindex keyboard macro termination
+ − 1181 This function beeps, or flashes the screen (see @code{visible-bell}
+ − 1182 below). It also terminates any keyboard macro currently executing
+ − 1183 unless @var{dont-terminate} is non-@code{nil}. If @var{sound} is
+ − 1184 specified, it should be a symbol specifying which sound to make. This
+ − 1185 sound will be played if @code{visible-bell} is @code{nil}. (This only
+ − 1186 works if sound support was compiled into the executable and you are
+ − 1187 running on the console of a Sun SparcStation, SGI, HP9000s700, or Linux
+ − 1188 PC. Otherwise you just get a beep.) The optional third argument
+ − 1189 specifies what device to make the sound on, and defaults to the selected
+ − 1190 device.
+ − 1191 @end defun
+ − 1192
+ − 1193 @defun beep &optional dont-terminate sound device
+ − 1194 This is a synonym for @code{ding}.
+ − 1195 @end defun
+ − 1196
+ − 1197 @defopt visible-bell
+ − 1198 This variable determines whether XEmacs should flash the screen to
+ − 1199 represent a bell. Non-@code{nil} means yes, @code{nil} means no. On
+ − 1200 TTY devices, this is effective only if the Termcap entry for the
+ − 1201 terminal type has the visible bell flag (@samp{vb}) set.
+ − 1202 @end defopt
+ − 1203
+ − 1204 @defvar sound-alist
+ − 1205 This variable holds an alist associating names with sounds. When
+ − 1206 @code{beep} or @code{ding} is called with one of the name symbols, the
+ − 1207 associated sound will be generated instead of the standard beep.
+ − 1208
+ − 1209 Each element of @code{sound-alist} is a list describing a sound. The
+ − 1210 first element of the list is the name of the sound being defined.
+ − 1211 Subsequent elements of the list are alternating keyword/value pairs:
+ − 1212
+ − 1213 @table @code
+ − 1214 @item sound
+ − 1215 A string of raw sound data, or the name of another sound to play. The
+ − 1216 symbol @code{t} here means use the default X beep.
+ − 1217 @item volume
+ − 1218 An integer from 0-100, defaulting to @code{bell-volume}.
+ − 1219 @item pitch
+ − 1220 If using the default X beep, the pitch (Hz) to generate.
+ − 1221 @item duration
+ − 1222 If using the default X beep, the duration (milliseconds).
+ − 1223 @end table
+ − 1224
+ − 1225 For compatibility, elements of `sound-alist' may also be:
+ − 1226
+ − 1227 @itemize @bullet
+ − 1228 @item
+ − 1229 @code{( sound-name . <sound> )}
+ − 1230 @item
+ − 1231 @code{( sound-name <volume> <sound> )}
+ − 1232 @end itemize
+ − 1233
+ − 1234 You should probably add things to this list by calling the function
+ − 1235 @code{load-sound-file}.
+ − 1236
+ − 1237 Caveats:
+ − 1238
+ − 1239 @itemize @minus
+ − 1240 @item
+ − 1241 You can only play audio data if running on the console screen of a Sun
+ − 1242 SparcStation, SGI, or HP9000s700.
+ − 1243
+ − 1244 @item
+ − 1245 The pitch, duration, and volume options are available everywhere, but
+ − 1246 many X servers ignore the `pitch' option.
+ − 1247 @end itemize
+ − 1248
+ − 1249 The following beep-types are used by XEmacs itself:
+ − 1250
+ − 1251 @table @code
+ − 1252 @item auto-save-error
+ − 1253 when an auto-save does not succeed
+ − 1254 @item command-error
+ − 1255 when the XEmacs command loop catches an error
+ − 1256 @item undefined-key
+ − 1257 when you type a key that is undefined
+ − 1258 @item undefined-click
+ − 1259 when you use an undefined mouse-click combination
+ − 1260 @item no-completion
+ − 1261 during completing-read
+ − 1262 @item y-or-n-p
+ − 1263 when you type something other than 'y' or 'n'
+ − 1264 @item yes-or-no-p
+ − 1265 when you type something other than 'yes' or 'no'
+ − 1266 @item default
+ − 1267 used when nothing else is appropriate.
+ − 1268 @end table
+ − 1269
+ − 1270 Other lisp packages may use other beep types, but these are the ones that
+ − 1271 the C kernel of XEmacs uses.
+ − 1272 @end defvar
+ − 1273
+ − 1274 @defopt bell-volume
+ − 1275 This variable specifies the default volume for sounds, from 0 to 100.
+ − 1276 @end defopt
+ − 1277
+ − 1278 @deffn Command load-default-sounds
+ − 1279 This function loads and installs some sound files as beep-types.
+ − 1280 @end deffn
+ − 1281
+ − 1282 @deffn Command load-sound-file filename sound-name &optional volume
+ − 1283 This function reads in an audio file and adds it to @code{sound-alist}.
+ − 1284 The sound file must be in the Sun/NeXT U-LAW format. @var{sound-name}
+ − 1285 should be a symbol, specifying the name of the sound. If @var{volume}
+ − 1286 is specified, the sound will be played at that volume; otherwise, the
1738
+ − 1287 value of @code{bell-volume} will be used.
428
+ − 1288 @end deffn
+ − 1289
+ − 1290 @defun play-sound sound &optional volume device
+ − 1291 This function plays sound @var{sound}, which should be a symbol
+ − 1292 mentioned in @code{sound-alist}. If @var{volume} is specified, it
+ − 1293 overrides the value (if any) specified in @code{sound-alist}.
+ − 1294 @var{device} specifies the device to play the sound on, and defaults
+ − 1295 to the selected device.
+ − 1296 @end defun
+ − 1297
+ − 1298 @deffn Command play-sound-file file &optional volume device
+ − 1299 This function plays the named sound file at volume @var{volume}, which
+ − 1300 defaults to @code{bell-volume}. @var{device} specifies the device to
+ − 1301 play the sound on, and defaults to the selected device.
+ − 1302 @end deffn