]> code.delx.au - gnu-emacs/blob - lispref/frames.texi
Patch from rms.
[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 Free Software Foundation, Inc.
4 @c See the file elisp.texi for copying conditions.
5 @setfilename ../info/frames
6 @node Frames, Positions, Windows, Top
7 @chapter Frames
8 @cindex frame
9
10 A @dfn{frame} is a rectangle on the screen that contains one or more
11 Emacs windows. A frame initially contains a single main window (plus
12 perhaps a minibuffer window), which you can subdivide vertically or
13 horizontally into smaller windows.
14
15 @cindex terminal frame
16 When Emacs runs on a text-only terminal, it starts with one
17 @dfn{terminal frame}. If you create additional ones, Emacs displays
18 one and only one at any given time---on the terminal screen, of course.
19
20 @cindex window frame
21 When Emacs communicates directly with a supported window system, such
22 as X Windows, it does not have a terminal frame; instead, it starts with
23 a single @dfn{window frame}, but you can create more, and Emacs can
24 display several such frames at once as is usual for window systems.
25
26 @defun framep object
27 This predicate returns a non-@code{nil} value if @var{object} is a
28 frame, and @code{nil} otherwise. For a frame, the value indicates which
29 kind of display the frame uses:
30
31 @table @code
32 @item x
33 The frame is displayed in an X window.
34 @item t
35 A terminal frame on a character display.
36 @item mac
37 The frame is displayed on a Macintosh.
38 @item w32
39 The frame is displayed on MS-Windows 9X/NT.
40 @item pc
41 The frame is displayed on an MS-DOS terminal.
42 @end table
43 @end defun
44
45 @menu
46 * Creating Frames:: Creating additional frames.
47 * Multiple Displays:: Creating frames on other displays.
48 * Frame Parameters:: Controlling frame size, position, font, etc.
49 * Frame Titles:: Automatic updating of frame titles.
50 * Deleting Frames:: Frames last until explicitly deleted.
51 * Finding All Frames:: How to examine all existing frames.
52 * Frames and Windows:: A frame contains windows;
53 display of text always works through windows.
54 * Minibuffers and Frames:: How a frame finds the minibuffer to use.
55 * Input Focus:: Specifying the selected frame.
56 * Visibility of Frames:: Frames may be visible or invisible, or icons.
57 * Raising and Lowering:: Raising a frame makes it hide other windows;
58 lowering it makes the others hide them.
59 * Frame Configurations:: Saving the state of all frames.
60 * Mouse Tracking:: Getting events that say when the mouse moves.
61 * Mouse Position:: Asking where the mouse is, or moving it.
62 * Pop-Up Menus:: Displaying a menu for the user to select from.
63 * Dialog Boxes:: Displaying a box to ask yes or no.
64 * Pointer Shapes:: Specifying the shape of the mouse pointer.
65 * Window System Selections:: Transferring text to and from other X clients.
66 * Color Names:: Getting the definitions of color names.
67 * Text Terminal Colors:: Defining colors for text-only terminals.
68 * Resources:: Getting resource values from the server.
69 * Server Data:: Getting info about the X server.
70 @end menu
71
72 @xref{Display}, for information about the related topic of
73 controlling Emacs redisplay.
74
75 @node Creating Frames
76 @section Creating Frames
77
78 To create a new frame, call the function @code{make-frame}.
79
80 @defun make-frame &optional alist
81 This function creates a new frame. If you are using a supported window
82 system, it makes a window frame; otherwise, it makes a terminal frame.
83
84 The argument is an alist specifying frame parameters. Any parameters
85 not mentioned in @var{alist} default according to the value of the
86 variable @code{default-frame-alist}; parameters not specified even there
87 default from the standard X resources or whatever is used instead on
88 your system.
89
90 The set of possible parameters depends in principle on what kind of
91 window system Emacs uses to display its frames. @xref{Window Frame
92 Parameters}, for documentation of individual parameters you can specify.
93 @end defun
94
95 @defvar before-make-frame-hook
96 @tindex before-make-frame-hook
97 A normal hook run by @code{make-frame} before it actually creates the
98 frame.
99 @end defvar
100
101 @defvar after-make-frame-functions
102 @tindex after-make-frame-functions
103 An abnormal hook run by @code{make-frame} after it creates the frame.
104 Each function in @code{after-make-frame-hook} receives one argument, the
105 frame just created.
106 @end defvar
107
108 @node Multiple Displays
109 @section Multiple Displays
110 @cindex multiple X displays
111 @cindex displays, multiple
112
113 A single Emacs can talk to more than one X display.
114 Initially, Emacs uses just one display---the one chosen with the
115 @code{DISPLAY} environment variable or with the @samp{--display} option
116 (@pxref{Initial Options,,, emacs, The GNU Emacs Manual}). To connect to
117 another display, use the command @code{make-frame-on-display} or specify
118 the @code{display} frame parameter when you create the frame.
119
120 Emacs treats each X server as a separate terminal, giving each one its
121 own selected frame and its own minibuffer windows.
122
123 A few Lisp variables are @dfn{terminal-local}; that is, they have a
124 separate binding for each terminal. The binding in effect at any time
125 is the one for the terminal that the currently selected frame belongs
126 to. These variables include @code{default-minibuffer-frame},
127 @code{defining-kbd-macro}, @code{last-kbd-macro}, and
128 @code{system-key-alist}. They are always terminal-local, and can never
129 be buffer-local (@pxref{Buffer-Local Variables}) or frame-local.
130
131 A single X server can handle more than one screen. A display name
132 @samp{@var{host}:@var{server}.@var{screen}} has three parts; the last
133 part specifies the screen number for a given server. When you use two
134 screens belonging to one server, Emacs knows by the similarity in their
135 names that they share a single keyboard, and it treats them as a single
136 terminal.
137
138 @deffn Command make-frame-on-display display &optional parameters
139 This creates a new frame on display @var{display}, taking the other
140 frame parameters from @var{parameters}. Aside from the @var{display}
141 argument, it is like @code{make-frame} (@pxref{Creating Frames}).
142 @end deffn
143
144 @defun x-display-list
145 This returns a list that indicates which X displays Emacs has a
146 connection to. The elements of the list are strings, and each one is
147 a display name.
148 @end defun
149
150 @defun x-open-connection display &optional xrm-string
151 This function opens a connection to the X display @var{display}. It
152 does not create a frame on that display, but it permits you to check
153 that communication can be established with that display.
154
155 The optional argument @var{xrm-string}, if not @code{nil}, is a
156 string of resource names and values, in the same format used in the
157 @file{.Xresources} file. The values you specify override the resource
158 values recorded in the X server itself; they apply to all Emacs frames
159 created on this display. Here's an example of what this string might
160 look like:
161
162 @example
163 "*BorderWidth: 3\n*InternalBorder: 2\n"
164 @end example
165
166 @xref{Resources}.
167 @end defun
168
169 @defun x-close-connection display
170 This function closes the connection to display @var{display}. Before
171 you can do this, you must first delete all the frames that were open on
172 that display (@pxref{Deleting Frames}).
173 @end defun
174
175 @node Frame Parameters
176 @section Frame Parameters
177
178 A frame has many parameters that control its appearance and behavior.
179 Just what parameters a frame has depends on what display mechanism it
180 uses.
181
182 Frame parameters exist mostly for the sake of window systems. A
183 terminal frame has a few parameters, mostly for compatibility's sake;
184 only the @code{height}, @code{width}, @code{name}, @code{title},
185 @code{menu-bar-lines}, @code{buffer-list} and @code{buffer-predicate}
186 parameters do something special. If the terminal supports colors, the
187 parameters @code{foreground-color}, @code{background-color},
188 @code{background-mode} and @code{display-type} are also meaningful.
189
190 @menu
191 * Parameter Access:: How to change a frame's parameters.
192 * Initial Parameters:: Specifying frame parameters when you make a frame.
193 * Window Frame Parameters:: List of frame parameters for window systems.
194 * Size and Position:: Changing the size and position of a frame.
195 @end menu
196
197 @node Parameter Access
198 @subsection Access to Frame Parameters
199
200 These functions let you read and change the parameter values of a
201 frame.
202
203 @defun frame-parameters frame
204 The function @code{frame-parameters} returns an alist listing all the
205 parameters of @var{frame} and their values.
206 @end defun
207
208 @defun modify-frame-parameters frame alist
209 This function alters the parameters of frame @var{frame} based on the
210 elements of @var{alist}. Each element of @var{alist} has the form
211 @code{(@var{parm} . @var{value})}, where @var{parm} is a symbol naming a
212 parameter. If you don't mention a parameter in @var{alist}, its value
213 doesn't change.
214 @end defun
215
216 @node Initial Parameters
217 @subsection Initial Frame Parameters
218
219 You can specify the parameters for the initial startup frame
220 by setting @code{initial-frame-alist} in your init file (@pxref{Init File}).
221
222 @defvar initial-frame-alist
223 This variable's value is an alist of parameter values used when creating
224 the initial window frame. You can set this variable to specify the
225 appearance of the initial frame without altering subsequent frames.
226 Each element has the form:
227
228 @example
229 (@var{parameter} . @var{value})
230 @end example
231
232 Emacs creates the initial frame before it reads your init
233 file. After reading that file, Emacs checks @code{initial-frame-alist},
234 and applies the parameter settings in the altered value to the already
235 created initial frame.
236
237 If these settings affect the frame geometry and appearance, you'll see
238 the frame appear with the wrong ones and then change to the specified
239 ones. If that bothers you, you can specify the same geometry and
240 appearance with X resources; those do take effect before the frame is
241 created. @xref{Resources X,, X Resources, emacs, The GNU Emacs Manual}.
242
243 X resource settings typically apply to all frames. If you want to
244 specify some X resources solely for the sake of the initial frame, and
245 you don't want them to apply to subsequent frames, here's how to achieve
246 this. Specify parameters in @code{default-frame-alist} to override the
247 X resources for subsequent frames; then, to prevent these from affecting
248 the initial frame, specify the same parameters in
249 @code{initial-frame-alist} with values that match the X resources.
250 @end defvar
251
252 If these parameters specify a separate minibuffer-only frame with
253 @code{(minibuffer . nil)}, and you have not created one, Emacs creates
254 one for you.
255
256 @defvar minibuffer-frame-alist
257 This variable's value is an alist of parameter values used when creating
258 an initial minibuffer-only frame---if such a frame is needed, according
259 to the parameters for the main initial frame.
260 @end defvar
261
262 @defvar default-frame-alist
263 This is an alist specifying default values of frame parameters for all
264 Emacs frames---the first frame, and subsequent frames. When using the X
265 Window System, you can get the same results by means of X resources
266 in many cases.
267 @end defvar
268
269 See also @code{special-display-frame-alist}, in @ref{Choosing Window}.
270
271 If you use options that specify window appearance when you invoke Emacs,
272 they take effect by adding elements to @code{default-frame-alist}. One
273 exception is @samp{-geometry}, which adds the specified position to
274 @code{initial-frame-alist} instead. @xref{Command Arguments,,, emacs,
275 The GNU Emacs Manual}.
276
277 @node Window Frame Parameters
278 @subsection Window Frame Parameters
279
280 Just what parameters a frame has depends on what display mechanism it
281 uses. Here is a table of the parameters that have special meanings in a
282 window frame; of these, @code{name}, @code{title}, @code{height},
283 @code{width}, @code{buffer-list} and @code{buffer-predicate} provide
284 meaningful information in terminal frames.
285
286 @table @code
287 @item display
288 The display on which to open this frame. It should be a string of the
289 form @code{"@var{host}:@var{dpy}.@var{screen}"}, just like the
290 @code{DISPLAY} environment variable.
291
292 @item title
293 If a frame has a non-@code{nil} title, it appears in the window system's
294 border for the frame, and also in the mode line of windows in that frame
295 if @code{mode-line-frame-identification} uses @samp{%F}
296 (@pxref{%-Constructs}). This is normally the case when Emacs is not
297 using a window system, and can only display one frame at a time.
298 @xref{Frame Titles}.
299
300 @item name
301 The name of the frame. The frame name serves as a default for the frame
302 title, if the @code{title} parameter is unspecified or @code{nil}. If
303 you don't specify a name, Emacs sets the frame name automatically
304 (@pxref{Frame Titles}).
305
306 If you specify the frame name explicitly when you create the frame, the
307 name is also used (instead of the name of the Emacs executable) when
308 looking up X resources for the frame.
309
310 @item left
311 The screen position of the left edge, in pixels, with respect to the
312 left edge of the screen. The value may be a positive number @var{pos},
313 or a list of the form @code{(+ @var{pos})} which permits specifying a
314 negative @var{pos} value.
315
316 A negative number @minus{}@var{pos}, or a list of the form @code{(-
317 @var{pos})}, actually specifies the position of the right edge of the
318 window with respect to the right edge of the screen. A positive value
319 of @var{pos} counts toward the left. @strong{Reminder:} if the
320 parameter is a negative integer @minus{}@var{pos}, then @var{pos} is
321 positive.
322
323 Some window managers ignore program-specified positions. If you want to
324 be sure the position you specify is not ignored, specify a
325 non-@code{nil} value for the @code{user-position} parameter as well.
326
327 @item top
328 The screen position of the top edge, in pixels, with respect to the
329 top edge of the screen. The value may be a positive number @var{pos},
330 or a list of the form @code{(+ @var{pos})} which permits specifying a
331 negative @var{pos} value.
332
333 A negative number @minus{}@var{pos}, or a list of the form @code{(-
334 @var{pos})}, actually specifies the position of the bottom edge of the
335 window with respect to the bottom edge of the screen. A positive value
336 of @var{pos} counts toward the top. @strong{Reminder:} if the
337 parameter is a negative integer @minus{}@var{pos}, then @var{pos} is
338 positive.
339
340 Some window managers ignore program-specified positions. If you want to
341 be sure the position you specify is not ignored, specify a
342 non-@code{nil} value for the @code{user-position} parameter as well.
343
344 @item icon-left
345 The screen position of the left edge @emph{of the frame's icon}, in
346 pixels, counting from the left edge of the screen. This takes effect if
347 and when the frame is iconified.
348
349 @item icon-top
350 The screen position of the top edge @emph{of the frame's icon}, in
351 pixels, counting from the top edge of the screen. This takes effect if
352 and when the frame is iconified.
353
354 @item user-position
355 When you create a frame and specify its screen position with the
356 @code{left} and @code{top} parameters, use this parameter to say whether
357 the specified position was user-specified (explicitly requested in some
358 way by a human user) or merely program-specified (chosen by a program).
359 A non-@code{nil} value says the position was user-specified.
360
361 Window managers generally heed user-specified positions, and some heed
362 program-specified positions too. But many ignore program-specified
363 positions, placing the window in a default fashion or letting the user
364 place it with the mouse. Some window managers, including @code{twm},
365 let the user specify whether to obey program-specified positions or
366 ignore them.
367
368 When you call @code{make-frame}, you should specify a non-@code{nil}
369 value for this parameter if the values of the @code{left} and @code{top}
370 parameters represent the user's stated preference; otherwise, use
371 @code{nil}.
372
373 @item height
374 The height of the frame contents, in characters. (To get the height in
375 pixels, call @code{frame-pixel-height}; see @ref{Size and Position}.)
376
377 @item width
378 The width of the frame contents, in characters. (To get the height in
379 pixels, call @code{frame-pixel-width}; see @ref{Size and Position}.)
380
381 @item window-id
382 The number of the window-system window used by the frame
383 to contain the actual Emacs windows.
384
385 @item outer-window-id
386 The number of the outermost window-system window used for the whole frame.
387
388 @item minibuffer
389 Whether this frame has its own minibuffer. The value @code{t} means
390 yes, @code{nil} means no, @code{only} means this frame is just a
391 minibuffer. If the value is a minibuffer window (in some other frame),
392 the new frame uses that minibuffer.
393
394 @item buffer-predicate
395 The buffer-predicate function for this frame. The function
396 @code{other-buffer} uses this predicate (from the selected frame) to
397 decide which buffers it should consider, if the predicate is not
398 @code{nil}. It calls the predicate with one argument, a buffer, once for
399 each buffer; if the predicate returns a non-@code{nil} value, it
400 considers that buffer.
401
402 @item buffer-list
403 A list of buffers that have been selected in this frame,
404 ordered most-recently-selected first.
405
406 @item font
407 The name of the font for displaying text in the frame. This is a
408 string, either a valid font name for your system or the name of an Emacs
409 fontset (@pxref{Fontsets}). Changing this frame parameter on a frame,
410 also changes the font-related attributes of the default face on that
411 frame.
412
413 @item auto-raise
414 Whether selecting the frame raises it (non-@code{nil} means yes).
415
416 @item auto-lower
417 Whether deselecting the frame lowers it (non-@code{nil} means yes).
418
419 @item vertical-scroll-bars
420 Whether the frame has scroll bars for vertical scrolling, and which side
421 of the frame they should be on. The possible values are @code{left},
422 @code{right}, and @code{nil} for no scroll bars.
423
424 @item horizontal-scroll-bars
425 Whether the frame has scroll bars for horizontal scrolling
426 (non-@code{nil} means yes). (Horizontal scroll bars are not currently
427 implemented.)
428
429 @item scroll-bar-width
430 The width of the vertical scroll bar, in pixels.
431
432 @item icon-type
433 The type of icon to use for this frame when it is iconified. If the
434 value is a string, that specifies a file containing a bitmap to use.
435 Any other non-@code{nil} value specifies the default bitmap icon (a
436 picture of a gnu); @code{nil} specifies a text icon.
437
438 @item icon-name
439 The name to use in the icon for this frame, when and if the icon
440 appears. If this is @code{nil}, the frame's title is used.
441
442 @item foreground-color
443 The color to use for the image of a character. This is a string; the
444 window system defines the meaningful color names. Changing this
445 parameter is equivalent to changing the foreground color of the face
446 @code{default} on the frame in question.
447
448 @item background-color
449 The color to use for the background of characters. Changing this
450 parameter is equivalent to changing the foreground color of the face
451 @code{default} on the frame in question.
452
453 @item background-mode
454 This parameter is either @code{dark} or @code{light}, according
455 to whether the background color is a light one or a dark one.
456
457 @item mouse-color
458 The color for the mouse pointer. Changing this parameter is equivalent
459 to changing the background color of face @code{mouse}.
460
461 @item cursor-color
462 The color for the cursor that shows point. Changing this parameter is
463 equivalent to changing the background color of face @code{cursor}.
464
465 @item border-color
466 The color for the border of the frame. Changing this parameter is
467 equivalent to changing the background color of face @code{border}.
468
469 @item scroll-bar-foreground
470 If non-@code{nil}, the color for the foreground of scroll bars.
471 Changing this parameter is equivalent to setting the foreground color of
472 face @code{scroll-bar}.
473
474 @item scroll-bar-background
475 If non-@code{nil}, the color for the background of scroll bars.
476 Changing this parameter is equivalent to setting the foreground color of
477 face @code{scroll-bar}.
478
479 @item display-type
480 This parameter describes the range of possible colors that can be used
481 in this frame. Its value is @code{color}, @code{grayscale} or
482 @code{mono}.
483
484 @item cursor-type
485 The way to display the cursor. The legitimate values are @code{bar},
486 @code{box}, and @code{(bar . @var{width})}. The symbol @code{box}
487 specifies an ordinary black box overlaying the character after point;
488 that is the default. The symbol @code{bar} specifies a vertical bar
489 between characters as the cursor. @code{(bar . @var{width})} specifies
490 a bar @var{width} pixels wide.
491
492 @item border-width
493 The width in pixels of the window border.
494
495 @item internal-border-width
496 The distance in pixels between text and border.
497
498 @item unsplittable
499 If non-@code{nil}, this frame's window is never split automatically.
500
501 @item visibility
502 The state of visibility of the frame. There are three possibilities:
503 @code{nil} for invisible, @code{t} for visible, and @code{icon} for
504 iconified. @xref{Visibility of Frames}.
505
506 @item menu-bar-lines
507 The number of lines to allocate at the top of the frame for a menu bar.
508 The default is 1. @xref{Menu Bar}. (In Emacs versions that use the X
509 toolkit, there is only one menu bar line; all that matters about the
510 number you specify is whether it is greater than zero.)
511
512 @item screen-gamma
513 If this is a number, Emacs performs ``gamma correction'' on colors. The
514 value should be the screen gamma of your display, a floating point
515 number. Usual PC monitors have a screen gamma of 2.2. Smaller values
516 result in darker colors; you might want to try a screen gamma of 1.5 for
517 LCD color displays. The viewing gamma Emacs uses is 0.4545 (1/2.2).
518
519 @item tool-bar-lines
520 The number of lines to use for the toolbar. A value of @code{nil} means
521 don't display a tool bar.
522
523 @ignore
524 @item parent-id
525 @c ??? Not yet working.
526 The X window number of the window that should be the parent of this one.
527 Specifying this lets you create an Emacs window inside some other
528 application's window. (It is not certain this will be implemented; try
529 it and see if it works.)
530 @end ignore
531 @end table
532
533 @node Size and Position
534 @subsection Frame Size And Position
535 @cindex size of frame
536 @cindex screen size
537 @cindex frame size
538 @cindex resize frame
539
540 You can read or change the size and position of a frame using the
541 frame parameters @code{left}, @code{top}, @code{height}, and
542 @code{width}. Whatever geometry parameters you don't specify are chosen
543 by the window manager in its usual fashion.
544
545 Here are some special features for working with sizes and positions:
546
547 @defun set-frame-position frame left top
548 This function sets the position of the top left corner of @var{frame} to
549 @var{left} and @var{top}. These arguments are measured in pixels, and
550 normally count from the top left corner of the screen.
551
552 Negative parameter values position the bottom edge of the window up from
553 the bottom edge of the screen, or the right window edge to the left of
554 the right edge of the screen. It would probably be better if the values
555 were always counted from the left and top, so that negative arguments
556 would position the frame partly off the top or left edge of the screen,
557 but it seems inadvisable to change that now.
558 @end defun
559
560 @defun frame-height &optional frame
561 @defunx frame-width &optional frame
562 These functions return the height and width of @var{frame}, measured in
563 lines and columns. If you don't supply @var{frame}, they use the
564 selected frame.
565 @end defun
566
567 @defun screen-height
568 @defunx screen-width
569 These functions are old aliases for @code{frame-height} and
570 @code{frame-width}. When you are using a non-window terminal, the size
571 of the frame is normally the same as the size of the terminal screen.
572 @end defun
573
574 @defun frame-pixel-height &optional frame
575 @defunx frame-pixel-width &optional frame
576 These functions return the height and width of @var{frame}, measured in
577 pixels. If you don't supply @var{frame}, they use the selected frame.
578 @end defun
579
580 @defun frame-char-height &optional frame
581 @defunx frame-char-width &optional frame
582 These functions return the height and width of a character in
583 @var{frame}, measured in pixels. The values depend on the choice of
584 font. If you don't supply @var{frame}, these functions use the selected
585 frame.
586 @end defun
587
588 @defun set-frame-size frame cols rows
589 This function sets the size of @var{frame}, measured in characters;
590 @var{cols} and @var{rows} specify the new width and height.
591
592 To set the size based on values measured in pixels, use
593 @code{frame-char-height} and @code{frame-char-width} to convert
594 them to units of characters.
595 @end defun
596
597 @defun set-frame-height frame lines &optional pretend
598 This function resizes @var{frame} to a height of @var{lines} lines. The
599 sizes of existing windows in @var{frame} are altered proportionally to
600 fit.
601
602 If @var{pretend} is non-@code{nil}, then Emacs displays @var{lines}
603 lines of output in @var{frame}, but does not change its value for the
604 actual height of the frame. This is only useful for a terminal frame.
605 Using a smaller height than the terminal actually implements may be
606 useful to reproduce behavior observed on a smaller screen, or if the
607 terminal malfunctions when using its whole screen. Setting the frame
608 height ``for real'' does not always work, because knowing the correct
609 actual size may be necessary for correct cursor positioning on a
610 terminal frame.
611 @end defun
612
613 @defun set-frame-width frame width &optional pretend
614 This function sets the width of @var{frame}, measured in characters.
615 The argument @var{pretend} has the same meaning as in
616 @code{set-frame-height}.
617 @end defun
618
619 @findex set-screen-height
620 @findex set-screen-width
621 The older functions @code{set-screen-height} and
622 @code{set-screen-width} were used to specify the height and width of the
623 screen, in Emacs versions that did not support multiple frames. They
624 are semi-obsolete, but still work; they apply to the selected frame.
625
626 @defun x-parse-geometry geom
627 @cindex geometry specification
628 The function @code{x-parse-geometry} converts a standard X window
629 geometry string to an alist that you can use as part of the argument to
630 @code{make-frame}.
631
632 The alist describes which parameters were specified in @var{geom}, and
633 gives the values specified for them. Each element looks like
634 @code{(@var{parameter} . @var{value})}. The possible @var{parameter}
635 values are @code{left}, @code{top}, @code{width}, and @code{height}.
636
637 For the size parameters, the value must be an integer. The position
638 parameter names @code{left} and @code{top} are not totally accurate,
639 because some values indicate the position of the right or bottom edges
640 instead. These are the @var{value} possibilities for the position
641 parameters:
642
643 @table @asis
644 @item an integer
645 A positive integer relates the left edge or top edge of the window to
646 the left or top edge of the screen. A negative integer relates the
647 right or bottom edge of the window to the right or bottom edge of the
648 screen.
649
650 @item @code{(+ @var{position})}
651 This specifies the position of the left or top edge of the window
652 relative to the left or top edge of the screen. The integer
653 @var{position} may be positive or negative; a negative value specifies a
654 position outside the screen.
655
656 @item @code{(- @var{position})}
657 This specifies the position of the right or bottom edge of the window
658 relative to the right or bottom edge of the screen. The integer
659 @var{position} may be positive or negative; a negative value specifies a
660 position outside the screen.
661 @end table
662
663 Here is an example:
664
665 @example
666 (x-parse-geometry "35x70+0-0")
667 @result{} ((height . 70) (width . 35)
668 (top - 0) (left . 0))
669 @end example
670 @end defun
671
672 @node Frame Titles
673 @section Frame Titles
674
675 Every frame has a @code{name} parameter; this serves as the default
676 for the frame title which window systems typically display at the top of
677 the frame. You can specify a name explicitly by setting the @code{name}
678 frame property.
679
680 Normally you don't specify the name explicitly, and Emacs computes the
681 frame name automatically based on a template stored in the variable
682 @code{frame-title-format}. Emacs recomputes the name each time the
683 frame is redisplayed.
684
685 @defvar frame-title-format
686 This variable specifies how to compute a name for a frame when you have
687 not explicitly specified one. The variable's value is actually a mode
688 line construct, just like @code{mode-line-format}. @xref{Mode Line
689 Data}.
690 @end defvar
691
692 @defvar icon-title-format
693 This variable specifies how to compute the name for an iconified frame,
694 when you have not explicitly specified the frame title. This title
695 appears in the icon itself.
696 @end defvar
697
698 @defvar multiple-frames
699 This variable is set automatically by Emacs. Its value is @code{t} when
700 there are two or more frames (not counting minibuffer-only frames or
701 invisible frames). The default value of @code{frame-title-format} uses
702 @code{multiple-frames} so as to put the buffer name in the frame title
703 only when there is more than one frame.
704 @end defvar
705
706 @node Deleting Frames
707 @section Deleting Frames
708 @cindex deletion of frames
709
710 Frames remain potentially visible until you explicitly @dfn{delete}
711 them. A deleted frame cannot appear on the screen, but continues to
712 exist as a Lisp object until there are no references to it. There is no
713 way to cancel the deletion of a frame aside from restoring a saved frame
714 configuration (@pxref{Frame Configurations}); this is similar to the
715 way windows behave.
716
717 @deffn Command delete-frame &optional frame
718 This function deletes the frame @var{frame}. By default, @var{frame} is
719 the selected frame.
720 @end deffn
721
722 @defun frame-live-p frame
723 The function @code{frame-live-p} returns non-@code{nil} if the frame
724 @var{frame} has not been deleted.
725 @end defun
726
727 Some window managers provide a command to delete a window. These work
728 by sending a special message to the program that operates the window.
729 When Emacs gets one of these commands, it generates a
730 @code{delete-frame} event, whose normal definition is a command that
731 calls the function @code{delete-frame}. @xref{Misc Events}.
732
733 @node Finding All Frames
734 @section Finding All Frames
735
736 @defun frame-list
737 The function @code{frame-list} returns a list of all the frames that
738 have not been deleted. It is analogous to @code{buffer-list} for
739 buffers. The list that you get is newly created, so modifying the list
740 doesn't have any effect on the internals of Emacs.
741 @end defun
742
743 @defun visible-frame-list
744 This function returns a list of just the currently visible frames.
745 @xref{Visibility of Frames}. (Terminal frames always count as
746 ``visible'', even though only the selected one is actually displayed.)
747 @end defun
748
749 @defun next-frame &optional frame minibuf
750 The function @code{next-frame} lets you cycle conveniently through all
751 the frames from an arbitrary starting point. It returns the ``next''
752 frame after @var{frame} in the cycle. If @var{frame} is omitted or
753 @code{nil}, it defaults to the selected frame.
754
755 The second argument, @var{minibuf}, says which frames to consider:
756
757 @table @asis
758 @item @code{nil}
759 Exclude minibuffer-only frames.
760 @item @code{visible}
761 Consider all visible frames.
762 @item 0
763 Consider all visible or iconified frames.
764 @item a window
765 Consider only the frames using that particular window as their
766 minibuffer.
767 @item anything else
768 Consider all frames.
769 @end table
770 @end defun
771
772 @defun previous-frame &optional frame minibuf
773 Like @code{next-frame}, but cycles through all frames in the opposite
774 direction.
775 @end defun
776
777 See also @code{next-window} and @code{previous-window}, in @ref{Cyclic
778 Window Ordering}.
779
780 @node Frames and Windows
781 @section Frames and Windows
782
783 Each window is part of one and only one frame; you can get the frame
784 with @code{window-frame}.
785
786 @defun window-frame window
787 This function returns the frame that @var{window} is on.
788 @end defun
789
790 All the non-minibuffer windows in a frame are arranged in a cyclic
791 order. The order runs from the frame's top window, which is at the
792 upper left corner, down and to the right, until it reaches the window at
793 the lower right corner (always the minibuffer window, if the frame has
794 one), and then it moves back to the top. @xref{Cyclic Window Ordering}.
795
796 @defun frame-first-window frame
797 This returns the topmost, leftmost window of frame @var{frame}.
798 @end defun
799
800 At any time, exactly one window on any frame is @dfn{selected within the
801 frame}. The significance of this designation is that selecting the
802 frame also selects this window. You can get the frame's current
803 selected window with @code{frame-selected-window}.
804
805 @defun frame-selected-window frame
806 This function returns the window on @var{frame} that is selected within
807 @var{frame}.
808 @end defun
809
810 Conversely, selecting a window for Emacs with @code{select-window} also
811 makes that window selected within its frame. @xref{Selecting Windows}.
812
813 Another function that (usually) returns one of the windows in a given
814 frame is @code{minibuffer-window}. @xref{Minibuffer Misc}.
815
816 @node Minibuffers and Frames
817 @section Minibuffers and Frames
818
819 Normally, each frame has its own minibuffer window at the bottom, which
820 is used whenever that frame is selected. If the frame has a minibuffer,
821 you can get it with @code{minibuffer-window} (@pxref{Minibuffer Misc}).
822
823 However, you can also create a frame with no minibuffer. Such a frame
824 must use the minibuffer window of some other frame. When you create the
825 frame, you can specify explicitly the minibuffer window to use (in some
826 other frame). If you don't, then the minibuffer is found in the frame
827 which is the value of the variable @code{default-minibuffer-frame}. Its
828 value should be a frame that does have a minibuffer.
829
830 If you use a minibuffer-only frame, you might want that frame to raise
831 when you enter the minibuffer. If so, set the variable
832 @code{minibuffer-auto-raise} to @code{t}. @xref{Raising and Lowering}.
833
834 @defvar default-minibuffer-frame
835 This variable specifies the frame to use for the minibuffer window, by
836 default. It is always local to the current terminal and cannot be
837 buffer-local. @xref{Multiple Displays}.
838 @end defvar
839
840 @node Input Focus
841 @section Input Focus
842 @cindex input focus
843 @cindex selected frame
844
845 At any time, one frame in Emacs is the @dfn{selected frame}. The selected
846 window always resides on the selected frame.
847
848 @defun selected-frame
849 This function returns the selected frame.
850 @end defun
851
852 Some window systems and window managers direct keyboard input to the
853 window object that the mouse is in; others require explicit clicks or
854 commands to @dfn{shift the focus} to various window objects. Either
855 way, Emacs automatically keeps track of which frame has the focus.
856
857 Lisp programs can also switch frames ``temporarily'' by calling the
858 function @code{select-frame}. This does not alter the window system's
859 concept of focus; rather, it escapes from the window manager's control
860 until that control is somehow reasserted.
861
862 When using a text-only terminal, only the selected terminal frame is
863 actually displayed on the terminal. @code{switch-frame} is the only way
864 to switch frames, and the change lasts until overridden by a subsequent
865 call to @code{switch-frame}. Each terminal screen except for the
866 initial one has a number, and the number of the selected frame appears
867 in the mode line before the buffer name (@pxref{Mode Line Variables}).
868
869 @c ??? This is not yet implemented properly.
870 @defun select-frame frame
871 This function selects frame @var{frame}, temporarily disregarding the
872 focus of the X server if any. The selection of @var{frame} lasts until
873 the next time the user does something to select a different frame, or
874 until the next time this function is called.
875 @end defun
876
877 Emacs cooperates with the window system by arranging to select frames as
878 the server and window manager request. It does so by generating a
879 special kind of input event, called a @dfn{focus} event, when
880 appropriate. The command loop handles a focus event by calling
881 @code{handle-switch-frame}. @xref{Focus Events}.
882
883 @deffn Command handle-switch-frame frame
884 This function handles a focus event by selecting frame @var{frame}.
885
886 Focus events normally do their job by invoking this command.
887 Don't call it for any other reason.
888 @end deffn
889
890 @defun redirect-frame-focus frame focus-frame
891 This function redirects focus from @var{frame} to @var{focus-frame}.
892 This means that @var{focus-frame} will receive subsequent keystrokes and
893 events intended for @var{frame}. After such an event, the value of
894 @code{last-event-frame} will be @var{focus-frame}. Also, switch-frame
895 events specifying @var{frame} will instead select @var{focus-frame}.
896
897 If @var{focus-frame} is @code{nil}, that cancels any existing
898 redirection for @var{frame}, which therefore once again receives its own
899 events.
900
901 One use of focus redirection is for frames that don't have minibuffers.
902 These frames use minibuffers on other frames. Activating a minibuffer
903 on another frame redirects focus to that frame. This puts the focus on
904 the minibuffer's frame, where it belongs, even though the mouse remains
905 in the frame that activated the minibuffer.
906
907 Selecting a frame can also change focus redirections. Selecting frame
908 @code{bar}, when @code{foo} had been selected, changes any redirections
909 pointing to @code{foo} so that they point to @code{bar} instead. This
910 allows focus redirection to work properly when the user switches from
911 one frame to another using @code{select-window}.
912
913 This means that a frame whose focus is redirected to itself is treated
914 differently from a frame whose focus is not redirected.
915 @code{select-frame} affects the former but not the latter.
916
917 The redirection lasts until @code{redirect-frame-focus} is called to
918 change it.
919 @end defun
920
921 @defopt focus-follows-mouse
922 @tindex focus-follows-mouse
923 This option is how you inform Emacs whether the window manager transfers
924 focus when the user moves the mouse. Non-@code{nil} says that it does.
925 When this is so, the command @code{other-frame} moves the mouse to a
926 position consistent with the new selected frame.
927 @end defopt
928
929 @node Visibility of Frames
930 @section Visibility of Frames
931 @cindex visible frame
932 @cindex invisible frame
933 @cindex iconified frame
934 @cindex frame visibility
935
936 A window frame may be @dfn{visible}, @dfn{invisible}, or
937 @dfn{iconified}. If it is visible, you can see its contents. If it is
938 iconified, the frame's contents do not appear on the screen, but an icon
939 does. If the frame is invisible, it doesn't show on the screen, not
940 even as an icon.
941
942 Visibility is meaningless for terminal frames, since only the selected
943 one is actually displayed in any case.
944
945 @deffn Command make-frame-visible &optional frame
946 This function makes frame @var{frame} visible. If you omit @var{frame},
947 it makes the selected frame visible.
948 @end deffn
949
950 @deffn Command make-frame-invisible &optional frame
951 This function makes frame @var{frame} invisible. If you omit
952 @var{frame}, it makes the selected frame invisible.
953 @end deffn
954
955 @deffn Command iconify-frame &optional frame
956 This function iconifies frame @var{frame}. If you omit @var{frame}, it
957 iconifies the selected frame.
958 @end deffn
959
960 @defun frame-visible-p frame
961 This returns the visibility status of frame @var{frame}. The value is
962 @code{t} if @var{frame} is visible, @code{nil} if it is invisible, and
963 @code{icon} if it is iconified.
964 @end defun
965
966 The visibility status of a frame is also available as a frame
967 parameter. You can read or change it as such. @xref{Window Frame
968 Parameters}.
969
970 The user can iconify and deiconify frames with the window manager.
971 This happens below the level at which Emacs can exert any control, but
972 Emacs does provide events that you can use to keep track of such
973 changes. @xref{Misc Events}.
974
975 @node Raising and Lowering
976 @section Raising and Lowering Frames
977
978 Most window systems use a desktop metaphor. Part of this metaphor is
979 the idea that windows are stacked in a notional third dimension
980 perpendicular to the screen surface, and thus ordered from ``highest''
981 to ``lowest''. Where two windows overlap, the one higher up covers
982 the one underneath. Even a window at the bottom of the stack can be
983 seen if no other window overlaps it.
984
985 @cindex raising a frame
986 @cindex lowering a frame
987 A window's place in this ordering is not fixed; in fact, users tend
988 to change the order frequently. @dfn{Raising} a window means moving
989 it ``up'', to the top of the stack. @dfn{Lowering} a window means
990 moving it to the bottom of the stack. This motion is in the notional
991 third dimension only, and does not change the position of the window
992 on the screen.
993
994 You can raise and lower Emacs frame Windows with these functions:
995
996 @deffn Command raise-frame &optional frame
997 This function raises frame @var{frame} (default, the selected frame).
998 @end deffn
999
1000 @deffn Command lower-frame &optional frame
1001 This function lowers frame @var{frame} (default, the selected frame).
1002 @end deffn
1003
1004 @defopt minibuffer-auto-raise
1005 If this is non-@code{nil}, activation of the minibuffer raises the frame
1006 that the minibuffer window is in.
1007 @end defopt
1008
1009 You can also enable auto-raise (raising automatically when a frame is
1010 selected) or auto-lower (lowering automatically when it is deselected)
1011 for any frame using frame parameters. @xref{Window Frame Parameters}.
1012
1013 @node Frame Configurations
1014 @section Frame Configurations
1015 @cindex frame configuration
1016
1017 A @dfn{frame configuration} records the current arrangement of frames,
1018 all their properties, and the window configuration of each one.
1019 (@xref{Window Configurations}.)
1020
1021 @defun current-frame-configuration
1022 This function returns a frame configuration list that describes
1023 the current arrangement of frames and their contents.
1024 @end defun
1025
1026 @defun set-frame-configuration configuration
1027 This function restores the state of frames described in
1028 @var{configuration}.
1029 @end defun
1030
1031 @node Mouse Tracking
1032 @section Mouse Tracking
1033 @cindex mouse tracking
1034 @cindex tracking the mouse
1035
1036 Sometimes it is useful to @dfn{track} the mouse, which means to display
1037 something to indicate where the mouse is and move the indicator as the
1038 mouse moves. For efficient mouse tracking, you need a way to wait until
1039 the mouse actually moves.
1040
1041 The convenient way to track the mouse is to ask for events to represent
1042 mouse motion. Then you can wait for motion by waiting for an event. In
1043 addition, you can easily handle any other sorts of events that may
1044 occur. That is useful, because normally you don't want to track the
1045 mouse forever---only until some other event, such as the release of a
1046 button.
1047
1048 @defspec track-mouse body@dots{}
1049 This special form executes @var{body}, with generation of mouse motion
1050 events enabled. Typically @var{body} would use @code{read-event} to
1051 read the motion events and modify the display accordingly. @xref{Motion
1052 Events}, for the format of mouse motion events.
1053
1054 The value of @code{track-mouse} is that of the last form in @var{body}.
1055 You should design @var{body} to return when it sees the up-event that
1056 indicates the release of the button, or whatever kind of event means
1057 it is time to stop tracking.
1058 @end defspec
1059
1060 The usual purpose of tracking mouse motion is to indicate on the screen
1061 the consequences of pushing or releasing a button at the current
1062 position.
1063
1064 In many cases, you can avoid the need to track the mouse by using
1065 the @code{mouse-face} text property (@pxref{Special Properties}).
1066 That works at a much lower level and runs more smoothly than
1067 Lisp-level mouse tracking.
1068
1069 @ignore
1070 @c These are not implemented yet.
1071
1072 These functions change the screen appearance instantaneously. The
1073 effect is transient, only until the next ordinary Emacs redisplay. That
1074 is OK for mouse tracking, since it doesn't make sense for mouse tracking
1075 to change the text, and the body of @code{track-mouse} normally reads
1076 the events itself and does not do redisplay.
1077
1078 @defun x-contour-region window beg end
1079 This function draws lines to make a box around the text from @var{beg}
1080 to @var{end}, in window @var{window}.
1081 @end defun
1082
1083 @defun x-uncontour-region window beg end
1084 This function erases the lines that would make a box around the text
1085 from @var{beg} to @var{end}, in window @var{window}. Use it to remove
1086 a contour that you previously made by calling @code{x-contour-region}.
1087 @end defun
1088
1089 @defun x-draw-rectangle frame left top right bottom
1090 This function draws a hollow rectangle on frame @var{frame} with the
1091 specified edge coordinates, all measured in pixels from the inside top
1092 left corner. It uses the cursor color, the one used for indicating the
1093 location of point.
1094 @end defun
1095
1096 @defun x-erase-rectangle frame left top right bottom
1097 This function erases a hollow rectangle on frame @var{frame} with the
1098 specified edge coordinates, all measured in pixels from the inside top
1099 left corner. Erasure means redrawing the text and background that
1100 normally belong in the specified rectangle.
1101 @end defun
1102 @end ignore
1103
1104 @node Mouse Position
1105 @section Mouse Position
1106 @cindex mouse position
1107 @cindex position of mouse
1108
1109 The functions @code{mouse-position} and @code{set-mouse-position}
1110 give access to the current position of the mouse.
1111
1112 @defun mouse-position
1113 This function returns a description of the position of the mouse. The
1114 value looks like @code{(@var{frame} @var{x} . @var{y})}, where @var{x}
1115 and @var{y} are integers giving the position in characters relative to
1116 the top left corner of the inside of @var{frame}.
1117 @end defun
1118
1119 @defun set-mouse-position frame x y
1120 This function @dfn{warps the mouse} to position @var{x}, @var{y} in
1121 frame @var{frame}. The arguments @var{x} and @var{y} are integers,
1122 giving the position in characters relative to the top left corner of the
1123 inside of @var{frame}. If @var{frame} is not visible, this function
1124 does nothing. The return value is not significant.
1125 @end defun
1126
1127 @defun mouse-pixel-position
1128 This function is like @code{mouse-position} except that it returns
1129 coordinates in units of pixels rather than units of characters.
1130 @end defun
1131
1132 @defun set-mouse-pixel-position frame x y
1133 This function warps the mouse like @code{set-mouse-position} except that
1134 @var{x} and @var{y} are in units of pixels rather than units of
1135 characters. These coordinates are not required to be within the frame.
1136
1137 If @var{frame} is not visible, this function does nothing. The return
1138 value is not significant.
1139 @end defun
1140
1141 @need 3000
1142
1143 @node Pop-Up Menus
1144 @section Pop-Up Menus
1145
1146 When using a window system, a Lisp program can pop up a menu so that
1147 the user can choose an alternative with the mouse.
1148
1149 @defun x-popup-menu position menu
1150 This function displays a pop-up menu and returns an indication of
1151 what selection the user makes.
1152
1153 The argument @var{position} specifies where on the screen to put the
1154 menu. It can be either a mouse button event (which says to put the menu
1155 where the user actuated the button) or a list of this form:
1156
1157 @example
1158 ((@var{xoffset} @var{yoffset}) @var{window})
1159 @end example
1160
1161 @noindent
1162 where @var{xoffset} and @var{yoffset} are coordinates, measured in
1163 pixels, counting from the top left corner of @var{window}'s frame.
1164
1165 If @var{position} is @code{t}, it means to use the current mouse
1166 position. If @var{position} is @code{nil}, it means to precompute the
1167 key binding equivalents for the keymaps specified in @var{menu},
1168 without actually displaying or popping up the menu.
1169
1170 The argument @var{menu} says what to display in the menu. It can be a
1171 keymap or a list of keymaps (@pxref{Menu Keymaps}). Alternatively, it
1172 can have the following form:
1173
1174 @example
1175 (@var{title} @var{pane1} @var{pane2}...)
1176 @end example
1177
1178 @noindent
1179 where each pane is a list of form
1180
1181 @example
1182 (@var{title} (@var{line} . @var{item})...)
1183 @end example
1184
1185 Each @var{line} should be a string, and each @var{item} should be the
1186 value to return if that @var{line} is chosen.
1187 @end defun
1188
1189 @strong{Usage note:} Don't use @code{x-popup-menu} to display a menu
1190 if you could do the job with a prefix key defined with a menu keymap.
1191 If you use a menu keymap to implement a menu, @kbd{C-h c} and @kbd{C-h
1192 a} can see the individual items in that menu and provide help for them.
1193 If instead you implement the menu by defining a command that calls
1194 @code{x-popup-menu}, the help facilities cannot know what happens inside
1195 that command, so they cannot give any help for the menu's items.
1196
1197 The menu bar mechanism, which lets you switch between submenus by
1198 moving the mouse, cannot look within the definition of a command to see
1199 that it calls @code{x-popup-menu}. Therefore, if you try to implement a
1200 submenu using @code{x-popup-menu}, it cannot work with the menu bar in
1201 an integrated fashion. This is why all menu bar submenus are
1202 implemented with menu keymaps within the parent menu, and never with
1203 @code{x-popup-menu}. @xref{Menu Bar},
1204
1205 If you want a menu bar submenu to have contents that vary, you should
1206 still use a menu keymap to implement it. To make the contents vary, add
1207 a hook function to @code{menu-bar-update-hook} to update the contents of
1208 the menu keymap as necessary.
1209
1210 @node Dialog Boxes
1211 @section Dialog Boxes
1212 @cindex dialog boxes
1213
1214 A dialog box is a variant of a pop-up menu---it looks a little
1215 different, it always appears in the center of a frame, and it has just
1216 one level and one pane. The main use of dialog boxes is for asking
1217 questions that the user can answer with ``yes'', ``no'', and a few other
1218 alternatives. The functions @code{y-or-n-p} and @code{yes-or-no-p} use
1219 dialog boxes instead of the keyboard, when called from commands invoked
1220 by mouse clicks.
1221
1222 @defun x-popup-dialog position contents
1223 This function displays a pop-up dialog box and returns an indication of
1224 what selection the user makes. The argument @var{contents} specifies
1225 the alternatives to offer; it has this format:
1226
1227 @example
1228 (@var{title} (@var{string} . @var{value})@dots{})
1229 @end example
1230
1231 @noindent
1232 which looks like the list that specifies a single pane for
1233 @code{x-popup-menu}.
1234
1235 The return value is @var{value} from the chosen alternative.
1236
1237 An element of the list may be just a string instead of a cons cell
1238 @code{(@var{string} . @var{value})}. That makes a box that cannot
1239 be selected.
1240
1241 If @code{nil} appears in the list, it separates the left-hand items from
1242 the right-hand items; items that precede the @code{nil} appear on the
1243 left, and items that follow the @code{nil} appear on the right. If you
1244 don't include a @code{nil} in the list, then approximately half the
1245 items appear on each side.
1246
1247 Dialog boxes always appear in the center of a frame; the argument
1248 @var{position} specifies which frame. The possible values are as in
1249 @code{x-popup-menu}, but the precise coordinates don't matter; only the
1250 frame matters.
1251
1252 In some configurations, Emacs cannot display a real dialog box; so
1253 instead it displays the same items in a pop-up menu in the center of the
1254 frame.
1255 @end defun
1256
1257 @node Pointer Shapes
1258 @section Pointer Shapes
1259 @cindex pointer shape
1260 @cindex mouse pointer shape
1261
1262 These variables specify which shape to use for the mouse pointer in
1263 various situations, when using the X Window System:
1264
1265 @table @code
1266 @item x-pointer-shape
1267 @vindex x-pointer-shape
1268 This variable specifies the pointer shape to use ordinarily in the Emacs
1269 frame.
1270
1271 @item x-sensitive-text-pointer-shape
1272 @vindex x-sensitive-text-pointer-shape
1273 This variable specifies the pointer shape to use when the mouse
1274 is over mouse-sensitive text.
1275 @end table
1276
1277 These variables affect newly created frames. They do not normally
1278 affect existing frames; however, if you set the mouse color of a frame,
1279 that also updates its pointer shapes based on the current values of
1280 these variables. @xref{Window Frame Parameters}.
1281
1282 The values you can use, to specify either of these pointer shapes, are
1283 defined in the file @file{lisp/term/x-win.el}. Use @kbd{M-x apropos
1284 @key{RET} x-pointer @key{RET}} to see a list of them.
1285
1286 @node Window System Selections
1287 @section Window System Selections
1288 @cindex selection (for X windows)
1289
1290 The X server records a set of @dfn{selections} which permit transfer of
1291 data between application programs. The various selections are
1292 distinguished by @dfn{selection types}, represented in Emacs by
1293 symbols. X clients including Emacs can read or set the selection for
1294 any given type.
1295
1296 @defun x-set-selection type data
1297 This function sets a ``selection'' in the X server. It takes two
1298 arguments: a selection type @var{type}, and the value to assign to it,
1299 @var{data}. If @var{data} is @code{nil}, it means to clear out the
1300 selection. Otherwise, @var{data} may be a string, a symbol, an integer
1301 (or a cons of two integers or list of two integers), an overlay, or a
1302 cons of two markers pointing to the same buffer. An overlay or a pair
1303 of markers stands for text in the overlay or between the markers.
1304
1305 The argument @var{data} may also be a vector of valid non-vector
1306 selection values.
1307
1308 Each possible @var{type} has its own selection value, which changes
1309 independently. The usual values of @var{type} are @code{PRIMARY} and
1310 @code{SECONDARY}; these are symbols with upper-case names, in accord
1311 with X Window System conventions. The default is @code{PRIMARY}.
1312 @end defun
1313
1314 @defun x-get-selection &optional type data-type
1315 This function accesses selections set up by Emacs or by other X
1316 clients. It takes two optional arguments, @var{type} and
1317 @var{data-type}. The default for @var{type}, the selection type, is
1318 @code{PRIMARY}.
1319
1320 The @var{data-type} argument specifies the form of data conversion to
1321 use, to convert the raw data obtained from another X client into Lisp
1322 data. Meaningful values include @code{TEXT}, @code{STRING},
1323 @code{TARGETS}, @code{LENGTH}, @code{DELETE}, @code{FILE_NAME},
1324 @code{CHARACTER_POSITION}, @code{LINE_NUMBER}, @code{COLUMN_NUMBER},
1325 @code{OWNER_OS}, @code{HOST_NAME}, @code{USER}, @code{CLASS},
1326 @code{NAME}, @code{ATOM}, and @code{INTEGER}. (These are symbols with
1327 upper-case names in accord with X conventions.) The default for
1328 @var{data-type} is @code{STRING}.
1329 @end defun
1330
1331 @cindex cut buffer
1332 The X server also has a set of numbered @dfn{cut buffers} which can
1333 store text or other data being moved between applications. Cut buffers
1334 are considered obsolete, but Emacs supports them for the sake of X
1335 clients that still use them.
1336
1337 @defun x-get-cut-buffer n
1338 This function returns the contents of cut buffer number @var{n}.
1339 @end defun
1340
1341 @defun x-set-cut-buffer string
1342 This function stores @var{string} into the first cut buffer (cut buffer
1343 0), moving the other values down through the series of cut buffers, much
1344 like the way successive kills in Emacs move down the kill ring.
1345 @end defun
1346
1347 @defvar selection-coding-system
1348 @tindex selection-coding-system
1349 This variable specifies the coding system to use when reading and
1350 writing selections, the clipboard, or a cut buffer. @xref{Coding
1351 Systems}. The default is @code{compound-text}.
1352 @end defvar
1353
1354 @cindex clipboard support (for MS-Windows)
1355 When Emacs runs on MS-Windows, it does not implement X selections in
1356 general, but it it does support the clipboard. @code{x-get-selection}
1357 and @code{x-set-selection} on MS-Windows support the text data type
1358 only; if the clipboard holds other types of data, Emacs treats the
1359 clipboard as empty.
1360
1361 @defopt x-select-enable-clipboard
1362 If this is non-@code{nil}, the Emacs yank functions consult the
1363 clipboard before the primary selection, and the kill functions store in
1364 the clipboard as well as the primary selection. Otherwise they do not
1365 access the clipboard at all. The default is @code{nil} on most systems,
1366 but @code{t} on MS-Windows.
1367 @end defopt
1368
1369 @node Color Names
1370 @section Color Names
1371
1372 These functions provide a way to determine which color names are
1373 valid, and what they look like.
1374
1375 @defun color-defined-p color &optional frame
1376 @tindex color-defined-p
1377 This function reports whether a color name is meaningful. It returns
1378 @code{t} if so; otherwise, @code{nil}. The argument @var{frame} says
1379 which frame's display to ask about; if @var{frame} is omitted or
1380 @code{nil}, the selected frame is used.
1381
1382 Note that this does not tell you whether the display you are using
1383 really supports that color. When using X, you can ask for any defined
1384 color on any kind of display, and you will get some result---typically,
1385 the best it knows how to do. Here's an approximate way to test whether
1386 your display supports the color @var{color}:
1387
1388 @example
1389 (defun x-color-supported-p (color &optional frame)
1390 (and (color-defined-p color frame)
1391 (or (x-display-color-p frame)
1392 (member color '("black" "white"))
1393 (and (> (x-display-planes frame) 1)
1394 (equal color "gray")))))
1395 @end example
1396
1397 This function used to be called @code{x-color-defined-p},
1398 and that name is still supported as an alias.
1399 @end defun
1400
1401 @defun defined-colors &optional frame
1402 @tindex defined-colors
1403 This function returns a list of the color names that are defined
1404 and supported on frame @var{frame} (default, the selected frame).
1405
1406 This function used to be called @code{x-defined-colors},
1407 and that name is still supported as an alias.
1408 @end defun
1409
1410 @defun color-values color &optional frame
1411 @tindex color-values
1412 This function returns a value that describes what @var{color} should
1413 ideally look like. If @var{color} is defined, the value is a list of
1414 three integers, which give the amount of red, the amount of green, and
1415 the amount of blue. Each integer ranges in principle from 0 to 65535,
1416 but in practice no value seems to be above 65280. This kind
1417 of three-element list is called an @dfn{rgb value}.
1418
1419 If @var{color} is not defined, the value is @code{nil}.
1420
1421 @example
1422 (color-values "black")
1423 @result{} (0 0 0)
1424 (color-values "white")
1425 @result{} (65280 65280 65280)
1426 (color-values "red")
1427 @result{} (65280 0 0)
1428 (color-values "pink")
1429 @result{} (65280 49152 51968)
1430 (color-values "hungry")
1431 @result{} nil
1432 @end example
1433
1434 The color values are returned for @var{frame}'s display. If @var{frame}
1435 is omitted or @code{nil}, the information is returned for the selected
1436 frame's display.
1437
1438 This function used to be called @code{x-color-values},
1439 and that name is still supported as an alias.
1440 @end defun
1441
1442 @node Text Terminal Colors
1443 @section Text Terminal Colors
1444 @cindex colors on text-only terminals
1445
1446 Emacs can display color on text-only terminals, starting with version
1447 21. These terminals support only a small number of colors, and the
1448 computer uses small integers to select colors on the terminal. This
1449 means that the computer cannot reliably tell what the selected color
1450 looks like; instead, you have to inform your application which small
1451 integers correspond to which colors. However, Emacs does know the
1452 standard set of colors and will try to use them automatically.
1453
1454 @cindex rgb value
1455 Several of these functions use or return @dfn{rgb values}. An rgb
1456 value is a list of three integers, which give the amount of red, the
1457 amount of green, and the amount of blue. Each integer ranges in
1458 principle from 0 to 65535, but in practice the largest value used is
1459 65280.
1460
1461 @defun tty-define-color name number &optional rgb
1462 @tindex tty-define-color
1463 This function associates the color name @var{name} with
1464 color number @var{number} on the terminal.
1465
1466 The optional argument @var{rgb}, if specified, is an rgb value; it says
1467 what the color actually looks like. If you do not specify @var{rgb},
1468 then this color cannot be used by @code{tty-color-approximate} to
1469 approximate other colors, because Emacs does not know what it looks
1470 like.
1471 @end defun
1472
1473 @defun tty-clear-colors
1474 @tindex tty-clear-colors
1475 This function clears the table of defined colors for a text-only terminal.
1476 @end defun
1477
1478 @defvar tty-color-alist
1479 @tindex tty-color-alist
1480 This variable holds an alist recording the colors supported by the
1481 terminal.
1482
1483 Each element has the form @code{(@var{name} @var{number} . @var{rgb})}
1484 or @code{(@var{name} @var{number})}. Here, @var{name} is the color
1485 name, @var{number} is the number used to specify it to the terminal.
1486 If present, @var{rgb} is an rgb value that says what the color
1487 actually looks like.
1488 @end defvar
1489
1490 @defun tty-color-approximate rgb
1491 @tindex tty-color-approximate
1492 This function finds the closest available color, among those in
1493 @code{tty-color-alist}, to that described by the rgb value @var{rgb}.
1494 @end defun
1495
1496 @defun tty-color-translate color
1497 @tindex tty-color-translate
1498 This function finds the closest available color, among those in
1499 @code{tty-color-alist}, to the name @var{color}. If that name
1500 is not defined, the value is @code{nil}.
1501
1502 @var{color} can be an X-style @code{#@var{xxxyyyzzz}} specification
1503 instead of an actual name.
1504 @end defun
1505
1506 @node Resources
1507 @section X Resources
1508
1509 @defun x-get-resource attribute class &optional component subclass
1510 The function @code{x-get-resource} retrieves a resource value from the X
1511 Windows defaults database.
1512
1513 Resources are indexed by a combination of a @dfn{key} and a @dfn{class}.
1514 This function searches using a key of the form
1515 @samp{@var{instance}.@var{attribute}} (where @var{instance} is the name
1516 under which Emacs was invoked), and using @samp{Emacs.@var{class}} as
1517 the class.
1518
1519 The optional arguments @var{component} and @var{subclass} add to the key
1520 and the class, respectively. You must specify both of them or neither.
1521 If you specify them, the key is
1522 @samp{@var{instance}.@var{component}.@var{attribute}}, and the class is
1523 @samp{Emacs.@var{class}.@var{subclass}}.
1524 @end defun
1525
1526 @defvar x-resource-class
1527 This variable specifies the application name that @code{x-get-resource}
1528 should look up. The default value is @code{"Emacs"}. You can examine X
1529 resources for application names other than ``Emacs'' by binding this
1530 variable to some other string, around a call to @code{x-get-resource}.
1531 @end defvar
1532
1533 @xref{Resources X,, X Resources, emacs, The GNU Emacs Manual}.
1534
1535 @node Server Data
1536 @section Data about the X Server
1537
1538 This section describes functions you can use to get information about
1539 the capabilities and origin of an X display that Emacs is using. Each
1540 of these functions lets you specify the display you are interested in:
1541 the @var{display} argument can be either a display name, or a frame
1542 (meaning use the display that frame is on). If you omit the
1543 @var{display} argument, or specify @code{nil}, that means to use the
1544 selected frame's display.
1545
1546 @defun x-display-screens &optional display
1547 This function returns the number of screens associated with the display.
1548 @end defun
1549
1550 @defun x-server-version &optional display
1551 This function returns the list of version numbers of the X server
1552 running the display.
1553 @end defun
1554
1555 @defun x-server-vendor &optional display
1556 This function returns the vendor that provided the X server software.
1557 @end defun
1558
1559 @defun x-display-pixel-height &optional display
1560 This function returns the height of the screen in pixels.
1561 @end defun
1562
1563 @defun x-display-mm-height &optional display
1564 This function returns the height of the screen in millimeters.
1565 @end defun
1566
1567 @defun x-display-pixel-width &optional display
1568 This function returns the width of the screen in pixels.
1569 @end defun
1570
1571 @defun x-display-mm-width &optional display
1572 This function returns the width of the screen in millimeters.
1573 @end defun
1574
1575 @defun x-display-backing-store &optional display
1576 This function returns the backing store capability of the screen.
1577 Values can be the symbols @code{always}, @code{when-mapped}, or
1578 @code{not-useful}.
1579 @end defun
1580
1581 @defun x-display-save-under &optional display
1582 This function returns non-@code{nil} if the display supports the
1583 SaveUnder feature.
1584 @end defun
1585
1586 @defun x-display-planes &optional display
1587 This function returns the number of planes the display supports.
1588 @end defun
1589
1590 @defun x-display-visual-class &optional display
1591 This function returns the visual class for the screen. The value is one
1592 of the symbols @code{static-gray}, @code{gray-scale},
1593 @code{static-color}, @code{pseudo-color}, @code{true-color}, and
1594 @code{direct-color}.
1595 @end defun
1596
1597 @defun x-display-grayscale-p &optional display
1598 This function returns @code{t} if the screen can display shades of gray.
1599 @end defun
1600
1601 @defun x-display-color-p &optional display
1602 This function returns @code{t} if the screen is a color screen.
1603 @end defun
1604
1605 @defun x-display-color-cells &optional display
1606 This function returns the number of color cells the screen supports.
1607 @end defun
1608
1609 @ignore
1610 @defvar x-no-window-manager
1611 This variable's value is @code{t} if no X window manager is in use.
1612 @end defvar
1613 @end ignore
1614
1615 @ignore
1616 @item
1617 The functions @code{x-pixel-width} and @code{x-pixel-height} return the
1618 width and height of an X Window frame, measured in pixels.
1619 @end ignore