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