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