Update copyright notices for 2013.
[bpt/emacs.git] / doc / lispref / frames.texi
1 @c -*-texinfo-*-
2 @c This is part of the GNU Emacs Lisp Reference Manual.
3 @c Copyright (C) 1990-1995, 1998-1999, 2001-2013 Free Software
4 @c Foundation, Inc.
5 @c See the file elisp.texi for copying conditions.
6 @node Frames
7 @chapter Frames
8 @cindex frame
9
10 A @dfn{frame} is a screen object that contains one or more Emacs
11 windows (@pxref{Windows}). It is the kind of object called a
12 ``window'' in the terminology of graphical environments; but we can't
13 call it a ``window'' here, because Emacs uses that word in a different
14 way. In Emacs Lisp, a @dfn{frame object} is a Lisp object that
15 represents a frame on the screen. @xref{Frame Type}.
16
17 A frame initially contains a single main window and/or a minibuffer
18 window; you can subdivide the main window vertically or horizontally
19 into smaller windows. @xref{Splitting Windows}.
20
21 @cindex terminal
22 A @dfn{terminal} is a display device capable of displaying one or
23 more Emacs frames. In Emacs Lisp, a @dfn{terminal object} is a Lisp
24 object that represents a terminal. @xref{Terminal Type}.
25
26 @cindex text terminal
27 @cindex graphical terminal
28 @cindex graphical display
29 There are two classes of terminals: @dfn{text terminals} and
30 @dfn{graphical terminals}. Text terminals are non-graphics-capable
31 displays, including @command{xterm} and other terminal emulators. On
32 a text terminal, each Emacs frame occupies the terminal's entire
33 screen; although you can create additional frames and switch between
34 them, the terminal only shows one frame at a time. Graphical
35 terminals, on the other hand, are managed by graphical display systems
36 such as the X Window System, which allow Emacs to show multiple frames
37 simultaneously on the same display.
38
39 On GNU and Unix systems, you can create additional frames on any
40 available terminal, within a single Emacs session, regardless of
41 whether Emacs was started on a text or graphical terminal. Emacs can
42 display on both graphical and text terminals simultaneously. This
43 comes in handy, for instance, when you connect to the same session
44 from several remote locations. @xref{Multiple Terminals}.
45
46 @defun framep object
47 This predicate returns a non-@code{nil} value if @var{object} is a
48 frame, and @code{nil} otherwise. For a frame, the value indicates which
49 kind of display the frame uses:
50
51 @table @code
52 @item t
53 The frame is displayed on a text terminal.
54 @item x
55 The frame is displayed on an X graphical terminal.
56 @item w32
57 The frame is displayed on a MS-Windows graphical terminal.
58 @item ns
59 The frame is displayed on a GNUstep or Macintosh Cocoa graphical
60 terminal.
61 @item pc
62 The frame is displayed on an MS-DOS terminal.
63 @end table
64 @end defun
65
66 @defun frame-terminal &optional frame
67 This function returns the terminal object that displays @var{frame}.
68 If @var{frame} is @code{nil} or unspecified, it defaults to the
69 selected frame.
70 @end defun
71
72 @defun terminal-live-p object
73 This predicate returns a non-@code{nil} value if @var{object} is a
74 terminal that is live (i.e., not deleted), and @code{nil} otherwise.
75 For live terminals, the return value indicates what kind of frames are
76 displayed on that terminal; the list of possible values is the same as
77 for @code{framep} above.
78 @end defun
79
80 @menu
81 * Creating Frames:: Creating additional frames.
82 * Multiple Terminals:: Displaying on several different devices.
83 * Frame Parameters:: Controlling frame size, position, font, etc.
84 * Terminal Parameters:: Parameters common for all frames on terminal.
85 * Frame Titles:: Automatic updating of frame titles.
86 * Deleting Frames:: Frames last until explicitly deleted.
87 * Finding All Frames:: How to examine all existing frames.
88 * Minibuffers and Frames:: How a frame finds the minibuffer to use.
89 * Input Focus:: Specifying the selected frame.
90 * Visibility of Frames:: Frames may be visible or invisible, or icons.
91 * Raising and Lowering:: Raising a frame makes it hide other windows;
92 lowering it makes the others hide it.
93 * Frame Configurations:: Saving the state of all frames.
94 * Mouse Tracking:: Getting events that say when the mouse moves.
95 * Mouse Position:: Asking where the mouse is, or moving it.
96 * Pop-Up Menus:: Displaying a menu for the user to select from.
97 * Dialog Boxes:: Displaying a box to ask yes or no.
98 * Pointer Shape:: Specifying the shape of the mouse pointer.
99 * Window System Selections:: Transferring text to and from other X clients.
100 * Drag and Drop:: Internals of Drag-and-Drop implementation.
101 * Color Names:: Getting the definitions of color names.
102 * Text Terminal Colors:: Defining colors for text terminals.
103 * Resources:: Getting resource values from the server.
104 * Display Feature Testing:: Determining the features of a terminal.
105 @end menu
106
107 @node Creating Frames
108 @section Creating Frames
109
110 To create a new frame, call the function @code{make-frame}.
111
112 @deffn Command make-frame &optional alist
113 This function creates and returns a new frame, displaying the current
114 buffer.
115
116 The @var{alist} argument is an alist that specifies frame parameters
117 for the new frame. @xref{Frame Parameters}. If you specify the
118 @code{terminal} parameter in @var{alist}, the new frame is created on
119 that terminal. Otherwise, if you specify the @code{window-system}
120 frame parameter in @var{alist}, that determines whether the frame
121 should be displayed on a text terminal or a graphical terminal.
122 @xref{Window Systems}. If neither is specified, the new frame is
123 created in the same terminal as the selected frame.
124
125 Any parameters not mentioned in @var{alist} default to the values in
126 the alist @code{default-frame-alist} (@pxref{Initial Parameters});
127 parameters not specified there default from the X resources or its
128 equivalent on your operating system (@pxref{X Resources,, X Resources,
129 emacs, The GNU Emacs Manual}). After the frame is created, Emacs
130 applies any parameters listed in @code{frame-inherited-parameters}
131 (see below) and not present in the argument, taking the values from
132 the frame that was selected when @code{make-frame} was called.
133
134 This function itself does not make the new frame the selected frame.
135 @xref{Input Focus}. The previously selected frame remains selected.
136 On graphical terminals, however, the windowing system may select the
137 new frame for its own reasons.
138 @end deffn
139
140 @defvar before-make-frame-hook
141 A normal hook run by @code{make-frame} before it creates the frame.
142 @end defvar
143
144 @defvar after-make-frame-functions
145 An abnormal hook run by @code{make-frame} after it creates the frame.
146 Each function in @code{after-make-frame-functions} receives one argument, the
147 frame just created.
148 @end defvar
149
150 @defvar frame-inherited-parameters
151 This variable specifies the list of frame parameters that a newly
152 created frame inherits from the currently selected frame. For each
153 parameter (a symbol) that is an element in the list and is not present
154 in the argument to @code{make-frame}, the function sets the value of
155 that parameter in the created frame to its value in the selected
156 frame.
157 @end defvar
158
159 @node Multiple Terminals
160 @section Multiple Terminals
161 @cindex multiple terminals
162 @cindex multi-tty
163 @cindex multiple X displays
164 @cindex displays, multiple
165
166 Emacs represents each terminal as a @dfn{terminal object} data type
167 (@pxref{Terminal Type}). On GNU and Unix systems, Emacs can use
168 multiple terminals simultaneously in each session. On other systems,
169 it can only use a single terminal. Each terminal object has the
170 following attributes:
171
172 @itemize @bullet
173 @item
174 The name of the device used by the terminal (e.g., @samp{:0.0} or
175 @file{/dev/tty}).
176
177 @item
178 The terminal and keyboard coding systems used on the terminal.
179 @xref{Terminal I/O Encoding}.
180
181 @item
182 The kind of display associated with the terminal. This is the symbol
183 returned by the function @code{terminal-live-p} (i.e., @code{x},
184 @code{t}, @code{w32}, @code{ns}, or @code{pc}). @xref{Frames}.
185
186 @item
187 A list of terminal parameters. @xref{Terminal Parameters}.
188 @end itemize
189
190 There is no primitive for creating terminal objects. Emacs creates
191 them as needed, such as when you call @code{make-frame-on-display}
192 (described below).
193
194 @defun terminal-name &optional terminal
195 This function returns the file name of the device used by
196 @var{terminal}. If @var{terminal} is omitted or @code{nil}, it
197 defaults to the selected frame's terminal. @var{terminal} can also be
198 a frame, meaning that frame's terminal.
199 @end defun
200
201 @defun terminal-list
202 This function returns a list of all live terminal objects.
203 @end defun
204
205 @defun get-device-terminal device
206 This function returns a terminal whose device name is given by
207 @var{device}. If @var{device} is a string, it can be either the file
208 name of a terminal device, or the name of an X display of the form
209 @samp{@var{host}:@var{server}.@var{screen}}. If @var{device} is a
210 frame, this function returns that frame's terminal; @code{nil} means
211 the selected frame. Finally, if @var{device} is a terminal object
212 that represents a live terminal, that terminal is returned. The
213 function signals an error if its argument is none of the above.
214 @end defun
215
216 @defun delete-terminal &optional terminal force
217 This function deletes all frames on @var{terminal} and frees the
218 resources used by it. It runs the abnormal hook
219 @code{delete-terminal-functions}, passing @var{terminal} as the
220 argument to each function.
221
222 If @var{terminal} is omitted or @code{nil}, it defaults to the
223 selected frame's terminal. @var{terminal} can also be a frame,
224 meaning that frame's terminal.
225
226 Normally, this function signals an error if you attempt to delete the
227 sole active terminal, but if @var{force} is non-@code{nil}, you are
228 allowed to do so. Emacs automatically calls this function when the
229 last frame on a terminal is deleted (@pxref{Deleting Frames}).
230 @end defun
231
232 @defvar delete-terminal-functions
233 An abnormal hook run by @code{delete-terminal}. Each function
234 receives one argument, the @var{terminal} argument passed to
235 @code{delete-terminal}. Due to technical details, the functions may
236 be called either just before the terminal is deleted, or just
237 afterwards.
238 @end defvar
239
240 @cindex terminal-local variables
241 A few Lisp variables are @dfn{terminal-local}; that is, they have a
242 separate binding for each terminal. The binding in effect at any time
243 is the one for the terminal that the currently selected frame belongs
244 to. These variables include @code{default-minibuffer-frame},
245 @code{defining-kbd-macro}, @code{last-kbd-macro}, and
246 @code{system-key-alist}. They are always terminal-local, and can
247 never be buffer-local (@pxref{Buffer-Local Variables}).
248
249 On GNU and Unix systems, each X display is a separate graphical
250 terminal. When Emacs is started from within the X window system, it
251 uses the X display specified by the @env{DISPLAY} environment
252 variable, or by the @samp{--display} option (@pxref{Initial Options,,,
253 emacs, The GNU Emacs Manual}). Emacs can connect to other X displays
254 via the command @code{make-frame-on-display}. Each X display has its
255 own selected frame and its own minibuffer windows; however, only one
256 of those frames is ``@emph{the} selected frame'' at any given moment
257 (@pxref{Input Focus}). Emacs can even connect to other text
258 terminals, by interacting with the @command{emacsclient} program.
259 @xref{Emacs Server,,, emacs, The GNU Emacs Manual}.
260
261 A single X server can handle more than one display. Each X display
262 has a three-part name, @samp{@var{host}:@var{server}.@var{screen}}.
263 The first two parts, @var{host} and @var{server}, identify the X
264 server; the third part, @var{screen}, identifies a screen number on
265 that X server. When you use two or more screens belonging to one
266 server, Emacs knows by the similarity in their names that they share a
267 single keyboard.
268
269 On some ``multi-monitor'' setups, a single X display outputs to more
270 than one physical monitor. Currently, there is no way for Emacs to
271 distinguish between the different physical monitors.
272
273 @deffn Command make-frame-on-display display &optional parameters
274 This function creates and returns a new frame on @var{display}, taking
275 the other frame parameters from the alist @var{parameters}.
276 @var{display} should be the name of an X display (a string).
277
278 Before creating the frame, this function ensures that Emacs is ``set
279 up'' to display graphics. For instance, if Emacs has not processed X
280 resources (e.g., if it was started on a text terminal), it does so at
281 this time. In all other respects, this function behaves like
282 @code{make-frame} (@pxref{Creating Frames}).
283 @end deffn
284
285 @defun x-display-list
286 This function returns a list that indicates which X displays Emacs has
287 a connection to. The elements of the list are strings, and each one
288 is a display name.
289 @end defun
290
291 @defun x-open-connection display &optional xrm-string must-succeed
292 This function opens a connection to the X display @var{display},
293 without creating a frame on that display. Normally, Emacs Lisp
294 programs need not call this function, as @code{make-frame-on-display}
295 calls it automatically. The only reason for calling it is to check
296 whether communication can be established with a given X display.
297
298 The optional argument @var{xrm-string}, if not @code{nil}, is a string
299 of resource names and values, in the same format used in the
300 @file{.Xresources} file. @xref{X Resources,, X Resources, emacs, The
301 GNU Emacs Manual}. These values apply to all Emacs frames created on
302 this display, overriding the resource values recorded in the X server.
303 Here's an example of what this string might look like:
304
305 @example
306 "*BorderWidth: 3\n*InternalBorder: 2\n"
307 @end example
308
309 If @var{must-succeed} is non-@code{nil}, failure to open the connection
310 terminates Emacs. Otherwise, it is an ordinary Lisp error.
311 @end defun
312
313 @defun x-close-connection display
314 This function closes the connection to display @var{display}. Before
315 you can do this, you must first delete all the frames that were open
316 on that display (@pxref{Deleting Frames}).
317 @end defun
318
319 @node Frame Parameters
320 @section Frame Parameters
321 @cindex frame parameters
322
323 A frame has many parameters that control its appearance and behavior.
324 Just what parameters a frame has depends on what display mechanism it
325 uses.
326
327 Frame parameters exist mostly for the sake of graphical displays.
328 Most frame parameters have no effect when applied to a frame on a text
329 terminal; only the @code{height}, @code{width}, @code{name},
330 @code{title}, @code{menu-bar-lines}, @code{buffer-list} and
331 @code{buffer-predicate} parameters do something special. If the
332 terminal supports colors, the parameters @code{foreground-color},
333 @code{background-color}, @code{background-mode} and
334 @code{display-type} are also meaningful. If the terminal supports
335 frame transparency, the parameter @code{alpha} is also meaningful.
336
337 @menu
338 * Parameter Access:: How to change a frame's parameters.
339 * Initial Parameters:: Specifying frame parameters when you make a frame.
340 * Window Frame Parameters:: List of frame parameters for window systems.
341 * Size and Position:: Changing the size and position of a frame.
342 * Geometry:: Parsing geometry specifications.
343 @end menu
344
345 @node Parameter Access
346 @subsection Access to Frame Parameters
347
348 These functions let you read and change the parameter values of a
349 frame.
350
351 @defun frame-parameter frame parameter
352 This function returns the value of the parameter @var{parameter} (a
353 symbol) of @var{frame}. If @var{frame} is @code{nil}, it returns the
354 selected frame's parameter. If @var{frame} has no setting for
355 @var{parameter}, this function returns @code{nil}.
356 @end defun
357
358 @defun frame-parameters &optional frame
359 The function @code{frame-parameters} returns an alist listing all the
360 parameters of @var{frame} and their values. If @var{frame} is
361 @code{nil} or omitted, this returns the selected frame's parameters
362 @end defun
363
364 @defun modify-frame-parameters frame alist
365 This function alters the parameters of frame @var{frame} based on the
366 elements of @var{alist}. Each element of @var{alist} has the form
367 @code{(@var{parm} . @var{value})}, where @var{parm} is a symbol naming a
368 parameter. If you don't mention a parameter in @var{alist}, its value
369 doesn't change. If @var{frame} is @code{nil}, it defaults to the selected
370 frame.
371 @end defun
372
373 @defun set-frame-parameter frame parm value
374 This function sets the frame parameter @var{parm} to the specified
375 @var{value}. If @var{frame} is @code{nil}, it defaults to the
376 selected frame.
377 @end defun
378
379 @defun modify-all-frames-parameters alist
380 This function alters the frame parameters of all existing frames
381 according to @var{alist}, then modifies @code{default-frame-alist}
382 (and, if necessary, @code{initial-frame-alist}) to apply the same
383 parameter values to frames that will be created henceforth.
384 @end defun
385
386 @node Initial Parameters
387 @subsection Initial Frame Parameters
388
389 You can specify the parameters for the initial startup frame by
390 setting @code{initial-frame-alist} in your init file (@pxref{Init
391 File}).
392
393 @defopt initial-frame-alist
394 This variable's value is an alist of parameter values used when
395 creating the initial frame. You can set this variable to specify the
396 appearance of the initial frame without altering subsequent frames.
397 Each element has the form:
398
399 @example
400 (@var{parameter} . @var{value})
401 @end example
402
403 Emacs creates the initial frame before it reads your init
404 file. After reading that file, Emacs checks @code{initial-frame-alist},
405 and applies the parameter settings in the altered value to the already
406 created initial frame.
407
408 If these settings affect the frame geometry and appearance, you'll see
409 the frame appear with the wrong ones and then change to the specified
410 ones. If that bothers you, you can specify the same geometry and
411 appearance with X resources; those do take effect before the frame is
412 created. @xref{X Resources,, X Resources, emacs, The GNU Emacs Manual}.
413
414 X resource settings typically apply to all frames. If you want to
415 specify some X resources solely for the sake of the initial frame, and
416 you don't want them to apply to subsequent frames, here's how to achieve
417 this. Specify parameters in @code{default-frame-alist} to override the
418 X resources for subsequent frames; then, to prevent these from affecting
419 the initial frame, specify the same parameters in
420 @code{initial-frame-alist} with values that match the X resources.
421 @end defopt
422
423 @cindex minibuffer-only frame
424 If these parameters include @code{(minibuffer . nil)}, that indicates
425 that the initial frame should have no minibuffer. In this case, Emacs
426 creates a separate @dfn{minibuffer-only frame} as well.
427
428 @defopt minibuffer-frame-alist
429 This variable's value is an alist of parameter values used when
430 creating an initial minibuffer-only frame (i.e., the minibuffer-only
431 frame that Emacs creates if @code{initial-frame-alist} specifies a
432 frame with no minibuffer).
433 @end defopt
434
435 @defopt default-frame-alist
436 This is an alist specifying default values of frame parameters for all
437 Emacs frames---the first frame, and subsequent frames. When using the X
438 Window System, you can get the same results by means of X resources
439 in many cases.
440
441 Setting this variable does not affect existing frames. Furthermore,
442 functions that display a buffer in a separate frame may override the
443 default parameters by supplying their own parameters.
444 @end defopt
445
446 If you invoke Emacs with command-line options that specify frame
447 appearance, those options take effect by adding elements to either
448 @code{initial-frame-alist} or @code{default-frame-alist}. Options
449 which affect just the initial frame, such as @samp{-geometry} and
450 @samp{--maximized}, add to @code{initial-frame-alist}; the others add
451 to @code{default-frame-alist}. @pxref{Emacs Invocation,, Command Line
452 Arguments for Emacs Invocation, emacs, The GNU Emacs Manual}.
453
454 @node Window Frame Parameters
455 @subsection Window Frame Parameters
456 @cindex frame parameters for windowed displays
457
458 Just what parameters a frame has depends on what display mechanism
459 it uses. This section describes the parameters that have special
460 meanings on some or all kinds of terminals. Of these, @code{name},
461 @code{title}, @code{height}, @code{width}, @code{buffer-list} and
462 @code{buffer-predicate} provide meaningful information in terminal
463 frames, and @code{tty-color-mode} is meaningful only for frames on
464 text terminals.
465
466 @menu
467 * Basic Parameters:: Parameters that are fundamental.
468 * Position Parameters:: The position of the frame on the screen.
469 * Size Parameters:: Frame's size.
470 * Layout Parameters:: Size of parts of the frame, and
471 enabling or disabling some parts.
472 * Buffer Parameters:: Which buffers have been or should be shown.
473 * Management Parameters:: Communicating with the window manager.
474 * Cursor Parameters:: Controlling the cursor appearance.
475 * Font and Color Parameters:: Fonts and colors for the frame text.
476 @end menu
477
478 @node Basic Parameters
479 @subsubsection Basic Parameters
480
481 These frame parameters give the most basic information about the
482 frame. @code{title} and @code{name} are meaningful on all terminals.
483
484 @table @code
485 @vindex display, a frame parameter
486 @item display
487 The display on which to open this frame. It should be a string of the
488 form @code{"@var{host}:@var{dpy}.@var{screen}"}, just like the
489 @env{DISPLAY} environment variable.
490
491 @vindex display-type, a frame parameter
492 @item display-type
493 This parameter describes the range of possible colors that can be used
494 in this frame. Its value is @code{color}, @code{grayscale} or
495 @code{mono}.
496
497 @vindex title, a frame parameter
498 @item title
499 If a frame has a non-@code{nil} title, it appears in the window
500 system's title bar at the top of the frame, and also in the mode line
501 of windows in that frame if @code{mode-line-frame-identification} uses
502 @samp{%F} (@pxref{%-Constructs}). This is normally the case when
503 Emacs is not using a window system, and can only display one frame at
504 a time. @xref{Frame Titles}.
505
506 @vindex name, a frame parameter
507 @item name
508 The name of the frame. The frame name serves as a default for the frame
509 title, if the @code{title} parameter is unspecified or @code{nil}. If
510 you don't specify a name, Emacs sets the frame name automatically
511 (@pxref{Frame Titles}).
512
513 If you specify the frame name explicitly when you create the frame, the
514 name is also used (instead of the name of the Emacs executable) when
515 looking up X resources for the frame.
516
517 @item explicit-name
518 If the frame name was specified explicitly when the frame was created,
519 this parameter will be that name. If the frame wasn't explicitly
520 named, this parameter will be @code{nil}.
521 @end table
522
523 @node Position Parameters
524 @subsubsection Position Parameters
525 @cindex window position on display
526
527 Position parameters' values are normally measured in pixels, but on
528 text terminals they count characters or lines instead.
529
530 @table @code
531 @vindex left, a frame parameter
532 @item left
533 The position, in pixels, of the left (or right) edge of the frame with
534 respect to the left (or right) edge of the screen. The value may be:
535
536 @table @asis
537 @item an integer
538 A positive integer relates the left edge of the frame to the left edge
539 of the screen. A negative integer relates the right frame edge to the
540 right screen edge.
541
542 @item @code{(+ @var{pos})}
543 This specifies the position of the left frame edge relative to the left
544 screen edge. The integer @var{pos} may be positive or negative; a
545 negative value specifies a position outside the screen.
546
547 @item @code{(- @var{pos})}
548 This specifies the position of the right frame edge relative to the right
549 screen edge. The integer @var{pos} may be positive or negative; a
550 negative value specifies a position outside the screen.
551 @end table
552
553 Some window managers ignore program-specified positions. If you want to
554 be sure the position you specify is not ignored, specify a
555 non-@code{nil} value for the @code{user-position} parameter as well.
556
557 @vindex top, a frame parameter
558 @item top
559 The screen position of the top (or bottom) edge, in pixels, with respect
560 to the top (or bottom) edge of the screen. It works just like
561 @code{left}, except vertically instead of horizontally.
562
563 @vindex icon-left, a frame parameter
564 @item icon-left
565 The screen position of the left edge of the frame's icon, in pixels,
566 counting from the left edge of the screen. This takes effect when the
567 frame is iconified, if the window manager supports this feature. If
568 you specify a value for this parameter, then you must also specify a
569 value for @code{icon-top} and vice versa.
570
571 @vindex icon-top, a frame parameter
572 @item icon-top
573 The screen position of the top edge of the frame's icon, in pixels,
574 counting from the top edge of the screen. This takes effect when the
575 frame is iconified, if the window manager supports this feature.
576
577 @vindex user-position, a frame parameter
578 @item user-position
579 When you create a frame and specify its screen position with the
580 @code{left} and @code{top} parameters, use this parameter to say whether
581 the specified position was user-specified (explicitly requested in some
582 way by a human user) or merely program-specified (chosen by a program).
583 A non-@code{nil} value says the position was user-specified.
584
585 @cindex window positions and window managers
586 Window managers generally heed user-specified positions, and some heed
587 program-specified positions too. But many ignore program-specified
588 positions, placing the window in a default fashion or letting the user
589 place it with the mouse. Some window managers, including @code{twm},
590 let the user specify whether to obey program-specified positions or
591 ignore them.
592
593 When you call @code{make-frame}, you should specify a non-@code{nil}
594 value for this parameter if the values of the @code{left} and @code{top}
595 parameters represent the user's stated preference; otherwise, use
596 @code{nil}.
597 @end table
598
599 @node Size Parameters
600 @subsubsection Size Parameters
601 @cindex window size on display
602
603 Frame parameters specify frame sizes in character units. On
604 graphical displays, the @code{default} face determines the actual
605 pixel sizes of these character units (@pxref{Face Attributes}).
606
607 @table @code
608 @vindex height, a frame parameter
609 @item height
610 The height of the frame contents, in characters. (To get the height in
611 pixels, call @code{frame-pixel-height}; see @ref{Size and Position}.)
612
613 @vindex width, a frame parameter
614 @item width
615 The width of the frame contents, in characters. (To get the width in
616 pixels, call @code{frame-pixel-width}; see @ref{Size and Position}.)
617
618 @vindex user-size, a frame parameter
619 @item user-size
620 This does for the size parameters @code{height} and @code{width} what
621 the @code{user-position} parameter (@pxref{Position Parameters,
622 user-position}) does for the position parameters @code{top} and
623 @code{left}.
624
625 @cindex full-screen frames
626 @vindex fullscreen, a frame parameter
627 @item fullscreen
628 Specify that width, height or both shall be maximized. The value
629 @code{fullwidth} specifies that width shall be as wide as possible.
630 The value @code{fullheight} specifies that height shall be as tall as
631 possible. The value @code{fullboth} specifies that both the width and
632 the height shall be set to the size of the screen. The value
633 @code{maximized} specifies that the frame shall be maximized. The
634 difference between @code{maximized} and @code{fullboth} is that the
635 former still has window manager decorations while the latter really
636 covers the whole screen.
637 @end table
638
639 @node Layout Parameters
640 @subsubsection Layout Parameters
641 @cindex layout parameters of frames
642 @cindex frame layout parameters
643
644 These frame parameters enable or disable various parts of the
645 frame, or control their sizes.
646
647 @table @code
648 @vindex border-width, a frame parameter
649 @item border-width
650 The width in pixels of the frame's border.
651
652 @vindex internal-border-width, a frame parameter
653 @item internal-border-width
654 The distance in pixels between text (or fringe) and the frame's border.
655
656 @vindex vertical-scroll-bars, a frame parameter
657 @item vertical-scroll-bars
658 Whether the frame has scroll bars for vertical scrolling, and which side
659 of the frame they should be on. The possible values are @code{left},
660 @code{right}, and @code{nil} for no scroll bars.
661
662 @ignore
663 @vindex horizontal-scroll-bars, a frame parameter
664 @item horizontal-scroll-bars
665 Whether the frame has scroll bars for horizontal scrolling
666 (non-@code{nil} means yes). Horizontal scroll bars are not currently
667 implemented.
668 @end ignore
669
670 @vindex scroll-bar-width, a frame parameter
671 @item scroll-bar-width
672 The width of vertical scroll bars, in pixels, or @code{nil} meaning to
673 use the default width.
674
675 @vindex left-fringe, a frame parameter
676 @vindex right-fringe, a frame parameter
677 @item left-fringe
678 @itemx right-fringe
679 The default width of the left and right fringes of windows in this
680 frame (@pxref{Fringes}). If either of these is zero, that effectively
681 removes the corresponding fringe.
682
683 When you use @code{frame-parameter} to query the value of either of
684 these two frame parameters, the return value is always an integer.
685 When using @code{set-frame-parameter}, passing a @code{nil} value
686 imposes an actual default value of 8 pixels.
687
688 The combined fringe widths must add up to an integral number of
689 columns, so the actual default fringe widths for the frame, as
690 reported by @code{frame-parameter}, may be larger than what you
691 specify. Any extra width is distributed evenly between the left and
692 right fringe. However, you can force one fringe or the other to a
693 precise width by specifying that width as a negative integer. If both
694 widths are negative, only the left fringe gets the specified width.
695
696 @vindex menu-bar-lines frame parameter
697 @item menu-bar-lines
698 The number of lines to allocate at the top of the frame for a menu
699 bar. The default is 1 if Menu Bar mode is enabled, and 0 otherwise.
700 @xref{Menu Bars,,,emacs, The GNU Emacs Manual}.
701
702 @vindex tool-bar-lines frame parameter
703 @item tool-bar-lines
704 The number of lines to use for the tool bar. The default is 1 if Tool
705 Bar mode is enabled, and 0 otherwise. @xref{Tool Bars,,,emacs, The
706 GNU Emacs Manual}.
707
708 @vindex tool-bar-position frame parameter
709 @item tool-bar-position
710 The position of the tool bar. Currently only for the GTK tool bar.
711 Value can be one of @code{top}, @code{bottom} @code{left}, @code{right}.
712 The default is @code{top}.
713
714 @vindex line-spacing, a frame parameter
715 @item line-spacing
716 Additional space to leave below each text line, in pixels (a positive
717 integer). @xref{Line Height}, for more information.
718 @end table
719
720 @node Buffer Parameters
721 @subsubsection Buffer Parameters
722
723 These frame parameters, meaningful on all kinds of terminals, deal
724 with which buffers have been, or should, be displayed in the frame.
725
726 @table @code
727 @vindex minibuffer, a frame parameter
728 @item minibuffer
729 Whether this frame has its own minibuffer. The value @code{t} means
730 yes, @code{nil} means no, @code{only} means this frame is just a
731 minibuffer. If the value is a minibuffer window (in some other
732 frame), the frame uses that minibuffer.
733
734 This frame parameter takes effect when the frame is created, and can
735 not be changed afterwards.
736
737 @vindex buffer-predicate, a frame parameter
738 @item buffer-predicate
739 The buffer-predicate function for this frame. The function
740 @code{other-buffer} uses this predicate (from the selected frame) to
741 decide which buffers it should consider, if the predicate is not
742 @code{nil}. It calls the predicate with one argument, a buffer, once for
743 each buffer; if the predicate returns a non-@code{nil} value, it
744 considers that buffer.
745
746 @vindex buffer-list, a frame parameter
747 @item buffer-list
748 A list of buffers that have been selected in this frame, ordered
749 most-recently-selected first.
750
751 @vindex unsplittable, a frame parameter
752 @item unsplittable
753 If non-@code{nil}, this frame's window is never split automatically.
754 @end table
755
756 @node Management Parameters
757 @subsubsection Window Management Parameters
758 @cindex window manager interaction, and frame parameters
759
760 The following frame parameters control various aspects of the
761 frame's interaction with the window manager. They have no effect on
762 text terminals.
763
764 @table @code
765 @vindex visibility, a frame parameter
766 @item visibility
767 The state of visibility of the frame. There are three possibilities:
768 @code{nil} for invisible, @code{t} for visible, and @code{icon} for
769 iconified. @xref{Visibility of Frames}.
770
771 @vindex auto-raise, a frame parameter
772 @item auto-raise
773 If non-@code{nil}, Emacs automatically raises the frame when it is
774 selected. Some window managers do not allow this.
775
776 @vindex auto-lower, a frame parameter
777 @item auto-lower
778 If non-@code{nil}, Emacs automatically lowers the frame when it is
779 deselected. Some window managers do not allow this.
780
781 @vindex icon-type, a frame parameter
782 @item icon-type
783 The type of icon to use for this frame. If the value is a string,
784 that specifies a file containing a bitmap to use; @code{nil} specifies
785 no icon (in which case the window manager decides what to show); any
786 other non-@code{nil} value specifies the default Emacs icon.
787
788 @vindex icon-name, a frame parameter
789 @item icon-name
790 The name to use in the icon for this frame, when and if the icon
791 appears. If this is @code{nil}, the frame's title is used.
792
793 @vindex window-id, a frame parameter
794 @item window-id
795 The ID number which the graphical display uses for this frame. Emacs
796 assigns this parameter when the frame is created; changing the
797 parameter has no effect on the actual ID number.
798
799 @vindex outer-window-id, a frame parameter
800 @item outer-window-id
801 The ID number of the outermost window-system window in which the frame
802 exists. As with @code{window-id}, changing this parameter has no
803 actual effect.
804
805 @vindex wait-for-wm, a frame parameter
806 @item wait-for-wm
807 If non-@code{nil}, tell Xt to wait for the window manager to confirm
808 geometry changes. Some window managers, including versions of Fvwm2
809 and KDE, fail to confirm, so Xt hangs. Set this to @code{nil} to
810 prevent hanging with those window managers.
811
812 @vindex sticky, a frame parameter
813 @item sticky
814 If non-@code{nil}, the frame is visible on all virtual desktops on systems
815 with virtual desktops.
816
817 @ignore
818 @vindex parent-id, a frame parameter
819 @item parent-id
820 @c ??? Not yet working.
821 The X window number of the window that should be the parent of this one.
822 Specifying this lets you create an Emacs window inside some other
823 application's window. (It is not certain this will be implemented; try
824 it and see if it works.)
825 @end ignore
826 @end table
827
828 @node Cursor Parameters
829 @subsubsection Cursor Parameters
830 @cindex cursor, and frame parameters
831
832 This frame parameter controls the way the cursor looks.
833
834 @table @code
835 @vindex cursor-type, a frame parameter
836 @item cursor-type
837 How to display the cursor. Legitimate values are:
838
839 @table @code
840 @item box
841 Display a filled box. (This is the default.)
842 @item hollow
843 Display a hollow box.
844 @item nil
845 Don't display a cursor.
846 @item bar
847 Display a vertical bar between characters.
848 @item (bar . @var{width})
849 Display a vertical bar @var{width} pixels wide between characters.
850 @item hbar
851 Display a horizontal bar.
852 @item (hbar . @var{height})
853 Display a horizontal bar @var{height} pixels high.
854 @end table
855 @end table
856
857 @vindex cursor-type
858 The @code{cursor-type} frame parameter may be overridden by the
859 variables @code{cursor-type} and
860 @code{cursor-in-non-selected-windows}:
861
862 @defvar cursor-type
863 This buffer-local variable controls how the cursor looks in a selected
864 window showing the buffer. If its value is @code{t}, that means to
865 use the cursor specified by the @code{cursor-type} frame parameter.
866 Otherwise, the value should be one of the cursor types listed above,
867 and it overrides the @code{cursor-type} frame parameter.
868 @end defvar
869
870 @defopt cursor-in-non-selected-windows
871 This buffer-local variable controls how the cursor looks in a window
872 that is not selected. It supports the same values as the
873 @code{cursor-type} frame parameter; also, @code{nil} means don't
874 display a cursor in nonselected windows, and @code{t} (the default)
875 means use a standard modification of the usual cursor type (solid box
876 becomes hollow box, and bar becomes a narrower bar).
877 @end defopt
878
879 @defopt blink-cursor-alist
880 This variable specifies how to blink the cursor. Each element has the
881 form @code{(@var{on-state} . @var{off-state})}. Whenever the cursor
882 type equals @var{on-state} (comparing using @code{equal}), the
883 corresponding @var{off-state} specifies what the cursor looks like
884 when it blinks ``off''. Both @var{on-state} and @var{off-state}
885 should be suitable values for the @code{cursor-type} frame parameter.
886
887 There are various defaults for how to blink each type of cursor, if
888 the type is not mentioned as an @var{on-state} here. Changes in this
889 variable do not take effect immediately, only when you specify the
890 @code{cursor-type} frame parameter.
891 @end defopt
892
893 @node Font and Color Parameters
894 @subsubsection Font and Color Parameters
895 @cindex font and color, frame parameters
896
897 These frame parameters control the use of fonts and colors.
898
899 @table @code
900 @vindex font-backend, a frame parameter
901 @item font-backend
902 A list of symbols, specifying the @dfn{font backends} to use for
903 drawing fonts in the frame, in order of priority. On X, there are
904 currently two available font backends: @code{x} (the X core font
905 driver) and @code{xft} (the Xft font driver). On Windows, there are
906 currently two available font backends: @code{gdi} and
907 @code{uniscribe} (@pxref{Windows Fonts,,, emacs, The GNU Emacs
908 Manual}). On other systems, there is only one available font backend,
909 so it does not make sense to modify this frame parameter.
910
911 @vindex background-mode, a frame parameter
912 @item background-mode
913 This parameter is either @code{dark} or @code{light}, according
914 to whether the background color is a light one or a dark one.
915
916 @vindex tty-color-mode, a frame parameter
917 @item tty-color-mode
918 @cindex standard colors for character terminals
919 This parameter overrides the terminal's color support as given by the
920 system's terminal capabilities database in that this parameter's value
921 specifies the color mode to use on a text terminal. The value can be
922 either a symbol or a number. A number specifies the number of colors
923 to use (and, indirectly, what commands to issue to produce each
924 color). For example, @code{(tty-color-mode . 8)} specifies use of the
925 ANSI escape sequences for 8 standard text colors. A value of -1 turns
926 off color support.
927
928 If the parameter's value is a symbol, it specifies a number through
929 the value of @code{tty-color-mode-alist}, and the associated number is
930 used instead.
931
932 @vindex screen-gamma, a frame parameter
933 @item screen-gamma
934 @cindex gamma correction
935 If this is a number, Emacs performs ``gamma correction'' which adjusts
936 the brightness of all colors. The value should be the screen gamma of
937 your display, a floating point number.
938
939 Usual PC monitors have a screen gamma of 2.2, so color values in
940 Emacs, and in X windows generally, are calibrated to display properly
941 on a monitor with that gamma value. If you specify 2.2 for
942 @code{screen-gamma}, that means no correction is needed. Other values
943 request correction, designed to make the corrected colors appear on
944 your screen the way they would have appeared without correction on an
945 ordinary monitor with a gamma value of 2.2.
946
947 If your monitor displays colors too light, you should specify a
948 @code{screen-gamma} value smaller than 2.2. This requests correction
949 that makes colors darker. A screen gamma value of 1.5 may give good
950 results for LCD color displays.
951
952 @vindex alpha, a frame parameter
953 @item alpha
954 @cindex opacity, frame
955 @cindex transparency, frame
956 @vindex frame-alpha-lower-limit
957 This parameter specifies the opacity of the frame, on graphical
958 displays that support variable opacity. It should be an integer
959 between 0 and 100, where 0 means completely transparent and 100 means
960 completely opaque. It can also have a @code{nil} value, which tells
961 Emacs not to set the frame opacity (leaving it to the window manager).
962
963 To prevent the frame from disappearing completely from view, the
964 variable @code{frame-alpha-lower-limit} defines a lower opacity limit.
965 If the value of the frame parameter is less than the value of this
966 variable, Emacs uses the latter. By default,
967 @code{frame-alpha-lower-limit} is 20.
968
969 The @code{alpha} frame parameter can also be a cons cell
970 @code{(@samp{active} . @samp{inactive})}, where @samp{active} is the
971 opacity of the frame when it is selected, and @samp{inactive} is the
972 opacity when it is not selected.
973 @end table
974
975 The following frame parameters are semi-obsolete in that they are
976 automatically equivalent to particular face attributes of particular
977 faces (@pxref{Standard Faces,,, emacs, The Emacs Manual}):
978
979 @table @code
980 @vindex font, a frame parameter
981 @item font
982 The name of the font for displaying text in the frame. This is a
983 string, either a valid font name for your system or the name of an Emacs
984 fontset (@pxref{Fontsets}). It is equivalent to the @code{font}
985 attribute of the @code{default} face.
986
987 @vindex foreground-color, a frame parameter
988 @item foreground-color
989 The color to use for the image of a character. It is equivalent to
990 the @code{:foreground} attribute of the @code{default} face.
991
992 @vindex background-color, a frame parameter
993 @item background-color
994 The color to use for the background of characters. It is equivalent to
995 the @code{:background} attribute of the @code{default} face.
996
997 @vindex mouse-color, a frame parameter
998 @item mouse-color
999 The color for the mouse pointer. It is equivalent to the @code{:background}
1000 attribute of the @code{mouse} face.
1001
1002 @vindex cursor-color, a frame parameter
1003 @item cursor-color
1004 The color for the cursor that shows point. It is equivalent to the
1005 @code{:background} attribute of the @code{cursor} face.
1006
1007 @vindex border-color, a frame parameter
1008 @item border-color
1009 The color for the border of the frame. It is equivalent to the
1010 @code{:background} attribute of the @code{border} face.
1011
1012 @vindex scroll-bar-foreground, a frame parameter
1013 @item scroll-bar-foreground
1014 If non-@code{nil}, the color for the foreground of scroll bars. It is
1015 equivalent to the @code{:foreground} attribute of the
1016 @code{scroll-bar} face.
1017
1018 @vindex scroll-bar-background, a frame parameter
1019 @item scroll-bar-background
1020 If non-@code{nil}, the color for the background of scroll bars. It is
1021 equivalent to the @code{:background} attribute of the
1022 @code{scroll-bar} face.
1023 @end table
1024
1025 @node Size and Position
1026 @subsection Frame Size And Position
1027 @cindex size of frame
1028 @cindex screen size
1029 @cindex frame size
1030 @cindex resize frame
1031
1032 You can read or change the size and position of a frame using the
1033 frame parameters @code{left}, @code{top}, @code{height}, and
1034 @code{width}. Whatever geometry parameters you don't specify are chosen
1035 by the window manager in its usual fashion.
1036
1037 Here are some special features for working with sizes and positions.
1038 (For the precise meaning of ``selected frame'' used by these functions,
1039 see @ref{Input Focus}.)
1040
1041 @defun set-frame-position frame left top
1042 This function sets the position of the top left corner of @var{frame} to
1043 @var{left} and @var{top}. These arguments are measured in pixels, and
1044 normally count from the top left corner of the screen.
1045
1046 Negative parameter values position the bottom edge of the window up from
1047 the bottom edge of the screen, or the right window edge to the left of
1048 the right edge of the screen. It would probably be better if the values
1049 were always counted from the left and top, so that negative arguments
1050 would position the frame partly off the top or left edge of the screen,
1051 but it seems inadvisable to change that now.
1052 @end defun
1053
1054 @defun frame-height &optional frame
1055 @defunx frame-width &optional frame
1056 These functions return the height and width of @var{frame}, measured in
1057 lines and columns. If you don't supply @var{frame}, they use the
1058 selected frame.
1059 @end defun
1060
1061 @defun frame-pixel-height &optional frame
1062 @defunx frame-pixel-width &optional frame
1063 These functions return the height and width of the main display area
1064 of @var{frame}, measured in pixels. If you don't supply @var{frame},
1065 they use the selected frame. For a text terminal, the results are in
1066 characters rather than pixels.
1067
1068 These values include the internal borders, and windows' scroll bars
1069 and fringes (which belong to individual windows, not to the frame
1070 itself). The exact value of the heights depends on the window-system
1071 and toolkit in use. With GTK+, the height does not include any tool
1072 bar or menu bar. With the Motif or Lucid toolkits, it includes the
1073 tool bar but not the menu bar. In a graphical version with no
1074 toolkit, it includes both the tool bar and menu bar. For a text
1075 terminal, the result includes the menu bar.
1076 @end defun
1077
1078 @defun frame-char-height &optional frame
1079 @defunx frame-char-width &optional frame
1080 These functions return the height and width of a character in
1081 @var{frame}, measured in pixels. The values depend on the choice of
1082 font. If you don't supply @var{frame}, these functions use the selected
1083 frame.
1084 @end defun
1085
1086 @defun set-frame-size frame cols rows
1087 This function sets the size of @var{frame}, measured in characters;
1088 @var{cols} and @var{rows} specify the new width and height.
1089
1090 To set the size based on values measured in pixels, use
1091 @code{frame-char-height} and @code{frame-char-width} to convert
1092 them to units of characters.
1093 @end defun
1094
1095 @defun set-frame-height frame lines &optional pretend
1096 This function resizes @var{frame} to a height of @var{lines} lines. The
1097 sizes of existing windows in @var{frame} are altered proportionally to
1098 fit.
1099
1100 If @var{pretend} is non-@code{nil}, then Emacs displays @var{lines}
1101 lines of output in @var{frame}, but does not change its value for the
1102 actual height of the frame. This is only useful on text terminals.
1103 Using a smaller height than the terminal actually implements may be
1104 useful to reproduce behavior observed on a smaller screen, or if the
1105 terminal malfunctions when using its whole screen. Setting the frame
1106 height ``for real'' does not always work, because knowing the correct
1107 actual size may be necessary for correct cursor positioning on
1108 text terminals.
1109 @end defun
1110
1111 @defun set-frame-width frame width &optional pretend
1112 This function sets the width of @var{frame}, measured in characters.
1113 The argument @var{pretend} has the same meaning as in
1114 @code{set-frame-height}.
1115 @end defun
1116
1117 @c FIXME? Belongs more in Emacs manual than here?
1118 @c But, e.g., fit-window-to-buffer is in this manual.
1119 @deffn Command fit-frame-to-buffer &optional frame max-height min-height
1120 This command adjusts the height of @var{frame} (the default is the
1121 selected frame) to fit its contents. The optional arguments
1122 @var{max-height} and @var{min-height} specify the maximum and minimum
1123 new frame heights, respectively.
1124
1125 @vindex fit-frame-to-buffer-bottom-margin
1126 The default minimum height corresponds to @code{window-min-height}.
1127 The default maximum height is the screen height below the current top
1128 position of the frame, minus any margin specified by the option
1129 @code{fit-frame-to-buffer-bottom-margin}.
1130 @end deffn
1131
1132 @node Geometry
1133 @subsection Geometry
1134
1135 Here's how to examine the data in an X-style window geometry
1136 specification:
1137
1138 @defun x-parse-geometry geom
1139 @cindex geometry specification
1140 The function @code{x-parse-geometry} converts a standard X window
1141 geometry string to an alist that you can use as part of the argument to
1142 @code{make-frame}.
1143
1144 The alist describes which parameters were specified in @var{geom}, and
1145 gives the values specified for them. Each element looks like
1146 @code{(@var{parameter} . @var{value})}. The possible @var{parameter}
1147 values are @code{left}, @code{top}, @code{width}, and @code{height}.
1148
1149 For the size parameters, the value must be an integer. The position
1150 parameter names @code{left} and @code{top} are not totally accurate,
1151 because some values indicate the position of the right or bottom edges
1152 instead. The @var{value} possibilities for the position parameters are:
1153 an integer, a list @code{(+ @var{pos})}, or a list @code{(- @var{pos})};
1154 as previously described (@pxref{Position Parameters}).
1155
1156 Here is an example:
1157
1158 @example
1159 (x-parse-geometry "35x70+0-0")
1160 @result{} ((height . 70) (width . 35)
1161 (top - 0) (left . 0))
1162 @end example
1163 @end defun
1164
1165 @node Terminal Parameters
1166 @section Terminal Parameters
1167 @cindex terminal parameters
1168
1169 Each terminal has a list of associated parameters. These
1170 @dfn{terminal parameters} are mostly a convenient way of storage for
1171 terminal-local variables, but some terminal parameters have a special
1172 meaning.
1173
1174 This section describes functions to read and change the parameter values
1175 of a terminal. They all accept as their argument either a terminal or
1176 a frame; the latter means use that frame's terminal. An argument of
1177 @code{nil} means the selected frame's terminal.
1178
1179 @defun terminal-parameters &optional terminal
1180 This function returns an alist listing all the parameters of
1181 @var{terminal} and their values.
1182 @end defun
1183
1184 @defun terminal-parameter terminal parameter
1185 This function returns the value of the parameter @var{parameter} (a
1186 symbol) of @var{terminal}. If @var{terminal} has no setting for
1187 @var{parameter}, this function returns @code{nil}.
1188 @end defun
1189
1190 @defun set-terminal-parameter terminal parameter value
1191 This function sets the parameter @var{parm} of @var{terminal} to the
1192 specified @var{value}, and returns the previous value of that
1193 parameter.
1194 @end defun
1195
1196 Here's a list of a few terminal parameters that have a special
1197 meaning:
1198
1199 @table @code
1200 @item background-mode
1201 The classification of the terminal's background color, either
1202 @code{light} or @code{dark}.
1203 @item normal-erase-is-backspace
1204 Value is either 1 or 0, depending on whether
1205 @code{normal-erase-is-backspace-mode} is turned on or off on this
1206 terminal. @xref{DEL Does Not Delete,,, emacs, The Emacs Manual}.
1207 @item terminal-initted
1208 After the terminal is initialized, this is set to the
1209 terminal-specific initialization function.
1210 @end table
1211
1212 @node Frame Titles
1213 @section Frame Titles
1214 @cindex frame title
1215
1216 Every frame has a @code{name} parameter; this serves as the default
1217 for the frame title which window systems typically display at the top of
1218 the frame. You can specify a name explicitly by setting the @code{name}
1219 frame property.
1220
1221 Normally you don't specify the name explicitly, and Emacs computes the
1222 frame name automatically based on a template stored in the variable
1223 @code{frame-title-format}. Emacs recomputes the name each time the
1224 frame is redisplayed.
1225
1226 @defvar frame-title-format
1227 This variable specifies how to compute a name for a frame when you have
1228 not explicitly specified one. The variable's value is actually a mode
1229 line construct, just like @code{mode-line-format}, except that the
1230 @samp{%c} and @samp{%l} constructs are ignored. @xref{Mode Line
1231 Data}.
1232 @end defvar
1233
1234 @defvar icon-title-format
1235 This variable specifies how to compute the name for an iconified frame,
1236 when you have not explicitly specified the frame title. This title
1237 appears in the icon itself.
1238 @end defvar
1239
1240 @defvar multiple-frames
1241 This variable is set automatically by Emacs. Its value is @code{t} when
1242 there are two or more frames (not counting minibuffer-only frames or
1243 invisible frames). The default value of @code{frame-title-format} uses
1244 @code{multiple-frames} so as to put the buffer name in the frame title
1245 only when there is more than one frame.
1246
1247 The value of this variable is not guaranteed to be accurate except
1248 while processing @code{frame-title-format} or
1249 @code{icon-title-format}.
1250 @end defvar
1251
1252 @node Deleting Frames
1253 @section Deleting Frames
1254 @cindex deleting frames
1255
1256 A @dfn{live frame} is one that has not been deleted. When a frame
1257 is deleted, it is removed from its terminal display, although it may
1258 continue to exist as a Lisp object until there are no more references
1259 to it.
1260
1261 @deffn Command delete-frame &optional frame force
1262 @vindex delete-frame-functions
1263 This function deletes the frame @var{frame}. Unless @var{frame} is a
1264 tooltip, it first runs the hook @code{delete-frame-functions} (each
1265 function gets one argument, @var{frame}). By default, @var{frame} is
1266 the selected frame.
1267
1268 A frame cannot be deleted if its minibuffer is used by other frames.
1269 Normally, you cannot delete a frame if all other frames are invisible,
1270 but if @var{force} is non-@code{nil}, then you are allowed to do so.
1271 @end deffn
1272
1273 @defun frame-live-p frame
1274 The function @code{frame-live-p} returns non-@code{nil} if the frame
1275 @var{frame} has not been deleted. The possible non-@code{nil} return
1276 values are like those of @code{framep}. @xref{Frames}.
1277 @end defun
1278
1279 Some window managers provide a command to delete a window. These work
1280 by sending a special message to the program that operates the window.
1281 When Emacs gets one of these commands, it generates a
1282 @code{delete-frame} event, whose normal definition is a command that
1283 calls the function @code{delete-frame}. @xref{Misc Events}.
1284
1285 @node Finding All Frames
1286 @section Finding All Frames
1287 @cindex frames, scanning all
1288
1289 @defun frame-list
1290 This function returns a list of all the live frames, i.e., those that
1291 have not been deleted. It is analogous to @code{buffer-list} for
1292 buffers, and includes frames on all terminals. The list that you get
1293 is newly created, so modifying the list doesn't have any effect on the
1294 internals of Emacs.
1295 @end defun
1296
1297 @defun visible-frame-list
1298 This function returns a list of just the currently visible frames.
1299 @xref{Visibility of Frames}. Frames on text terminals always count as
1300 ``visible'', even though only the selected one is actually displayed.
1301 @end defun
1302
1303 @defun next-frame &optional frame minibuf
1304 This function lets you cycle conveniently through all the frames on
1305 the current display from an arbitrary starting point. It returns the
1306 ``next'' frame after @var{frame} in the cycle. If @var{frame} is
1307 omitted or @code{nil}, it defaults to the selected frame (@pxref{Input
1308 Focus}).
1309
1310 The second argument, @var{minibuf}, says which frames to consider:
1311
1312 @table @asis
1313 @item @code{nil}
1314 Exclude minibuffer-only frames.
1315 @item @code{visible}
1316 Consider all visible frames.
1317 @item 0
1318 Consider all visible or iconified frames.
1319 @item a window
1320 Consider only the frames using that particular window as their
1321 minibuffer.
1322 @item anything else
1323 Consider all frames.
1324 @end table
1325 @end defun
1326
1327 @defun previous-frame &optional frame minibuf
1328 Like @code{next-frame}, but cycles through all frames in the opposite
1329 direction.
1330 @end defun
1331
1332 See also @code{next-window} and @code{previous-window}, in @ref{Cyclic
1333 Window Ordering}.
1334
1335 @node Minibuffers and Frames
1336 @section Minibuffers and Frames
1337
1338 Normally, each frame has its own minibuffer window at the bottom, which
1339 is used whenever that frame is selected. If the frame has a minibuffer,
1340 you can get it with @code{minibuffer-window} (@pxref{Definition of
1341 minibuffer-window}).
1342
1343 However, you can also create a frame with no minibuffer. Such a frame
1344 must use the minibuffer window of some other frame. When you create the
1345 frame, you can explicitly specify the minibuffer window to use (in some
1346 other frame). If you don't, then the minibuffer is found in the frame
1347 which is the value of the variable @code{default-minibuffer-frame}. Its
1348 value should be a frame that does have a minibuffer.
1349
1350 If you use a minibuffer-only frame, you might want that frame to raise
1351 when you enter the minibuffer. If so, set the variable
1352 @code{minibuffer-auto-raise} to @code{t}. @xref{Raising and Lowering}.
1353
1354 @defvar default-minibuffer-frame
1355 This variable specifies the frame to use for the minibuffer window, by
1356 default. It does not affect existing frames. It is always local to
1357 the current terminal and cannot be buffer-local. @xref{Multiple
1358 Terminals}.
1359 @end defvar
1360
1361 @node Input Focus
1362 @section Input Focus
1363 @cindex input focus
1364 @c @cindex selected frame Duplicates selected-frame
1365
1366 At any time, one frame in Emacs is the @dfn{selected frame}. The selected
1367 window always resides on the selected frame.
1368
1369 When Emacs displays its frames on several terminals (@pxref{Multiple
1370 Terminals}), each terminal has its own selected frame. But only one
1371 of these is ``@emph{the} selected frame'': it's the frame that belongs
1372 to the terminal from which the most recent input came. That is, when
1373 Emacs runs a command that came from a certain terminal, the selected
1374 frame is the one of that terminal. Since Emacs runs only a single
1375 command at any given time, it needs to consider only one selected
1376 frame at a time; this frame is what we call @dfn{the selected frame}
1377 in this manual. The display on which the selected frame is shown is
1378 the @dfn{selected frame's display}.
1379
1380 @defun selected-frame
1381 This function returns the selected frame.
1382 @end defun
1383
1384 Some window systems and window managers direct keyboard input to the
1385 window object that the mouse is in; others require explicit clicks or
1386 commands to @dfn{shift the focus} to various window objects. Either
1387 way, Emacs automatically keeps track of which frame has the focus. To
1388 explicitly switch to a different frame from a Lisp function, call
1389 @code{select-frame-set-input-focus}.
1390
1391 Lisp programs can also switch frames ``temporarily'' by calling the
1392 function @code{select-frame}. This does not alter the window system's
1393 concept of focus; rather, it escapes from the window manager's control
1394 until that control is somehow reasserted.
1395
1396 When using a text terminal, only one frame can be displayed at a time
1397 on the terminal, so after a call to @code{select-frame}, the next
1398 redisplay actually displays the newly selected frame. This frame
1399 remains selected until a subsequent call to @code{select-frame}. Each
1400 frame on a text terminal has a number which appears in the mode line
1401 before the buffer name (@pxref{Mode Line Variables}).
1402
1403 @defun select-frame-set-input-focus frame &optional norecord
1404 This function selects @var{frame}, raises it (should it happen to be
1405 obscured by other frames) and tries to give it the X server's focus.
1406 On a text terminal, the next redisplay displays the new frame on the
1407 entire terminal screen. The optional argument @var{norecord} has the
1408 same meaning as for @code{select-frame} (see below). The return value
1409 of this function is not significant.
1410 @end defun
1411
1412 @deffn Command select-frame frame &optional norecord
1413 This function selects frame @var{frame}, temporarily disregarding the
1414 focus of the X server if any. The selection of @var{frame} lasts until
1415 the next time the user does something to select a different frame, or
1416 until the next time this function is called. (If you are using a
1417 window system, the previously selected frame may be restored as the
1418 selected frame after return to the command loop, because it still may
1419 have the window system's input focus.)
1420
1421 The specified @var{frame} becomes the selected frame, and its terminal
1422 becomes the selected terminal. This function then calls
1423 @code{select-window} as a subroutine, passing the window selected
1424 within @var{frame} as its first argument and @var{norecord} as its
1425 second argument (hence, if @var{norecord} is non-@code{nil}, this
1426 avoids changing the order of recently selected windows nor the buffer
1427 list). @xref{Selecting Windows}.
1428
1429 This function returns @var{frame}, or @code{nil} if @var{frame} has
1430 been deleted.
1431
1432 In general, you should never use @code{select-frame} in a way that
1433 could switch to a different terminal without switching back when
1434 you're done.
1435 @end deffn
1436
1437 Emacs cooperates with the window system by arranging to select frames as
1438 the server and window manager request. It does so by generating a
1439 special kind of input event, called a @dfn{focus} event, when
1440 appropriate. The command loop handles a focus event by calling
1441 @code{handle-switch-frame}. @xref{Focus Events}.
1442
1443 @deffn Command handle-switch-frame frame
1444 This function handles a focus event by selecting frame @var{frame}.
1445
1446 Focus events normally do their job by invoking this command.
1447 Don't call it for any other reason.
1448 @end deffn
1449
1450 @defun redirect-frame-focus frame &optional focus-frame
1451 This function redirects focus from @var{frame} to @var{focus-frame}.
1452 This means that @var{focus-frame} will receive subsequent keystrokes and
1453 events intended for @var{frame}. After such an event, the value of
1454 @code{last-event-frame} will be @var{focus-frame}. Also, switch-frame
1455 events specifying @var{frame} will instead select @var{focus-frame}.
1456
1457 If @var{focus-frame} is omitted or @code{nil}, that cancels any existing
1458 redirection for @var{frame}, which therefore once again receives its own
1459 events.
1460
1461 One use of focus redirection is for frames that don't have minibuffers.
1462 These frames use minibuffers on other frames. Activating a minibuffer
1463 on another frame redirects focus to that frame. This puts the focus on
1464 the minibuffer's frame, where it belongs, even though the mouse remains
1465 in the frame that activated the minibuffer.
1466
1467 Selecting a frame can also change focus redirections. Selecting frame
1468 @code{bar}, when @code{foo} had been selected, changes any redirections
1469 pointing to @code{foo} so that they point to @code{bar} instead. This
1470 allows focus redirection to work properly when the user switches from
1471 one frame to another using @code{select-window}.
1472
1473 This means that a frame whose focus is redirected to itself is treated
1474 differently from a frame whose focus is not redirected.
1475 @code{select-frame} affects the former but not the latter.
1476
1477 The redirection lasts until @code{redirect-frame-focus} is called to
1478 change it.
1479 @end defun
1480
1481 @defopt focus-follows-mouse
1482 This option is how you inform Emacs whether the window manager transfers
1483 focus when the user moves the mouse. Non-@code{nil} says that it does.
1484 When this is so, the command @code{other-frame} moves the mouse to a
1485 position consistent with the new selected frame.
1486 @end defopt
1487
1488 @node Visibility of Frames
1489 @section Visibility of Frames
1490 @cindex visible frame
1491 @cindex invisible frame
1492 @cindex iconified frame
1493 @cindex minimized frame
1494 @cindex frame visibility
1495
1496 A frame on a graphical display may be @dfn{visible}, @dfn{invisible},
1497 or @dfn{iconified}. If it is visible, its contents are displayed in
1498 the usual manner. If it is iconified, its contents are not displayed,
1499 but there is a little icon somewhere to bring the frame back into view
1500 (some window managers refer to this state as @dfn{minimized} rather
1501 than @dfn{iconified}, but from Emacs' point of view they are the same
1502 thing). If a frame is invisible, it is not displayed at all.
1503
1504 Visibility is meaningless on text terminals, since only the selected
1505 one is actually displayed in any case.
1506
1507 @defun frame-visible-p frame
1508 This function returns the visibility status of frame @var{frame}. The
1509 value is @code{t} if @var{frame} is visible, @code{nil} if it is
1510 invisible, and @code{icon} if it is iconified.
1511
1512 On a text terminal, all frames are considered ``visible'' for the
1513 purposes of this function, even though only one frame is displayed.
1514 @xref{Raising and Lowering}.
1515 @end defun
1516
1517 @deffn Command iconify-frame &optional frame
1518 This function iconifies frame @var{frame}. If you omit @var{frame}, it
1519 iconifies the selected frame.
1520 @end deffn
1521
1522 @deffn Command make-frame-visible &optional frame
1523 This function makes frame @var{frame} visible. If you omit
1524 @var{frame}, it makes the selected frame visible. This does not raise
1525 the frame, but you can do that with @code{raise-frame} if you wish
1526 (@pxref{Raising and Lowering}).
1527 @end deffn
1528
1529 @deffn Command make-frame-invisible &optional frame force
1530 This function makes frame @var{frame} invisible. If you omit
1531 @var{frame}, it makes the selected frame invisible.
1532
1533 Unless @var{force} is non-@code{nil}, this function refuses to make
1534 @var{frame} invisible if all other frames are invisible..
1535 @end deffn
1536
1537 The visibility status of a frame is also available as a frame
1538 parameter. You can read or change it as such. @xref{Management
1539 Parameters}. The user can also iconify and deiconify frames with the
1540 window manager. This happens below the level at which Emacs can exert
1541 any control, but Emacs does provide events that you can use to keep
1542 track of such changes. @xref{Misc Events}.
1543
1544 @node Raising and Lowering
1545 @section Raising and Lowering Frames
1546
1547 @cindex raising a frame
1548 @cindex lowering a frame
1549 Most window systems use a desktop metaphor. Part of this metaphor
1550 is the idea that system-level windows (e.g., Emacs frames) are
1551 stacked in a notional third dimension perpendicular to the screen
1552 surface. Where two overlap, the one higher up covers the one
1553 underneath. You can @dfn{raise} or @dfn{lower} a frame using the
1554 functions @code{raise-frame} and @code{lower-frame}.
1555
1556 @deffn Command raise-frame &optional frame
1557 This function raises frame @var{frame} (default, the selected frame).
1558 If @var{frame} is invisible or iconified, this makes it visible.
1559 @end deffn
1560
1561 @deffn Command lower-frame &optional frame
1562 This function lowers frame @var{frame} (default, the selected frame).
1563 @end deffn
1564
1565 @defopt minibuffer-auto-raise
1566 If this is non-@code{nil}, activation of the minibuffer raises the frame
1567 that the minibuffer window is in.
1568 @end defopt
1569
1570 On window systems, you can also enable auto-raising (on frame
1571 selection) or auto-lowering (on frame deselection) using frame
1572 parameters. @xref{Management Parameters}.
1573
1574 @cindex top frame
1575 The concept of raising and lowering frames also applies to text
1576 terminal frames. On each text terminal, only the top frame is
1577 displayed at any one time.
1578
1579 @defun tty-top-frame terminal
1580 This function returns the top frame on @var{terminal}. @var{terminal}
1581 should be a terminal object, a frame (meaning that frame's terminal),
1582 or @code{nil} (meaning the selected frame's terminal). If it does not
1583 refer to a text terminal, the return value is @code{nil}.
1584 @end defun
1585
1586 @node Frame Configurations
1587 @section Frame Configurations
1588 @cindex frame configuration
1589
1590 A @dfn{frame configuration} records the current arrangement of frames,
1591 all their properties, and the window configuration of each one.
1592 (@xref{Window Configurations}.)
1593
1594 @defun current-frame-configuration
1595 This function returns a frame configuration list that describes
1596 the current arrangement of frames and their contents.
1597 @end defun
1598
1599 @defun set-frame-configuration configuration &optional nodelete
1600 This function restores the state of frames described in
1601 @var{configuration}. However, this function does not restore deleted
1602 frames.
1603
1604 Ordinarily, this function deletes all existing frames not listed in
1605 @var{configuration}. But if @var{nodelete} is non-@code{nil}, the
1606 unwanted frames are iconified instead.
1607 @end defun
1608
1609 @node Mouse Tracking
1610 @section Mouse Tracking
1611 @cindex mouse tracking
1612 @c @cindex tracking the mouse Duplicates track-mouse
1613
1614 Sometimes it is useful to @dfn{track} the mouse, which means to display
1615 something to indicate where the mouse is and move the indicator as the
1616 mouse moves. For efficient mouse tracking, you need a way to wait until
1617 the mouse actually moves.
1618
1619 The convenient way to track the mouse is to ask for events to represent
1620 mouse motion. Then you can wait for motion by waiting for an event. In
1621 addition, you can easily handle any other sorts of events that may
1622 occur. That is useful, because normally you don't want to track the
1623 mouse forever---only until some other event, such as the release of a
1624 button.
1625
1626 @defspec track-mouse body@dots{}
1627 This special form executes @var{body}, with generation of mouse motion
1628 events enabled. Typically, @var{body} would use @code{read-event} to
1629 read the motion events and modify the display accordingly. @xref{Motion
1630 Events}, for the format of mouse motion events.
1631
1632 The value of @code{track-mouse} is that of the last form in @var{body}.
1633 You should design @var{body} to return when it sees the up-event that
1634 indicates the release of the button, or whatever kind of event means
1635 it is time to stop tracking.
1636 @end defspec
1637
1638 The usual purpose of tracking mouse motion is to indicate on the screen
1639 the consequences of pushing or releasing a button at the current
1640 position.
1641
1642 In many cases, you can avoid the need to track the mouse by using
1643 the @code{mouse-face} text property (@pxref{Special Properties}).
1644 That works at a much lower level and runs more smoothly than
1645 Lisp-level mouse tracking.
1646
1647 @ignore
1648 @c These are not implemented yet.
1649
1650 These functions change the screen appearance instantaneously. The
1651 effect is transient, only until the next ordinary Emacs redisplay. That
1652 is OK for mouse tracking, since it doesn't make sense for mouse tracking
1653 to change the text, and the body of @code{track-mouse} normally reads
1654 the events itself and does not do redisplay.
1655
1656 @defun x-contour-region window beg end
1657 This function draws lines to make a box around the text from @var{beg}
1658 to @var{end}, in window @var{window}.
1659 @end defun
1660
1661 @defun x-uncontour-region window beg end
1662 This function erases the lines that would make a box around the text
1663 from @var{beg} to @var{end}, in window @var{window}. Use it to remove
1664 a contour that you previously made by calling @code{x-contour-region}.
1665 @end defun
1666
1667 @defun x-draw-rectangle frame left top right bottom
1668 This function draws a hollow rectangle on frame @var{frame} with the
1669 specified edge coordinates, all measured in pixels from the inside top
1670 left corner. It uses the cursor color, the one used for indicating the
1671 location of point.
1672 @end defun
1673
1674 @defun x-erase-rectangle frame left top right bottom
1675 This function erases a hollow rectangle on frame @var{frame} with the
1676 specified edge coordinates, all measured in pixels from the inside top
1677 left corner. Erasure means redrawing the text and background that
1678 normally belong in the specified rectangle.
1679 @end defun
1680 @end ignore
1681
1682 @node Mouse Position
1683 @section Mouse Position
1684 @cindex mouse position
1685 @cindex position of mouse
1686
1687 The functions @code{mouse-position} and @code{set-mouse-position}
1688 give access to the current position of the mouse.
1689
1690 @defun mouse-position
1691 This function returns a description of the position of the mouse. The
1692 value looks like @code{(@var{frame} @var{x} . @var{y})}, where @var{x}
1693 and @var{y} are integers giving the position in characters relative to
1694 the top left corner of the inside of @var{frame}.
1695 @end defun
1696
1697 @defvar mouse-position-function
1698 If non-@code{nil}, the value of this variable is a function for
1699 @code{mouse-position} to call. @code{mouse-position} calls this
1700 function just before returning, with its normal return value as the
1701 sole argument, and it returns whatever this function returns to it.
1702
1703 This abnormal hook exists for the benefit of packages like
1704 @file{xt-mouse.el} that need to do mouse handling at the Lisp level.
1705 @end defvar
1706
1707 @defun set-mouse-position frame x y
1708 This function @dfn{warps the mouse} to position @var{x}, @var{y} in
1709 frame @var{frame}. The arguments @var{x} and @var{y} are integers,
1710 giving the position in characters relative to the top left corner of the
1711 inside of @var{frame}. If @var{frame} is not visible, this function
1712 does nothing. The return value is not significant.
1713 @end defun
1714
1715 @defun mouse-pixel-position
1716 This function is like @code{mouse-position} except that it returns
1717 coordinates in units of pixels rather than units of characters.
1718 @end defun
1719
1720 @defun set-mouse-pixel-position frame x y
1721 This function warps the mouse like @code{set-mouse-position} except that
1722 @var{x} and @var{y} are in units of pixels rather than units of
1723 characters. These coordinates are not required to be within the frame.
1724
1725 If @var{frame} is not visible, this function does nothing. The return
1726 value is not significant.
1727 @end defun
1728
1729 @defun frame-pointer-visible-p &optional frame
1730 This predicate function returns non-@code{nil} if the mouse pointer
1731 displayed on @var{frame} is visible; otherwise it returns @code{nil}.
1732 @var{frame} omitted or @code{nil} means the selected frame. This is
1733 useful when @code{make-pointer-invisible} is set to @code{t}: it
1734 allows to know if the pointer has been hidden.
1735 @xref{Mouse Avoidance,,,emacs, The Emacs Manual}.
1736 @end defun
1737
1738 @need 3000
1739
1740 @node Pop-Up Menus
1741 @section Pop-Up Menus
1742
1743 When using a window system, a Lisp program can pop up a menu so that
1744 the user can choose an alternative with the mouse.
1745
1746 @defun x-popup-menu position menu
1747 This function displays a pop-up menu and returns an indication of
1748 what selection the user makes.
1749
1750 The argument @var{position} specifies where on the screen to put the
1751 top left corner of the menu. It can be either a mouse button event
1752 (which says to put the menu where the user actuated the button) or a
1753 list of this form:
1754
1755 @example
1756 ((@var{xoffset} @var{yoffset}) @var{window})
1757 @end example
1758
1759 @noindent
1760 where @var{xoffset} and @var{yoffset} are coordinates, measured in
1761 pixels, counting from the top left corner of @var{window}. @var{window}
1762 may be a window or a frame.
1763
1764 If @var{position} is @code{t}, it means to use the current mouse
1765 position. If @var{position} is @code{nil}, it means to precompute the
1766 key binding equivalents for the keymaps specified in @var{menu},
1767 without actually displaying or popping up the menu.
1768
1769 The argument @var{menu} says what to display in the menu. It can be a
1770 keymap or a list of keymaps (@pxref{Menu Keymaps}). In this case, the
1771 return value is the list of events corresponding to the user's choice.
1772 This list has more than one element if the choice occurred in a
1773 submenu. (Note that @code{x-popup-menu} does not actually execute the
1774 command bound to that sequence of events.) On toolkits that support
1775 menu titles, the title is taken from the prompt string of @var{menu}
1776 if @var{menu} is a keymap, or from the prompt string of the first
1777 keymap in @var{menu} if it is a list of keymaps (@pxref{Defining
1778 Menus}).
1779
1780 Alternatively, @var{menu} can have the following form:
1781
1782 @example
1783 (@var{title} @var{pane1} @var{pane2}...)
1784 @end example
1785
1786 @noindent
1787 where each pane is a list of form
1788
1789 @example
1790 (@var{title} @var{item1} @var{item2}...)
1791 @end example
1792
1793 Each @var{item} should be a cons cell, @code{(@var{line} . @var{value})},
1794 where @var{line} is a string and @var{value} is the value to return if
1795 that @var{line} is chosen. Unlike in a menu keymap, a @code{nil}
1796 @var{value} does not make the menu item non-selectable.
1797 Alternatively, each @var{item} can be a string rather than a cons
1798 cell; this makes a non-selectable menu item.
1799
1800 If the user gets rid of the menu without making a valid choice, for
1801 instance by clicking the mouse away from a valid choice or by typing
1802 keyboard input, then this normally results in a quit and
1803 @code{x-popup-menu} does not return. But if @var{position} is a mouse
1804 button event (indicating that the user invoked the menu with the
1805 mouse) then no quit occurs and @code{x-popup-menu} returns @code{nil}.
1806 @end defun
1807
1808 @strong{Usage note:} Don't use @code{x-popup-menu} to display a menu
1809 if you could do the job with a prefix key defined with a menu keymap.
1810 If you use a menu keymap to implement a menu, @kbd{C-h c} and @kbd{C-h
1811 a} can see the individual items in that menu and provide help for them.
1812 If instead you implement the menu by defining a command that calls
1813 @code{x-popup-menu}, the help facilities cannot know what happens inside
1814 that command, so they cannot give any help for the menu's items.
1815
1816 The menu bar mechanism, which lets you switch between submenus by
1817 moving the mouse, cannot look within the definition of a command to see
1818 that it calls @code{x-popup-menu}. Therefore, if you try to implement a
1819 submenu using @code{x-popup-menu}, it cannot work with the menu bar in
1820 an integrated fashion. This is why all menu bar submenus are
1821 implemented with menu keymaps within the parent menu, and never with
1822 @code{x-popup-menu}. @xref{Menu Bar}.
1823
1824 If you want a menu bar submenu to have contents that vary, you should
1825 still use a menu keymap to implement it. To make the contents vary, add
1826 a hook function to @code{menu-bar-update-hook} to update the contents of
1827 the menu keymap as necessary.
1828
1829 @node Dialog Boxes
1830 @section Dialog Boxes
1831 @cindex dialog boxes
1832
1833 A dialog box is a variant of a pop-up menu---it looks a little
1834 different, it always appears in the center of a frame, and it has just
1835 one level and one or more buttons. The main use of dialog boxes is
1836 for asking questions that the user can answer with ``yes'', ``no'',
1837 and a few other alternatives. With a single button, they can also
1838 force the user to acknowledge important information. The functions
1839 @code{y-or-n-p} and @code{yes-or-no-p} use dialog boxes instead of the
1840 keyboard, when called from commands invoked by mouse clicks.
1841
1842 @defun x-popup-dialog position contents &optional header
1843 This function displays a pop-up dialog box and returns an indication of
1844 what selection the user makes. The argument @var{contents} specifies
1845 the alternatives to offer; it has this format:
1846
1847 @example
1848 (@var{title} (@var{string} . @var{value})@dots{})
1849 @end example
1850
1851 @noindent
1852 which looks like the list that specifies a single pane for
1853 @code{x-popup-menu}.
1854
1855 The return value is @var{value} from the chosen alternative.
1856
1857 As for @code{x-popup-menu}, an element of the list may be just a
1858 string instead of a cons cell @code{(@var{string} . @var{value})}.
1859 That makes a box that cannot be selected.
1860
1861 If @code{nil} appears in the list, it separates the left-hand items from
1862 the right-hand items; items that precede the @code{nil} appear on the
1863 left, and items that follow the @code{nil} appear on the right. If you
1864 don't include a @code{nil} in the list, then approximately half the
1865 items appear on each side.
1866
1867 Dialog boxes always appear in the center of a frame; the argument
1868 @var{position} specifies which frame. The possible values are as in
1869 @code{x-popup-menu}, but the precise coordinates or the individual
1870 window don't matter; only the frame matters.
1871
1872 If @var{header} is non-@code{nil}, the frame title for the box is
1873 @samp{Information}, otherwise it is @samp{Question}. The former is used
1874 for @code{message-box} (@pxref{message-box}).
1875
1876 In some configurations, Emacs cannot display a real dialog box; so
1877 instead it displays the same items in a pop-up menu in the center of the
1878 frame.
1879
1880 If the user gets rid of the dialog box without making a valid choice,
1881 for instance using the window manager, then this produces a quit and
1882 @code{x-popup-dialog} does not return.
1883 @end defun
1884
1885 @node Pointer Shape
1886 @section Pointer Shape
1887 @cindex pointer shape
1888 @cindex mouse pointer shape
1889
1890 You can specify the mouse pointer style for particular text or
1891 images using the @code{pointer} text property, and for images with the
1892 @code{:pointer} and @code{:map} image properties. The values you can
1893 use in these properties are @code{text} (or @code{nil}), @code{arrow},
1894 @code{hand}, @code{vdrag}, @code{hdrag}, @code{modeline}, and
1895 @code{hourglass}. @code{text} stands for the usual mouse pointer
1896 style used over text.
1897
1898 Over void parts of the window (parts that do not correspond to any
1899 of the buffer contents), the mouse pointer usually uses the
1900 @code{arrow} style, but you can specify a different style (one of
1901 those above) by setting @code{void-text-area-pointer}.
1902
1903 @defopt void-text-area-pointer
1904 This variable specifies the mouse pointer style for void text areas.
1905 These include the areas after the end of a line or below the last line
1906 in the buffer. The default is to use the @code{arrow} (non-text)
1907 pointer style.
1908 @end defopt
1909
1910 When using X, you can specify what the @code{text} pointer style
1911 really looks like by setting the variable @code{x-pointer-shape}.
1912
1913 @defvar x-pointer-shape
1914 This variable specifies the pointer shape to use ordinarily in the
1915 Emacs frame, for the @code{text} pointer style.
1916 @end defvar
1917
1918 @defvar x-sensitive-text-pointer-shape
1919 This variable specifies the pointer shape to use when the mouse
1920 is over mouse-sensitive text.
1921 @end defvar
1922
1923 These variables affect newly created frames. They do not normally
1924 affect existing frames; however, if you set the mouse color of a
1925 frame, that also installs the current value of those two variables.
1926 @xref{Font and Color Parameters}.
1927
1928 The values you can use, to specify either of these pointer shapes, are
1929 defined in the file @file{lisp/term/x-win.el}. Use @kbd{M-x apropos
1930 @key{RET} x-pointer @key{RET}} to see a list of them.
1931
1932 @node Window System Selections
1933 @section Window System Selections
1934 @cindex selection (for window systems)
1935 @cindex clipboard
1936 @cindex primary selection
1937 @cindex secondary selection
1938
1939 In the X window system, data can be transferred between different
1940 applications by means of @dfn{selections}. X defines an arbitrary
1941 number of @dfn{selection types}, each of which can store its own data;
1942 however, only three are commonly used: the @dfn{clipboard},
1943 @dfn{primary selection}, and @dfn{secondary selection}. @xref{Cut and
1944 Paste,, Cut and Paste, emacs, The GNU Emacs Manual}, for Emacs
1945 commands that make use of these selections. This section documents
1946 the low-level functions for reading and setting X selections.
1947
1948 @deffn Command x-set-selection type data
1949 This function sets an X selection. It takes two arguments: a
1950 selection type @var{type}, and the value to assign to it, @var{data}.
1951
1952 @var{type} should be a symbol; it is usually one of @code{PRIMARY},
1953 @code{SECONDARY} or @code{CLIPBOARD}. These are symbols with
1954 upper-case names, in accord with X Window System conventions. If
1955 @var{type} is @code{nil}, that stands for @code{PRIMARY}.
1956
1957 If @var{data} is @code{nil}, it means to clear out the selection.
1958 Otherwise, @var{data} may be a string, a symbol, an integer (or a cons
1959 of two integers or list of two integers), an overlay, or a cons of two
1960 markers pointing to the same buffer. An overlay or a pair of markers
1961 stands for text in the overlay or between the markers. The argument
1962 @var{data} may also be a vector of valid non-vector selection values.
1963
1964 This function returns @var{data}.
1965 @end deffn
1966
1967 @defun x-get-selection &optional type data-type
1968 This function accesses selections set up by Emacs or by other X
1969 clients. It takes two optional arguments, @var{type} and
1970 @var{data-type}. The default for @var{type}, the selection type, is
1971 @code{PRIMARY}.
1972
1973 The @var{data-type} argument specifies the form of data conversion to
1974 use, to convert the raw data obtained from another X client into Lisp
1975 data. Meaningful values include @code{TEXT}, @code{STRING},
1976 @code{UTF8_STRING}, @code{TARGETS}, @code{LENGTH}, @code{DELETE},
1977 @code{FILE_NAME}, @code{CHARACTER_POSITION}, @code{NAME},
1978 @code{LINE_NUMBER}, @code{COLUMN_NUMBER}, @code{OWNER_OS},
1979 @code{HOST_NAME}, @code{USER}, @code{CLASS}, @code{ATOM}, and
1980 @code{INTEGER}. (These are symbols with upper-case names in accord
1981 with X conventions.) The default for @var{data-type} is
1982 @code{STRING}.
1983 @end defun
1984
1985 @defopt selection-coding-system
1986 This variable specifies the coding system to use when reading and
1987 writing selections or the clipboard. @xref{Coding
1988 Systems}. The default is @code{compound-text-with-extensions}, which
1989 converts to the text representation that X11 normally uses.
1990 @end defopt
1991
1992 @cindex clipboard support (for MS-Windows)
1993 When Emacs runs on MS-Windows, it does not implement X selections in
1994 general, but it does support the clipboard. @code{x-get-selection}
1995 and @code{x-set-selection} on MS-Windows support the text data type
1996 only; if the clipboard holds other types of data, Emacs treats the
1997 clipboard as empty.
1998
1999 @node Drag and Drop
2000 @section Drag and Drop
2001
2002 @vindex x-dnd-test-function
2003 @vindex x-dnd-known-types
2004 When a user drags something from another application over Emacs, that other
2005 application expects Emacs to tell it if Emacs can handle the data that is
2006 dragged. The variable @code{x-dnd-test-function} is used by Emacs to determine
2007 what to reply. The default value is @code{x-dnd-default-test-function}
2008 which accepts drops if the type of the data to be dropped is present in
2009 @code{x-dnd-known-types}. You can customize @code{x-dnd-test-function} and/or
2010 @code{x-dnd-known-types} if you want Emacs to accept or reject drops based
2011 on some other criteria.
2012
2013 @vindex x-dnd-types-alist
2014 If you want to change the way Emacs handles drop of different types
2015 or add a new type, customize @code{x-dnd-types-alist}. This requires
2016 detailed knowledge of what types other applications use for drag and
2017 drop.
2018
2019 @vindex dnd-protocol-alist
2020 When an URL is dropped on Emacs it may be a file, but it may also be
2021 another URL type (ftp, http, etc.). Emacs first checks
2022 @code{dnd-protocol-alist} to determine what to do with the URL@. If
2023 there is no match there and if @code{browse-url-browser-function} is
2024 an alist, Emacs looks for a match there. If no match is found the
2025 text for the URL is inserted. If you want to alter Emacs behavior,
2026 you can customize these variables.
2027
2028 @node Color Names
2029 @section Color Names
2030
2031 @cindex color names
2032 @cindex specify color
2033 @cindex numerical RGB color specification
2034 A color name is text (usually in a string) that specifies a color.
2035 Symbolic names such as @samp{black}, @samp{white}, @samp{red}, etc.,
2036 are allowed; use @kbd{M-x list-colors-display} to see a list of
2037 defined names. You can also specify colors numerically in forms such
2038 as @samp{#@var{rgb}} and @samp{RGB:@var{r}/@var{g}/@var{b}}, where
2039 @var{r} specifies the red level, @var{g} specifies the green level,
2040 and @var{b} specifies the blue level. You can use either one, two,
2041 three, or four hex digits for @var{r}; then you must use the same
2042 number of hex digits for all @var{g} and @var{b} as well, making
2043 either 3, 6, 9 or 12 hex digits in all. (See the documentation of the
2044 X Window System for more details about numerical RGB specification of
2045 colors.)
2046
2047 These functions provide a way to determine which color names are
2048 valid, and what they look like. In some cases, the value depends on the
2049 @dfn{selected frame}, as described below; see @ref{Input Focus}, for the
2050 meaning of the term ``selected frame''.
2051
2052 To read user input of color names with completion, use
2053 @code{read-color} (@pxref{High-Level Completion, read-color}).
2054
2055 @defun color-defined-p color &optional frame
2056 This function reports whether a color name is meaningful. It returns
2057 @code{t} if so; otherwise, @code{nil}. The argument @var{frame} says
2058 which frame's display to ask about; if @var{frame} is omitted or
2059 @code{nil}, the selected frame is used.
2060
2061 Note that this does not tell you whether the display you are using
2062 really supports that color. When using X, you can ask for any defined
2063 color on any kind of display, and you will get some result---typically,
2064 the closest it can do. To determine whether a frame can really display
2065 a certain color, use @code{color-supported-p} (see below).
2066
2067 @findex x-color-defined-p
2068 This function used to be called @code{x-color-defined-p},
2069 and that name is still supported as an alias.
2070 @end defun
2071
2072 @defun defined-colors &optional frame
2073 This function returns a list of the color names that are defined
2074 and supported on frame @var{frame} (default, the selected frame).
2075 If @var{frame} does not support colors, the value is @code{nil}.
2076
2077 @findex x-defined-colors
2078 This function used to be called @code{x-defined-colors},
2079 and that name is still supported as an alias.
2080 @end defun
2081
2082 @defun color-supported-p color &optional frame background-p
2083 This returns @code{t} if @var{frame} can really display the color
2084 @var{color} (or at least something close to it). If @var{frame} is
2085 omitted or @code{nil}, the question applies to the selected frame.
2086
2087 Some terminals support a different set of colors for foreground and
2088 background. If @var{background-p} is non-@code{nil}, that means you are
2089 asking whether @var{color} can be used as a background; otherwise you
2090 are asking whether it can be used as a foreground.
2091
2092 The argument @var{color} must be a valid color name.
2093 @end defun
2094
2095 @defun color-gray-p color &optional frame
2096 This returns @code{t} if @var{color} is a shade of gray, as defined on
2097 @var{frame}'s display. If @var{frame} is omitted or @code{nil}, the
2098 question applies to the selected frame. If @var{color} is not a valid
2099 color name, this function returns @code{nil}.
2100 @end defun
2101
2102 @defun color-values color &optional frame
2103 @cindex rgb value
2104 This function returns a value that describes what @var{color} should
2105 ideally look like on @var{frame}. If @var{color} is defined, the
2106 value is a list of three integers, which give the amount of red, the
2107 amount of green, and the amount of blue. Each integer ranges in
2108 principle from 0 to 65535, but some displays may not use the full
2109 range. This three-element list is called the @dfn{rgb values} of the
2110 color.
2111
2112 If @var{color} is not defined, the value is @code{nil}.
2113
2114 @example
2115 (color-values "black")
2116 @result{} (0 0 0)
2117 (color-values "white")
2118 @result{} (65280 65280 65280)
2119 (color-values "red")
2120 @result{} (65280 0 0)
2121 (color-values "pink")
2122 @result{} (65280 49152 51968)
2123 (color-values "hungry")
2124 @result{} nil
2125 @end example
2126
2127 The color values are returned for @var{frame}'s display. If
2128 @var{frame} is omitted or @code{nil}, the information is returned for
2129 the selected frame's display. If the frame cannot display colors, the
2130 value is @code{nil}.
2131
2132 @findex x-color-values
2133 This function used to be called @code{x-color-values},
2134 and that name is still supported as an alias.
2135 @end defun
2136
2137 @node Text Terminal Colors
2138 @section Text Terminal Colors
2139 @cindex colors on text terminals
2140
2141 Text terminals usually support only a small number of colors, and
2142 the computer uses small integers to select colors on the terminal.
2143 This means that the computer cannot reliably tell what the selected
2144 color looks like; instead, you have to inform your application which
2145 small integers correspond to which colors. However, Emacs does know
2146 the standard set of colors and will try to use them automatically.
2147
2148 The functions described in this section control how terminal colors
2149 are used by Emacs.
2150
2151 Several of these functions use or return @dfn{rgb values}, described
2152 in @ref{Color Names}.
2153
2154 These functions accept a display (either a frame or the name of a
2155 terminal) as an optional argument. We hope in the future to make
2156 Emacs support different colors on different text terminals; then this
2157 argument will specify which terminal to operate on (the default being
2158 the selected frame's terminal; @pxref{Input Focus}). At present,
2159 though, the @var{frame} argument has no effect.
2160
2161 @defun tty-color-define name number &optional rgb frame
2162 This function associates the color name @var{name} with
2163 color number @var{number} on the terminal.
2164
2165 The optional argument @var{rgb}, if specified, is an rgb value, a list
2166 of three numbers that specify what the color actually looks like.
2167 If you do not specify @var{rgb}, then this color cannot be used by
2168 @code{tty-color-approximate} to approximate other colors, because
2169 Emacs will not know what it looks like.
2170 @end defun
2171
2172 @defun tty-color-clear &optional frame
2173 This function clears the table of defined colors for a text terminal.
2174 @end defun
2175
2176 @defun tty-color-alist &optional frame
2177 This function returns an alist recording the known colors supported by
2178 a text terminal.
2179
2180 Each element has the form @code{(@var{name} @var{number} . @var{rgb})}
2181 or @code{(@var{name} @var{number})}. Here, @var{name} is the color
2182 name, @var{number} is the number used to specify it to the terminal.
2183 If present, @var{rgb} is a list of three color values (for red, green,
2184 and blue) that says what the color actually looks like.
2185 @end defun
2186
2187 @defun tty-color-approximate rgb &optional frame
2188 This function finds the closest color, among the known colors
2189 supported for @var{display}, to that described by the rgb value
2190 @var{rgb} (a list of color values). The return value is an element of
2191 @code{tty-color-alist}.
2192 @end defun
2193
2194 @defun tty-color-translate color &optional frame
2195 This function finds the closest color to @var{color} among the known
2196 colors supported for @var{display} and returns its index (an integer).
2197 If the name @var{color} is not defined, the value is @code{nil}.
2198 @end defun
2199
2200 @node Resources
2201 @section X Resources
2202
2203 This section describes some of the functions and variables for
2204 querying and using X resources, or their equivalent on your operating
2205 system. @xref{X Resources,, X Resources, emacs, The GNU Emacs
2206 Manual}, for more information about X resources.
2207
2208 @defun x-get-resource attribute class &optional component subclass
2209 The function @code{x-get-resource} retrieves a resource value from the X
2210 Window defaults database.
2211
2212 Resources are indexed by a combination of a @dfn{key} and a @dfn{class}.
2213 This function searches using a key of the form
2214 @samp{@var{instance}.@var{attribute}} (where @var{instance} is the name
2215 under which Emacs was invoked), and using @samp{Emacs.@var{class}} as
2216 the class.
2217
2218 The optional arguments @var{component} and @var{subclass} add to the key
2219 and the class, respectively. You must specify both of them or neither.
2220 If you specify them, the key is
2221 @samp{@var{instance}.@var{component}.@var{attribute}}, and the class is
2222 @samp{Emacs.@var{class}.@var{subclass}}.
2223 @end defun
2224
2225 @defvar x-resource-class
2226 This variable specifies the application name that @code{x-get-resource}
2227 should look up. The default value is @code{"Emacs"}. You can examine X
2228 resources for application names other than ``Emacs'' by binding this
2229 variable to some other string, around a call to @code{x-get-resource}.
2230 @end defvar
2231
2232 @defvar x-resource-name
2233 This variable specifies the instance name that @code{x-get-resource}
2234 should look up. The default value is the name Emacs was invoked with,
2235 or the value specified with the @samp{-name} or @samp{-rn} switches.
2236 @end defvar
2237
2238 To illustrate some of the above, suppose that you have the line:
2239
2240 @example
2241 xterm.vt100.background: yellow
2242 @end example
2243
2244 @noindent
2245 in your X resources file (whose name is usually @file{~/.Xdefaults}
2246 or @file{~/.Xresources}). Then:
2247
2248 @example
2249 @group
2250 (let ((x-resource-class "XTerm") (x-resource-name "xterm"))
2251 (x-get-resource "vt100.background" "VT100.Background"))
2252 @result{} "yellow"
2253 @end group
2254 @group
2255 (let ((x-resource-class "XTerm") (x-resource-name "xterm"))
2256 (x-get-resource "background" "VT100" "vt100" "Background"))
2257 @result{} "yellow"
2258 @end group
2259 @end example
2260
2261 @defvar inhibit-x-resources
2262 If this variable is non-@code{nil}, Emacs does not look up X
2263 resources, and X resources do not have any effect when creating new
2264 frames.
2265 @end defvar
2266
2267 @node Display Feature Testing
2268 @section Display Feature Testing
2269 @cindex display feature testing
2270
2271 The functions in this section describe the basic capabilities of a
2272 particular display. Lisp programs can use them to adapt their behavior
2273 to what the display can do. For example, a program that ordinarily uses
2274 a popup menu could use the minibuffer if popup menus are not supported.
2275
2276 The optional argument @var{display} in these functions specifies which
2277 display to ask the question about. It can be a display name, a frame
2278 (which designates the display that frame is on), or @code{nil} (which
2279 refers to the selected frame's display, @pxref{Input Focus}).
2280
2281 @xref{Color Names}, @ref{Text Terminal Colors}, for other functions to
2282 obtain information about displays.
2283
2284 @defun display-popup-menus-p &optional display
2285 This function returns @code{t} if popup menus are supported on
2286 @var{display}, @code{nil} if not. Support for popup menus requires that
2287 the mouse be available, since the user cannot choose menu items without
2288 a mouse.
2289 @end defun
2290
2291 @defun display-graphic-p &optional display
2292 This function returns @code{t} if @var{display} is a graphic display
2293 capable of displaying several frames and several different fonts at
2294 once. This is true for displays that use a window system such as X,
2295 and false for text terminals.
2296 @end defun
2297
2298 @defun display-mouse-p &optional display
2299 @cindex mouse, availability
2300 This function returns @code{t} if @var{display} has a mouse available,
2301 @code{nil} if not.
2302 @end defun
2303
2304 @defun display-color-p &optional display
2305 @findex x-display-color-p
2306 This function returns @code{t} if the screen is a color screen.
2307 It used to be called @code{x-display-color-p}, and that name
2308 is still supported as an alias.
2309 @end defun
2310
2311 @defun display-grayscale-p &optional display
2312 This function returns @code{t} if the screen can display shades of gray.
2313 (All color displays can do this.)
2314 @end defun
2315
2316 @defun display-supports-face-attributes-p attributes &optional display
2317 @anchor{Display Face Attribute Testing}
2318 This function returns non-@code{nil} if all the face attributes in
2319 @var{attributes} are supported (@pxref{Face Attributes}).
2320
2321 The definition of `supported' is somewhat heuristic, but basically
2322 means that a face containing all the attributes in @var{attributes},
2323 when merged with the default face for display, can be represented in a
2324 way that's
2325
2326 @enumerate
2327 @item
2328 different in appearance than the default face, and
2329
2330 @item
2331 `close in spirit' to what the attributes specify, if not exact.
2332 @end enumerate
2333
2334 Point (2) implies that a @code{:weight black} attribute will be
2335 satisfied by any display that can display bold, as will
2336 @code{:foreground "yellow"} as long as some yellowish color can be
2337 displayed, but @code{:slant italic} will @emph{not} be satisfied by
2338 the tty display code's automatic substitution of a `dim' face for
2339 italic.
2340 @end defun
2341
2342 @defun display-selections-p &optional display
2343 This function returns @code{t} if @var{display} supports selections.
2344 Windowed displays normally support selections, but they may also be
2345 supported in some other cases.
2346 @end defun
2347
2348 @defun display-images-p &optional display
2349 This function returns @code{t} if @var{display} can display images.
2350 Windowed displays ought in principle to handle images, but some
2351 systems lack the support for that. On a display that does not support
2352 images, Emacs cannot display a tool bar.
2353 @end defun
2354
2355 @defun display-screens &optional display
2356 This function returns the number of screens associated with the display.
2357 @end defun
2358
2359 @defun display-pixel-height &optional display
2360 This function returns the height of the screen in pixels.
2361 On a character terminal, it gives the height in characters.
2362
2363 For graphical terminals, note that on ``multi-monitor'' setups this
2364 refers to the pixel width for all physical monitors associated with
2365 @var{display}. @xref{Multiple Terminals}.
2366 @end defun
2367
2368 @defun display-pixel-width &optional display
2369 This function returns the width of the screen in pixels.
2370 On a character terminal, it gives the width in characters.
2371
2372 For graphical terminals, note that on ``multi-monitor'' setups this
2373 refers to the pixel width for all physical monitors associated with
2374 @var{display}. @xref{Multiple Terminals}.
2375 @end defun
2376
2377 @defun display-mm-height &optional display
2378 This function returns the height of the screen in millimeters,
2379 or @code{nil} if Emacs cannot get that information.
2380 @end defun
2381
2382 @defun display-mm-width &optional display
2383 This function returns the width of the screen in millimeters,
2384 or @code{nil} if Emacs cannot get that information.
2385 @end defun
2386
2387 @defopt display-mm-dimensions-alist
2388 This variable allows the user to specify the dimensions of graphical
2389 displays returned by @code{display-mm-height} and
2390 @code{display-mm-width} in case the system provides incorrect values.
2391 @end defopt
2392
2393 @defun display-backing-store &optional display
2394 This function returns the backing store capability of the display.
2395 Backing store means recording the pixels of windows (and parts of
2396 windows) that are not exposed, so that when exposed they can be
2397 displayed very quickly.
2398
2399 Values can be the symbols @code{always}, @code{when-mapped}, or
2400 @code{not-useful}. The function can also return @code{nil}
2401 when the question is inapplicable to a certain kind of display.
2402 @end defun
2403
2404 @defun display-save-under &optional display
2405 This function returns non-@code{nil} if the display supports the
2406 SaveUnder feature. That feature is used by pop-up windows
2407 to save the pixels they obscure, so that they can pop down
2408 quickly.
2409 @end defun
2410
2411 @defun display-planes &optional display
2412 This function returns the number of planes the display supports.
2413 This is typically the number of bits per pixel.
2414 For a tty display, it is log to base two of the number of colors supported.
2415 @end defun
2416
2417 @defun display-visual-class &optional display
2418 This function returns the visual class for the screen. The value is
2419 one of the symbols @code{static-gray} (a limited, unchangeable number
2420 of grays), @code{gray-scale} (a full range of grays),
2421 @code{static-color} (a limited, unchangeable number of colors),
2422 @code{pseudo-color} (a limited number of colors), @code{true-color} (a
2423 full range of colors), and @code{direct-color} (a full range of
2424 colors).
2425 @end defun
2426
2427 @defun display-color-cells &optional display
2428 This function returns the number of color cells the screen supports.
2429 @end defun
2430
2431 These functions obtain additional information specifically
2432 about X displays.
2433
2434 @defun x-server-version &optional display
2435 This function returns the list of version numbers of the X server
2436 running the display. The value is a list of three integers: the major
2437 and minor version numbers of the X protocol, and the
2438 distributor-specific release number of the X server software itself.
2439 @end defun
2440
2441 @defun x-server-vendor &optional display
2442 This function returns the ``vendor'' that provided the X server
2443 software (as a string). Really this means whoever distributes the X
2444 server.
2445
2446 When the developers of X labeled software distributors as
2447 ``vendors'', they showed their false assumption that no system could
2448 ever be developed and distributed noncommercially.
2449 @end defun
2450
2451 @ignore
2452 @defvar x-no-window-manager
2453 This variable's value is @code{t} if no X window manager is in use.
2454 @end defvar
2455 @end ignore
2456
2457 @ignore
2458 @item
2459 The functions @code{x-pixel-width} and @code{x-pixel-height} return the
2460 width and height of an X Window frame, measured in pixels.
2461 @end ignore