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