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