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