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