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