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