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