| 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, |
|---|
| 4 |
@c 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. |
|---|
| 5 |
@c See the file elisp.texi for copying conditions. |
|---|
| 6 |
@setfilename ../info/frames |
|---|
| 7 |
@node Frames, Positions, Windows, Top |
|---|
| 8 |
@chapter Frames |
|---|
| 9 |
@cindex frame |
|---|
| 10 |
|
|---|
| 11 |
In Emacs editing, A @dfn{frame} is a screen object that contains one |
|---|
| 12 |
or more Emacs windows. It's the kind of object that is called a |
|---|
| 13 |
``window'' in the terminology of graphical environments; but we can't |
|---|
| 14 |
call it a ``window'' here, because Emacs uses that word in a different |
|---|
| 15 |
way. |
|---|
| 16 |
|
|---|
| 17 |
A frame initially contains a single main window and/or a minibuffer |
|---|
| 18 |
window; you can subdivide the main window vertically or horizontally |
|---|
| 19 |
into smaller windows. In Emacs Lisp, a @dfn{frame object} is a Lisp |
|---|
| 20 |
object that represents a frame on the screen. |
|---|
| 21 |
|
|---|
| 22 |
@cindex terminal frame |
|---|
| 23 |
When Emacs runs on a text-only terminal, it starts with one |
|---|
| 24 |
@dfn{terminal frame}. If you create additional ones, Emacs displays |
|---|
| 25 |
one and only one at any given time---on the terminal screen, of course. |
|---|
| 26 |
|
|---|
| 27 |
@cindex window frame |
|---|
| 28 |
When Emacs communicates directly with a supported window system, such |
|---|
| 29 |
as X, it does not have a terminal frame; instead, it starts with |
|---|
| 30 |
a single @dfn{window frame}, but you can create more, and Emacs can |
|---|
| 31 |
display several such frames at once as is usual for window systems. |
|---|
| 32 |
|
|---|
| 33 |
@defun framep object |
|---|
| 34 |
This predicate returns a non-@code{nil} value if @var{object} is a |
|---|
| 35 |
frame, and @code{nil} otherwise. For a frame, the value indicates which |
|---|
| 36 |
kind of display the frame uses: |
|---|
| 37 |
|
|---|
| 38 |
@table @code |
|---|
| 39 |
@item x |
|---|
| 40 |
The frame is displayed in an X window. |
|---|
| 41 |
@item t |
|---|
| 42 |
A terminal frame on a character display. |
|---|
| 43 |
@item mac |
|---|
| 44 |
The frame is displayed on a Macintosh. |
|---|
| 45 |
@item w32 |
|---|
| 46 |
The frame is displayed on MS-Windows 9X/NT. |
|---|
| 47 |
@item pc |
|---|
| 48 |
The frame is displayed on an MS-DOS terminal. |
|---|
| 49 |
@end table |
|---|
| 50 |
@end defun |
|---|
| 51 |
|
|---|
| 52 |
@menu |
|---|
| 53 |
* Creating Frames:: Creating additional frames. |
|---|
| 54 |
* Multiple Displays:: Creating frames on other displays. |
|---|
| 55 |
* Frame Parameters:: Controlling frame size, position, font, etc. |
|---|
| 56 |
* Frame Titles:: Automatic updating of frame titles. |
|---|
| 57 |
* Deleting Frames:: Frames last until explicitly deleted. |
|---|
| 58 |
* Finding All Frames:: How to examine all existing frames. |
|---|
| 59 |
* Frames and Windows:: A frame contains windows; |
|---|
| 60 |
display of text always works through windows. |
|---|
| 61 |
* Minibuffers and Frames:: How a frame finds the minibuffer to use. |
|---|
| 62 |
* Input Focus:: Specifying the selected frame. |
|---|
| 63 |
* Visibility of Frames:: Frames may be visible or invisible, or icons. |
|---|
| 64 |
* Raising and Lowering:: Raising a frame makes it hide other windows; |
|---|
| 65 |
lowering it makes the others hide it. |
|---|
| 66 |
* Frame Configurations:: Saving the state of all frames. |
|---|
| 67 |
* Mouse Tracking:: Getting events that say when the mouse moves. |
|---|
| 68 |
* Mouse Position:: Asking where the mouse is, or moving it. |
|---|
| 69 |
* Pop-Up Menus:: Displaying a menu for the user to select from. |
|---|
| 70 |
* Dialog Boxes:: Displaying a box to ask yes or no. |
|---|
| 71 |
* Pointer Shape:: Specifying the shape of the mouse pointer. |
|---|
| 72 |
* Window System Selections:: Transferring text to and from other X clients. |
|---|
| 73 |
* Drag and Drop:: Internals of Drag-and-Drop implementation. |
|---|
| 74 |
* Color Names:: Getting the definitions of color names. |
|---|
| 75 |
* Text Terminal Colors:: Defining colors for text-only terminals. |
|---|
| 76 |
* Resources:: Getting resource values from the server. |
|---|
| 77 |
* Display Feature Testing:: Determining the features of a terminal. |
|---|
| 78 |
@end menu |
|---|
| 79 |
|
|---|
| 80 |
@xref{Display}, for information about the related topic of |
|---|
| 81 |
controlling Emacs redisplay. |
|---|
| 82 |
|
|---|
| 83 |
@node Creating Frames |
|---|
| 84 |
@section Creating Frames |
|---|
| 85 |
|
|---|
| 86 |
To create a new frame, call the function @code{make-frame}. |
|---|
| 87 |
|
|---|
| 88 |
@defun make-frame &optional alist |
|---|
| 89 |
This function creates and returns a new frame, displaying the current |
|---|
| 90 |
buffer. If you are using a supported window system, it makes a window |
|---|
| 91 |
frame; otherwise, it makes a terminal frame. |
|---|
| 92 |
|
|---|
| 93 |
The argument is an alist specifying frame parameters. Any parameters |
|---|
| 94 |
not mentioned in @var{alist} default according to the value of the |
|---|
| 95 |
variable @code{default-frame-alist}; parameters not specified even there |
|---|
| 96 |
default from the standard X resources or whatever is used instead on |
|---|
| 97 |
your system. |
|---|
| 98 |
|
|---|
| 99 |
The set of possible parameters depends in principle on what kind of |
|---|
| 100 |
window system Emacs uses to display its frames. @xref{Window Frame |
|---|
| 101 |
Parameters}, for documentation of individual parameters you can specify. |
|---|
| 102 |
|
|---|
| 103 |
This function itself does not make the new frame the selected frame. |
|---|
| 104 |
@xref{Input Focus}. The previously selected frame remains selected. |
|---|
| 105 |
However, the window system may select the new frame for its own reasons, |
|---|
| 106 |
for instance if the frame appears under the mouse pointer and your |
|---|
| 107 |
setup is for focus to follow the pointer. |
|---|
| 108 |
@end defun |
|---|
| 109 |
|
|---|
| 110 |
@defvar before-make-frame-hook |
|---|
| 111 |
A normal hook run by @code{make-frame} before it actually creates the |
|---|
| 112 |
frame. |
|---|
| 113 |
@end defvar |
|---|
| 114 |
|
|---|
| 115 |
@defvar after-make-frame-functions |
|---|
| 116 |
An abnormal hook run by @code{make-frame} after it creates the frame. |
|---|
| 117 |
Each function in @code{after-make-frame-functions} receives one argument, the |
|---|
| 118 |
frame just created. |
|---|
| 119 |
@end defvar |
|---|
| 120 |
|
|---|
| 121 |
@node Multiple Displays |
|---|
| 122 |
@section Multiple Displays |
|---|
| 123 |
@cindex multiple X displays |
|---|
| 124 |
@cindex displays, multiple |
|---|
| 125 |
|
|---|
| 126 |
A single Emacs can talk to more than one X display. |
|---|
| 127 |
Initially, Emacs uses just one display---the one chosen with the |
|---|
| 128 |
@code{DISPLAY} environment variable or with the @samp{--display} option |
|---|
| 129 |
(@pxref{Initial Options,,, emacs, The GNU Emacs Manual}). To connect to |
|---|
| 130 |
another display, use the command @code{make-frame-on-display} or specify |
|---|
| 131 |
the @code{display} frame parameter when you create the frame. |
|---|
| 132 |
|
|---|
| 133 |
Emacs treats each X server as a separate terminal, giving each one its |
|---|
| 134 |
own selected frame and its own minibuffer windows. However, only one of |
|---|
| 135 |
those frames is ``@emph{the} selected frame'' at any given moment, see |
|---|
| 136 |
@ref{Input Focus}. |
|---|
| 137 |
|
|---|
| 138 |
A few Lisp variables are @dfn{terminal-local}; that is, they have a |
|---|
| 139 |
separate binding for each terminal. The binding in effect at any time |
|---|
| 140 |
is the one for the terminal that the currently selected frame belongs |
|---|
| 141 |
to. These variables include @code{default-minibuffer-frame}, |
|---|
| 142 |
@code{defining-kbd-macro}, @code{last-kbd-macro}, and |
|---|
| 143 |
@code{system-key-alist}. They are always terminal-local, and can never |
|---|
| 144 |
be buffer-local (@pxref{Buffer-Local Variables}). |
|---|
| 145 |
|
|---|
| 146 |
A single X server can handle more than one screen. A display name |
|---|
| 147 |
@samp{@var{host}:@var{server}.@var{screen}} has three parts; the last |
|---|
| 148 |
part specifies the screen number for a given server. When you use two |
|---|
| 149 |
screens belonging to one server, Emacs knows by the similarity in their |
|---|
| 150 |
names that they share a single keyboard, and it treats them as a single |
|---|
| 151 |
terminal. |
|---|
| 152 |
|
|---|
| 153 |
Note that some graphical terminals can output to more than a one |
|---|
| 154 |
monitor (or other output device) at the same time. On these |
|---|
| 155 |
``multi-monitor'' setups, a single @var{display} value controls the |
|---|
| 156 |
output to all the physical monitors. In this situation, there is |
|---|
| 157 |
currently no platform-independent way for Emacs to distinguish between |
|---|
| 158 |
the different physical monitors. |
|---|
| 159 |
|
|---|
| 160 |
@deffn Command make-frame-on-display display &optional parameters |
|---|
| 161 |
This creates and returns a new frame on display @var{display}, taking |
|---|
| 162 |
the other frame parameters from @var{parameters}. Aside from the |
|---|
| 163 |
@var{display} argument, it is like @code{make-frame} (@pxref{Creating |
|---|
| 164 |
Frames}). |
|---|
| 165 |
@end deffn |
|---|
| 166 |
|
|---|
| 167 |
@defun x-display-list |
|---|
| 168 |
This returns a list that indicates which X displays Emacs has a |
|---|
| 169 |
connection to. The elements of the list are strings, and each one is |
|---|
| 170 |
a display name. |
|---|
| 171 |
@end defun |
|---|
| 172 |
|
|---|
| 173 |
@defun x-open-connection display &optional xrm-string must-succeed |
|---|
| 174 |
This function opens a connection to the X display @var{display}. It |
|---|
| 175 |
does not create a frame on that display, but it permits you to check |
|---|
| 176 |
that communication can be established with that display. |
|---|
| 177 |
|
|---|
| 178 |
The optional argument @var{xrm-string}, if not @code{nil}, is a |
|---|
| 179 |
string of resource names and values, in the same format used in the |
|---|
| 180 |
@file{.Xresources} file. The values you specify override the resource |
|---|
| 181 |
values recorded in the X server itself; they apply to all Emacs frames |
|---|
| 182 |
created on this display. Here's an example of what this string might |
|---|
| 183 |
look like: |
|---|
| 184 |
|
|---|
| 185 |
@example |
|---|
| 186 |
"*BorderWidth: 3\n*InternalBorder: 2\n" |
|---|
| 187 |
@end example |
|---|
| 188 |
|
|---|
| 189 |
@xref{X Resources,, X Resources, emacs, The GNU Emacs Manual}. |
|---|
| 190 |
|
|---|
| 191 |
If @var{must-succeed} is non-@code{nil}, failure to open the connection |
|---|
| 192 |
terminates Emacs. Otherwise, it is an ordinary Lisp error. |
|---|
| 193 |
@end defun |
|---|
| 194 |
|
|---|
| 195 |
@defun x-close-connection display |
|---|
| 196 |
This function closes the connection to display @var{display}. Before |
|---|
| 197 |
you can do this, you must first delete all the frames that were open on |
|---|
| 198 |
that display (@pxref{Deleting Frames}). |
|---|
| 199 |
@end defun |
|---|
| 200 |
|
|---|
| 201 |
@node Frame Parameters |
|---|
| 202 |
@section Frame Parameters |
|---|
| 203 |
@cindex frame parameters |
|---|
| 204 |
|
|---|
| 205 |
A frame has many parameters that control its appearance and behavior. |
|---|
| 206 |
Just what parameters a frame has depends on what display mechanism it |
|---|
| 207 |
uses. |
|---|
| 208 |
|
|---|
| 209 |
Frame parameters exist mostly for the sake of window systems. A |
|---|
| 210 |
terminal frame has a few parameters, mostly for compatibility's sake; |
|---|
| 211 |
only the @code{height}, @code{width}, @code{name}, @code{title}, |
|---|
| 212 |
@code{menu-bar-lines}, @code{buffer-list} and @code{buffer-predicate} |
|---|
| 213 |
parameters do something special. If the terminal supports colors, the |
|---|
| 214 |
parameters @code{foreground-color}, @code{background-color}, |
|---|
| 215 |
@code{background-mode} and @code{display-type} are also meaningful. |
|---|
| 216 |
|
|---|
| 217 |
@menu |
|---|
| 218 |
* Parameter Access:: How to change a frame's parameters. |
|---|
| 219 |
* Initial Parameters:: Specifying frame parameters when you make a frame. |
|---|
| 220 |
* Window Frame Parameters:: List of frame parameters for window systems. |
|---|
| 221 |
* Size and Position:: Changing the size and position of a frame. |
|---|
| 222 |
* Geometry:: Parsing geometry specifications. |
|---|
| 223 |
@end menu |
|---|
| 224 |
|
|---|
| 225 |
@node Parameter Access |
|---|
| 226 |
@subsection Access to Frame Parameters |
|---|
| 227 |
|
|---|
| 228 |
These functions let you read and change the parameter values of a |
|---|
| 229 |
frame. |
|---|
| 230 |
|
|---|
| 231 |
@defun frame-parameter frame parameter |
|---|
| 232 |
This function returns the value of the parameter @var{parameter} (a |
|---|
| 233 |
symbol) of @var{frame}. If @var{frame} is @code{nil}, it returns the |
|---|
| 234 |
selected frame's parameter. If @var{frame} has no setting for |
|---|
| 235 |
@var{parameter}, this function returns @code{nil}. |
|---|
| 236 |
@end defun |
|---|
| 237 |
|
|---|
| 238 |
@defun frame-parameters &optional frame |
|---|
| 239 |
The function @code{frame-parameters} returns an alist listing all the |
|---|
| 240 |
parameters of @var{frame} and their values. If @var{frame} is |
|---|
| 241 |
@code{nil} or omitted, this returns the selected frame's parameters |
|---|
| 242 |
@end defun |
|---|
| 243 |
|
|---|
| 244 |
@defun modify-frame-parameters frame alist |
|---|
| 245 |
This function alters the parameters of frame @var{frame} based on the |
|---|
| 246 |
elements of @var{alist}. Each element of @var{alist} has the form |
|---|
| 247 |
@code{(@var{parm} . @var{value})}, where @var{parm} is a symbol naming a |
|---|
| 248 |
parameter. If you don't mention a parameter in @var{alist}, its value |
|---|
| 249 |
doesn't change. If @var{frame} is @code{nil}, it defaults to the selected |
|---|
| 250 |
frame. |
|---|
| 251 |
@end defun |
|---|
| 252 |
|
|---|
| 253 |
@defun modify-all-frames-parameters alist |
|---|
| 254 |
This function alters the frame parameters of all existing frames |
|---|
| 255 |
according to @var{alist}, then modifies @code{default-frame-alist} |
|---|
| 256 |
(and, if necessary, @code{initial-frame-alist}) to apply the same |
|---|
| 257 |
parameter values to frames that will be created henceforth. |
|---|
| 258 |
@end defun |
|---|
| 259 |
|
|---|
| 260 |
@node Initial Parameters |
|---|
| 261 |
@subsection Initial Frame Parameters |
|---|
| 262 |
|
|---|
| 263 |
You can specify the parameters for the initial startup frame |
|---|
| 264 |
by setting @code{initial-frame-alist} in your init file (@pxref{Init File}). |
|---|
| 265 |
|
|---|
| 266 |
@defvar initial-frame-alist |
|---|
| 267 |
This variable's value is an alist of parameter values used when creating |
|---|
| 268 |
the initial window frame. You can set this variable to specify the |
|---|
| 269 |
appearance of the initial frame without altering subsequent frames. |
|---|
| 270 |
Each element has the form: |
|---|
| 271 |
|
|---|
| 272 |
@example |
|---|
| 273 |
(@var{parameter} . @var{value}) |
|---|
| 274 |
@end example |
|---|
| 275 |
|
|---|
| 276 |
Emacs creates the initial frame before it reads your init |
|---|
| 277 |
file. After reading that file, Emacs checks @code{initial-frame-alist}, |
|---|
| 278 |
and applies the parameter settings in the altered value to the already |
|---|
| 279 |
created initial frame. |
|---|
| 280 |
|
|---|
| 281 |
If these settings affect the frame geometry and appearance, you'll see |
|---|
| 282 |
the frame appear with the wrong ones and then change to the specified |
|---|
| 283 |
ones. If that bothers you, you can specify the same geometry and |
|---|
| 284 |
appearance with X resources; those do take effect before the frame is |
|---|
| 285 |
created. @xref{X Resources,, X Resources, emacs, The GNU Emacs Manual}. |
|---|
| 286 |
|
|---|
| 287 |
X resource settings typically apply to all frames. If you want to |
|---|
| 288 |
specify some X resources solely for the sake of the initial frame, and |
|---|
| 289 |
you don't want them to apply to subsequent frames, here's how to achieve |
|---|
| 290 |
this. Specify parameters in @code{default-frame-alist} to override the |
|---|
| 291 |
X resources for subsequent frames; then, to prevent these from affecting |
|---|
| 292 |
the initial frame, specify the same parameters in |
|---|
| 293 |
@code{initial-frame-alist} with values that match the X resources. |
|---|
| 294 |
@end defvar |
|---|
| 295 |
|
|---|
| 296 |
If these parameters specify a separate minibuffer-only frame with |
|---|
| 297 |
@code{(minibuffer . nil)}, and you have not created one, Emacs creates |
|---|
| 298 |
one for you. |
|---|
| 299 |
|
|---|
| 300 |
@defvar minibuffer-frame-alist |
|---|
| 301 |
This variable's value is an alist of parameter values used when creating |
|---|
| 302 |
an initial minibuffer-only frame---if such a frame is needed, according |
|---|
| 303 |
to the parameters for the main initial frame. |
|---|
| 304 |
@end defvar |
|---|
| 305 |
|
|---|
| 306 |
@defvar default-frame-alist |
|---|
| 307 |
This is an alist specifying default values of frame parameters for all |
|---|
| 308 |
Emacs frames---the first frame, and subsequent frames. When using the X |
|---|
| 309 |
Window System, you can get the same results by means of X resources |
|---|
| 310 |
in many cases. |
|---|
| 311 |
|
|---|
| 312 |
Setting this variable does not affect existing frames. |
|---|
| 313 |
@end defvar |
|---|
| 314 |
|
|---|
| 315 |
See also @code{special-display-frame-alist}. @xref{Definition of |
|---|
| 316 |
special-display-frame-alist}. |
|---|
| 317 |
|
|---|
| 318 |
If you use options that specify window appearance when you invoke Emacs, |
|---|
| 319 |
they take effect by adding elements to @code{default-frame-alist}. One |
|---|
| 320 |
exception is @samp{-geometry}, which adds the specified position to |
|---|
| 321 |
@code{initial-frame-alist} instead. @xref{Emacs Invocation,, Command |
|---|
| 322 |
Line Arguments for Emacs Invocation, emacs, The GNU Emacs Manual}. |
|---|
| 323 |
|
|---|
| 324 |
@node Window Frame Parameters |
|---|
| 325 |
@subsection Window Frame Parameters |
|---|
| 326 |
|
|---|
| 327 |
Just what parameters a frame has depends on what display mechanism |
|---|
| 328 |
it uses. This section describes the parameters that have special |
|---|
| 329 |
meanings on some or all kinds of terminals. Of these, @code{name}, |
|---|
| 330 |
@code{title}, @code{height}, @code{width}, @code{buffer-list} and |
|---|
| 331 |
@code{buffer-predicate} provide meaningful information in terminal |
|---|
| 332 |
frames, and @code{tty-color-mode} is meaningful @emph{only} in |
|---|
| 333 |
terminal frames. |
|---|
| 334 |
|
|---|
| 335 |
@menu |
|---|
| 336 |
* Basic Parameters:: Parameters that are fundamental. |
|---|
| 337 |
* Position Parameters:: The position of the frame on the screen. |
|---|
| 338 |
* Size Parameters:: Frame's size. |
|---|
| 339 |
* Layout Parameters:: Size of parts of the frame, and |
|---|
| 340 |
enabling or disabling some parts. |
|---|
| 341 |
* Buffer Parameters:: Which buffers have been or should be shown. |
|---|
| 342 |
* Management Parameters:: Communicating with the window manager. |
|---|
| 343 |
* Cursor Parameters:: Controlling the cursor appearance. |
|---|
| 344 |
* Color Parameters:: Colors of various parts of the frame. |
|---|
| 345 |
@end menu |
|---|
| 346 |
|
|---|
| 347 |
@node Basic Parameters |
|---|
| 348 |
@subsubsection Basic Parameters |
|---|
| 349 |
|
|---|
| 350 |
These frame parameters give the most basic information about the |
|---|
| 351 |
frame. @code{title} and @code{name} are meaningful on all terminals. |
|---|
| 352 |
|
|---|
| 353 |
@table @code |
|---|
| 354 |
@item display |
|---|
| 355 |
The display on which to open this frame. It should be a string of the |
|---|
| 356 |
form @code{"@var{host}:@var{dpy}.@var{screen}"}, just like the |
|---|
| 357 |
@code{DISPLAY} environment variable. |
|---|
| 358 |
|
|---|
| 359 |
@item display-type |
|---|
| 360 |
This parameter describes the range of possible colors that can be used |
|---|
| 361 |
in this frame. Its value is @code{color}, @code{grayscale} or |
|---|
| 362 |
@code{mono}. |
|---|
| 363 |
|
|---|
| 364 |
@item title |
|---|
| 365 |
If a frame has a non-@code{nil} title, it appears in the window |
|---|
| 366 |
system's title bar at the top of the frame, and also in the mode line |
|---|
| 367 |
of windows in that frame if @code{mode-line-frame-identification} uses |
|---|
| 368 |
@samp{%F} (@pxref{%-Constructs}). This is normally the case when |
|---|
| 369 |
Emacs is not using a window system, and can only display one frame at |
|---|
| 370 |
a time. @xref{Frame Titles}. |
|---|
| 371 |
|
|---|
| 372 |
@item name |
|---|
| 373 |
The name of the frame. The frame name serves as a default for the frame |
|---|
| 374 |
title, if the @code{title} parameter is unspecified or @code{nil}. If |
|---|
| 375 |
you don't specify a name, Emacs sets the frame name automatically |
|---|
| 376 |
(@pxref{Frame Titles}). |
|---|
| 377 |
|
|---|
| 378 |
If you specify the frame name explicitly when you create the frame, the |
|---|
| 379 |
name is also used (instead of the name of the Emacs executable) when |
|---|
| 380 |
looking up X resources for the frame. |
|---|
| 381 |
@end table |
|---|
| 382 |
|
|---|
| 383 |
@node Position Parameters |
|---|
| 384 |
@subsubsection Position Parameters |
|---|
| 385 |
|
|---|
| 386 |
Position parameters' values are normally measured in pixels, but on |
|---|
| 387 |
text-only terminals they count characters or lines instead. |
|---|
| 388 |
|
|---|
| 389 |
@table @code |
|---|
| 390 |
@item left |
|---|
| 391 |
The screen position of the left edge, in pixels, with respect to the |
|---|
| 392 |
left edge of the screen. The value may be a positive number @var{pos}, |
|---|
| 393 |
or a list of the form @code{(+ @var{pos})} which permits specifying a |
|---|
| 394 |
negative @var{pos} value. |
|---|
| 395 |
|
|---|
| 396 |
A negative number @minus{}@var{pos}, or a list of the form @code{(- |
|---|
| 397 |
@var{pos})}, actually specifies the position of the right edge of the |
|---|
| 398 |
window with respect to the right edge of the screen. A positive value |
|---|
| 399 |
of @var{pos} counts toward the left. @strong{Reminder:} if the |
|---|
| 400 |
parameter is a negative integer @minus{}@var{pos}, then @var{pos} is |
|---|
| 401 |
positive. |
|---|
| 402 |
|
|---|
| 403 |
Some window managers ignore program-specified positions. If you want to |
|---|
| 404 |
be sure the position you specify is not ignored, specify a |
|---|
| 405 |
non-@code{nil} value for the @code{user-position} parameter as well. |
|---|
| 406 |
|
|---|
| 407 |
@item top |
|---|
| 408 |
The screen position of the top edge, in pixels, with respect to the |
|---|
| 409 |
top edge of the screen. It works just like @code{left}, except vertically |
|---|
| 410 |
instead of horizontally. |
|---|
| 411 |
|
|---|
| 412 |
@item icon-left |
|---|
| 413 |
The screen position of the left edge @emph{of the frame's icon}, in |
|---|
| 414 |
pixels, counting from the left edge of the screen. This takes effect if |
|---|
| 415 |
and when the frame is iconified. |
|---|
| 416 |
|
|---|
| 417 |
If you specify a value for this parameter, then you must also specify |
|---|
| 418 |
a value for @code{icon-top} and vice versa. The window manager may |
|---|
| 419 |
ignore these two parameters. |
|---|
| 420 |
|
|---|
| 421 |
@item icon-top |
|---|
| 422 |
The screen position of the top edge @emph{of the frame's icon}, in |
|---|
| 423 |
pixels, counting from the top edge of the screen. This takes effect if |
|---|
| 424 |
and when the frame is iconified. |
|---|
| 425 |
|
|---|
| 426 |
@item user-position |
|---|
| 427 |
When you create a frame and specify its screen position with the |
|---|
| 428 |
@code{left} and @code{top} parameters, use this parameter to say whether |
|---|
| 429 |
the specified position was user-specified (explicitly requested in some |
|---|
| 430 |
way by a human user) or merely program-specified (chosen by a program). |
|---|
| 431 |
A non-@code{nil} value says the position was user-specified. |
|---|
| 432 |
|
|---|
| 433 |
Window managers generally heed user-specified positions, and some heed |
|---|
| 434 |
program-specified positions too. But many ignore program-specified |
|---|
| 435 |
positions, placing the window in a default fashion or letting the user |
|---|
| 436 |
place it with the mouse. Some window managers, including @code{twm}, |
|---|
| 437 |
let the user specify whether to obey program-specified positions or |
|---|
| 438 |
ignore them. |
|---|
| 439 |
|
|---|
| 440 |
When you call @code{make-frame}, you should specify a non-@code{nil} |
|---|
| 441 |
value for this parameter if the values of the @code{left} and @code{top} |
|---|
| 442 |
parameters represent the user's stated preference; otherwise, use |
|---|
| 443 |
@code{nil}. |
|---|
| 444 |
@end table |
|---|
| 445 |
|
|---|
| 446 |
@node Size Parameters |
|---|
| 447 |
@subsubsection Size Parameters |
|---|
| 448 |
|
|---|
| 449 |
Size parameters' values are normally measured in pixels, but on |
|---|
| 450 |
text-only terminals they count characters or lines instead. |
|---|
| 451 |
|
|---|
| 452 |
@table @code |
|---|
| 453 |
@item height |
|---|
| 454 |
The height of the frame contents, in characters. (To get the height in |
|---|
| 455 |
pixels, call @code{frame-pixel-height}; see @ref{Size and Position}.) |
|---|
| 456 |
|
|---|
| 457 |
@item width |
|---|
| 458 |
The width of the frame contents, in characters. (To get the width in |
|---|
| 459 |
pixels, call @code{frame-pixel-width}; see @ref{Size and Position}.) |
|---|
| 460 |
|
|---|
| 461 |
@item user-size |
|---|
| 462 |
This does for the size parameters @code{height} and @code{width} what |
|---|
| 463 |
the @code{user-position} parameter (see above) does for the position |
|---|
| 464 |
parameters @code{top} and @code{left}. |
|---|
| 465 |
|
|---|
| 466 |
@item fullscreen |
|---|
| 467 |
Specify that width, height or both shall be set to the size of the screen. |
|---|
| 468 |
The value @code{fullwidth} specifies that width shall be the size of the |
|---|
| 469 |
screen. The value @code{fullheight} specifies that height shall be the |
|---|
| 470 |
size of the screen. The value @code{fullboth} specifies that both the |
|---|
| 471 |
width and the height shall be set to the size of the screen. |
|---|
| 472 |
@end table |
|---|
| 473 |
|
|---|
| 474 |
@node Layout Parameters |
|---|
| 475 |
@subsubsection Layout Parameters |
|---|
| 476 |
|
|---|
| 477 |
These frame parameters enable or disable various parts of the |
|---|
| 478 |
frame, or control their sizes. |
|---|
| 479 |
|
|---|
| 480 |
@table @code |
|---|
| 481 |
@item border-width |
|---|
| 482 |
The width in pixels of the frame's border. |
|---|
| 483 |
|
|---|
| 484 |
@item internal-border-width |
|---|
| 485 |
The distance in pixels between text (or fringe) and the frame's border. |
|---|
| 486 |
|
|---|
| 487 |
@item vertical-scroll-bars |
|---|
| 488 |
Whether the frame has scroll bars for vertical scrolling, and which side |
|---|
| 489 |
of the frame they should be on. The possible values are @code{left}, |
|---|
| 490 |
@code{right}, and @code{nil} for no scroll bars. |
|---|
| 491 |
|
|---|
| 492 |
@ignore |
|---|
| 493 |
@item horizontal-scroll-bars |
|---|
| 494 |
Whether the frame has scroll bars for horizontal scrolling |
|---|
| 495 |
(non-@code{nil} means yes). Horizontal scroll bars are not currently |
|---|
| 496 |
implemented. |
|---|
| 497 |
@end ignore |
|---|
| 498 |
|
|---|
| 499 |
@item scroll-bar-width |
|---|
| 500 |
The width of vertical scroll bars, in pixels, or @code{nil} meaning to |
|---|
| 501 |
use the default width. |
|---|
| 502 |
|
|---|
| 503 |
@item left-fringe |
|---|
| 504 |
@itemx right-fringe |
|---|
| 505 |
The default width of the left and right fringes of windows in this |
|---|
| 506 |
frame (@pxref{Fringes}). If either of these is zero, that effectively |
|---|
| 507 |
removes the corresponding fringe. A value of @code{nil} stands for |
|---|
| 508 |
the standard fringe width, which is the width needed to display the |
|---|
| 509 |
fringe bitmaps. |
|---|
| 510 |
|
|---|
| 511 |
The combined fringe widths must add up to an integral number of |
|---|
| 512 |
columns, so the actual default fringe widths for the frame may be |
|---|
| 513 |
larger than the specified values. The extra width needed to reach an |
|---|
| 514 |
acceptable total is distributed evenly between the left and right |
|---|
| 515 |
fringe. However, you can force one fringe or the other to a precise |
|---|
| 516 |
width by specifying that width as a negative integer. If both widths are |
|---|
| 517 |
negative, only the left fringe gets the specified width. |
|---|
| 518 |
|
|---|
| 519 |
@item menu-bar-lines |
|---|
| 520 |
The number of lines to allocate at the top of the frame for a menu |
|---|
| 521 |
bar. The default is 1. A value of @code{nil} means don't display a |
|---|
| 522 |
menu bar. @xref{Menu Bar}. (The X toolkit and GTK allow at most one |
|---|
| 523 |
menu bar line; they treat larger values as 1.) |
|---|
| 524 |
|
|---|
| 525 |
@item tool-bar-lines |
|---|
| 526 |
The number of lines to use for the tool bar. A value of @code{nil} |
|---|
| 527 |
means don't display a tool bar. (GTK allows at most one tool bar line; |
|---|
| 528 |
it treats larger values as 1.) |
|---|
| 529 |
|
|---|
| 530 |
@item line-spacing |
|---|
| 531 |
Additional space to leave below each text line, in pixels (a positive |
|---|
| 532 |
integer). @xref{Line Height}, for more information. |
|---|
| 533 |
@end table |
|---|
| 534 |
|
|---|
| 535 |
@node Buffer Parameters |
|---|
| 536 |
@subsubsection Buffer Parameters |
|---|
| 537 |
|
|---|
| 538 |
These frame parameters, meaningful on all kinds of terminals, deal |
|---|
| 539 |
with which buffers have been, or should, be displayed in the frame. |
|---|
| 540 |
|
|---|
| 541 |
@table @code |
|---|
| 542 |
@item minibuffer |
|---|
| 543 |
Whether this frame has its own minibuffer. The value @code{t} means |
|---|
| 544 |
yes, @code{nil} means no, @code{only} means this frame is just a |
|---|
| 545 |
minibuffer. If the value is a minibuffer window (in some other frame), |
|---|
| 546 |
the new frame uses that minibuffer. |
|---|
| 547 |
|
|---|
| 548 |
@item buffer-predicate |
|---|
| 549 |
The buffer-predicate function for this frame. The function |
|---|
| 550 |
@code{other-buffer} uses this predicate (from the selected frame) to |
|---|
| 551 |
decide which buffers it should consider, if the predicate is not |
|---|
| 552 |
@code{nil}. It calls the predicate with one argument, a buffer, once for |
|---|
| 553 |
each buffer; if the predicate returns a non-@code{nil} value, it |
|---|
| 554 |
considers that buffer. |
|---|
| 555 |
|
|---|
| 556 |
@item buffer-list |
|---|
| 557 |
A list of buffers that have been selected in this frame, |
|---|
| 558 |
ordered most-recently-selected first. |
|---|
| 559 |
|
|---|
| 560 |
@item unsplittable |
|---|
| 561 |
If non-@code{nil}, this frame's window is never split automatically. |
|---|
| 562 |
@end table |
|---|
| 563 |
|
|---|
| 564 |
@node Management Parameters |
|---|
| 565 |
@subsubsection Window Management Parameters |
|---|
| 566 |
@cindex window manager, and frame parameters |
|---|
| 567 |
|
|---|
| 568 |
These frame parameters, meaningful only on window system displays, |
|---|
| 569 |
interact with the window manager. |
|---|
| 570 |
|
|---|
| 571 |
@table @code |
|---|
| 572 |
@item visibility |
|---|
| 573 |
The state of visibility of the frame. There are three possibilities: |
|---|
| 574 |
@code{nil} for invisible, @code{t} for visible, and @code{icon} for |
|---|
| 575 |
iconified. @xref{Visibility of Frames}. |
|---|
| 576 |
|
|---|
| 577 |
@item auto-raise |
|---|
| 578 |
Whether selecting the frame raises it (non-@code{nil} means yes). |
|---|
| 579 |
|
|---|
| 580 |
@item auto-lower |
|---|
| 581 |
Whether deselecting the frame lowers it (non-@code{nil} means yes). |
|---|
| 582 |
|
|---|
| 583 |
@item icon-type |
|---|
| 584 |
The type of icon to use for this frame when it is iconified. If the |
|---|
| 585 |
value is a string, that specifies a file containing a bitmap to use. |
|---|
| 586 |
Any other non-@code{nil} value specifies the default bitmap icon (a |
|---|
| 587 |
picture of a gnu); @code{nil} specifies a text icon. |
|---|
| 588 |
|
|---|
| 589 |
@item icon-name |
|---|
| 590 |
The name to use in the icon for this frame, when and if the icon |
|---|
| 591 |
appears. If this is @code{nil}, the frame's title is used. |
|---|
| 592 |
|
|---|
| 593 |
@item window-id |
|---|
| 594 |
The number of the window-system window used by the frame |
|---|
| 595 |
to contain the actual Emacs windows. |
|---|
| 596 |
|
|---|
| 597 |
@item outer-window-id |
|---|
| 598 |
The number of the outermost window-system window used for the whole frame. |
|---|
| 599 |
|
|---|
| 600 |
@item wait-for-wm |
|---|
| 601 |
If non-@code{nil}, tell Xt to wait for the window manager to confirm |
|---|
| 602 |
geometry changes. Some window managers, including versions of Fvwm2 |
|---|
| 603 |
and KDE, fail to confirm, so Xt hangs. Set this to @code{nil} to |
|---|
| 604 |
prevent hanging with those window managers. |
|---|
| 605 |
|
|---|
| 606 |
@ignore |
|---|
| 607 |
@item parent-id |
|---|
| 608 |
@c ??? Not yet working. |
|---|
| 609 |
The X window number of the window that should be the parent of this one. |
|---|
| 610 |
Specifying this lets you create an Emacs window inside some other |
|---|
| 611 |
application's window. (It is not certain this will be implemented; try |
|---|
| 612 |
it and see if it works.) |
|---|
| 613 |
@end ignore |
|---|
| 614 |
@end table |
|---|
| 615 |
|
|---|
| 616 |
@node Cursor Parameters |
|---|
| 617 |
@subsubsection Cursor Parameters |
|---|
| 618 |
|
|---|
| 619 |
This frame parameter controls the way the cursor looks. |
|---|
| 620 |
|
|---|
| 621 |
@table @code |
|---|
| 622 |
@item cursor-type |
|---|
| 623 |
How to display the cursor. Legitimate values are: |
|---|
| 624 |
|
|---|
| 625 |
@table @code |
|---|
| 626 |
@item box |
|---|
| 627 |
Display a filled box. (This is the default.) |
|---|
| 628 |
@item hollow |
|---|
| 629 |
Display a hollow box. |
|---|
| 630 |
@item nil |
|---|
| 631 |
Don't display a cursor. |
|---|
| 632 |
@item bar |
|---|
| 633 |
Display a vertical bar between characters. |
|---|
| 634 |
@item (bar . @var{width}) |
|---|
| 635 |
Display a vertical bar @var{width} pixels wide between characters. |
|---|
| 636 |
@item hbar |
|---|
| 637 |
Display a horizontal bar. |
|---|
| 638 |
@item (hbar . @var{height}) |
|---|
| 639 |
Display a horizontal bar @var{height} pixels high. |
|---|
| 640 |
@end table |
|---|
| 641 |
@end table |
|---|
| 642 |
|
|---|
| 643 |
@vindex cursor-type |
|---|
| 644 |
The buffer-local variable @code{cursor-type} overrides the value of |
|---|
| 645 |
the @code{cursor-type} frame parameter, but if it is @code{t}, that |
|---|
| 646 |
means to use the cursor specified for the frame. |
|---|
| 647 |
|
|---|
| 648 |
@defvar blink-cursor-alist |
|---|
| 649 |
This variable specifies how to blink the cursor. Each element has the |
|---|
| 650 |
form @code{(@var{on-state} . @var{off-state})}. Whenever the cursor |
|---|
| 651 |
type equals @var{on-state} (comparing using @code{equal}), the |
|---|
| 652 |
corresponding @var{off-state} specifies what the cursor looks like |
|---|
| 653 |
when it blinks ``off.'' Both @var{on-state} and @var{off-state} |
|---|
| 654 |
should be suitable values for the @code{cursor-type} frame parameter. |
|---|
| 655 |
|
|---|
| 656 |
There are various defaults for how to blink each type of cursor, if |
|---|
| 657 |
the type is not mentioned as an @var{on-state} here. Changes in this |
|---|
| 658 |
variable do not take effect immediately, only when you specify the |
|---|
| 659 |
@code{cursor-type} frame parameter. |
|---|
| 660 |
@end defvar |
|---|
| 661 |
|
|---|
| 662 |
@defvar cursor-in-non-selected-windows |
|---|
| 663 |
This variable controls how the cursor looks in a window that is not |
|---|
| 664 |
selected. It supports the same values as the @code{cursor-type} frame |
|---|
| 665 |
parameter; also, @code{nil} means don't display a cursor in |
|---|
| 666 |
nonselected windows, and @code{t} (the default) means use a standard |
|---|
| 667 |
modificatoin of the usual cursor type (solid box becomes hollow box, |
|---|
| 668 |
and bar becomes a narrower bar). |
|---|
| 669 |
@end defvar |
|---|
| 670 |
|
|---|
| 671 |
@node Color Parameters |
|---|
| 672 |
@subsubsection Color Parameters |
|---|
| 673 |
|
|---|
| 674 |
These frame parameters control the use of colors. |
|---|
| 675 |
|
|---|
| 676 |
@table @code |
|---|
| 677 |
@item background-mode |
|---|
| 678 |
This parameter is either @code{dark} or @code{light}, according |
|---|
| 679 |
to whether the background color is a light one or a dark one. |
|---|
| 680 |
|
|---|
| 681 |
@item tty-color-mode |
|---|
| 682 |
@cindex standard colors for character terminals |
|---|
| 683 |
This parameter overrides the terminal's color support as given by the |
|---|
| 684 |
system's terminal capabilities database in that this parameter's value |
|---|
| 685 |
specifies the color mode to use in terminal frames. The value can be |
|---|
| 686 |
either a symbol or a number. A number specifies the number of colors |
|---|
| 687 |
to use (and, indirectly, what commands to issue to produce each |
|---|
| 688 |
color). For example, @code{(tty-color-mode . 8)} specifies use of the |
|---|
| 689 |
ANSI escape sequences for 8 standard text colors. A value of -1 turns |
|---|
| 690 |
off color support. |
|---|
| 691 |
|
|---|
| 692 |
If the parameter's value is a symbol, it specifies a number through |
|---|
| 693 |
the value of @code{tty-color-mode-alist}, and the associated number is |
|---|
| 694 |
used instead. |
|---|
| 695 |
|
|---|
| 696 |
@item screen-gamma |
|---|
| 697 |
@cindex gamma correction |
|---|
| 698 |
If this is a number, Emacs performs ``gamma correction'' which adjusts |
|---|
| 699 |
the brightness of all colors. The value should be the screen gamma of |
|---|
| 700 |
your display, a floating point number. |
|---|
| 701 |
|
|---|
| 702 |
Usual PC monitors have a screen gamma of 2.2, so color values in |
|---|
| 703 |
Emacs, and in X windows generally, are calibrated to display properly |
|---|
| 704 |
on a monitor with that gamma value. If you specify 2.2 for |
|---|
| 705 |
@code{screen-gamma}, that means no correction is needed. Other values |
|---|
| 706 |
request correction, designed to make the corrected colors appear on |
|---|
| 707 |
your screen the way they would have appeared without correction on an |
|---|
| 708 |
ordinary monitor with a gamma value of 2.2. |
|---|
| 709 |
|
|---|
| 710 |
If your monitor displays colors too light, you should specify a |
|---|
| 711 |
@code{screen-gamma} value smaller than 2.2. This requests correction |
|---|
| 712 |
that makes colors darker. A screen gamma value of 1.5 may give good |
|---|
| 713 |
results for LCD color displays. |
|---|
| 714 |
@end table |
|---|
| 715 |
|
|---|
| 716 |
These frame parameters are semi-obsolete in that they are automatically |
|---|
| 717 |
equivalent to particular face attributes of particular faces. |
|---|
| 718 |
@xref{Standard Faces,,, emacs, The Emacs Manual}. |
|---|
| 719 |
|
|---|
| 720 |
@table @code |
|---|
| 721 |
@item font |
|---|
| 722 |
The name of the font for displaying text in the frame. This is a |
|---|
| 723 |
string, either a valid font name for your system or the name of an Emacs |
|---|
| 724 |
fontset (@pxref{Fontsets}). It is equivalent to the @code{font} |
|---|
| 725 |
attribute of the @code{default} face. |
|---|
| 726 |
|
|---|
| 727 |
@item foreground-color |
|---|
| 728 |
The color to use for the image of a character. It is equivalent to |
|---|
| 729 |
the @code{:foreground} attribute of the @code{default} face. |
|---|
| 730 |
|
|---|
| 731 |
@item background-color |
|---|
| 732 |
The color to use for the background of characters. It is equivalent to |
|---|
| 733 |
the @code{:background} attribute of the @code{default} face. |
|---|
| 734 |
|
|---|
| 735 |
@item mouse-color |
|---|
| 736 |
The color for the mouse pointer. It is equivalent to the @code{:background} |
|---|
| 737 |
attribute of the @code{mouse} face. |
|---|
| 738 |
|
|---|
| 739 |
@item cursor-color |
|---|
| 740 |
The color for the cursor that shows point. It is equivalent to the |
|---|
| 741 |
@code{:background} attribute of the @code{cursor} face. |
|---|
| 742 |
|
|---|
| 743 |
@item border-color |
|---|
| 744 |
The color for the border of the frame. It is equivalent to the |
|---|
| 745 |
@code{:background} attribute of the @code{border} face. |
|---|
| 746 |
|
|---|
| 747 |
@item scroll-bar-foreground |
|---|
| 748 |
If non-@code{nil}, the color for the foreground of scroll bars. It is |
|---|
| 749 |
equivalent to the @code{:foreground} attribute of the |
|---|
| 750 |
@code{scroll-bar} face. |
|---|
| 751 |
|
|---|
| 752 |
@item scroll-bar-background |
|---|
| 753 |
If non-@code{nil}, the color for the background of scroll bars. It is |
|---|
| 754 |
equivalent to the @code{:background} attribute of the |
|---|
| 755 |
@code{scroll-bar} face. |
|---|
| 756 |
@end table |
|---|
| 757 |
|
|---|
| 758 |
@node Size and Position |
|---|
| 759 |
@subsection Frame Size And Position |
|---|
| 760 |
@cindex size of frame |
|---|
| 761 |
@cindex screen size |
|---|
| 762 |
@cindex frame size |
|---|
| 763 |
@cindex resize frame |
|---|
| 764 |
|
|---|
| 765 |
You can read or change the size and position of a frame using the |
|---|
| 766 |
frame parameters @code{left}, @code{top}, @code{height}, and |
|---|
| 767 |
@code{width}. Whatever geometry parameters you don't specify are chosen |
|---|
| 768 |
by the window manager in its usual fashion. |
|---|
| 769 |
|
|---|
| 770 |
Here are some special features for working with sizes and positions. |
|---|
| 771 |
(For the precise meaning of ``selected frame'' used by these functions, |
|---|
| 772 |
see @ref{Input Focus}.) |
|---|
| 773 |
|
|---|
| 774 |
@defun set-frame-position frame left top |
|---|
| 775 |
This function sets the position of the top left corner of @var{frame} to |
|---|
| 776 |
@var{left} and @var{top}. These arguments are measured in pixels, and |
|---|
| 777 |
normally count from the top left corner of the screen. |
|---|
| 778 |
|
|---|
| 779 |
Negative parameter values position the bottom edge of the window up from |
|---|
| 780 |
the bottom edge of the screen, or the right window edge to the left of |
|---|
| 781 |
the right edge of the screen. It would probably be better if the values |
|---|
| 782 |
were always counted from the left and top, so that negative arguments |
|---|
| 783 |
would position the frame partly off the top or left edge of the screen, |
|---|
| 784 |
but it seems inadvisable to change that now. |
|---|
| 785 |
@end defun |
|---|
| 786 |
|
|---|
| 787 |
@defun frame-height &optional frame |
|---|
| 788 |
@defunx frame-width &optional frame |
|---|
| 789 |
These functions return the height and width of @var{frame}, measured in |
|---|
| 790 |
lines and columns. If you don't supply @var{frame}, they use the |
|---|
| 791 |
selected frame. |
|---|
| 792 |
@end defun |
|---|
| 793 |
|
|---|
| 794 |
@defun screen-height |
|---|
| 795 |
@defunx screen-width |
|---|
| 796 |
These functions are old aliases for @code{frame-height} and |
|---|
| 797 |
@code{frame-width}. When you are using a non-window terminal, the size |
|---|
| 798 |
of the frame is normally the same as the size of the terminal screen. |
|---|
| 799 |
@end defun |
|---|
| 800 |
|
|---|
| 801 |
@defun frame-pixel-height &optional frame |
|---|
| 802 |
@defunx frame-pixel-width &optional frame |
|---|
| 803 |
These functions return the height and width of the main display area |
|---|
| 804 |
of @var{frame}, measured in pixels. If you don't supply @var{frame}, |
|---|
| 805 |
they use the selected frame. |
|---|
| 806 |
|
|---|
| 807 |
These values include the internal borders, and windows' scroll bars |
|---|
| 808 |
and fringes (which belong to individual windows, not to the frame |
|---|
| 809 |
itself), but do not include menu bars or tool bars (except when using |
|---|
| 810 |
X without an X toolkit). |
|---|
| 811 |
@end defun |
|---|
| 812 |
|
|---|
| 813 |
@defun frame-char-height &optional frame |
|---|
| 814 |
@defunx frame-char-width &optional frame |
|---|
| 815 |
These functions return the height and width of a character in |
|---|
| 816 |
@var{frame}, measured in pixels. The values depend on the choice of |
|---|
| 817 |
font. If you don't supply @var{frame}, these functions use the selected |
|---|
| 818 |
frame. |
|---|
| 819 |
@end defun |
|---|
| 820 |
|
|---|
| 821 |
@defun set-frame-size frame cols rows |
|---|
| 822 |
This function sets the size of @var{frame}, measured in characters; |
|---|
| 823 |
@var{cols} and @var{rows} specify the new width and height. |
|---|
| 824 |
|
|---|
| 825 |
To set the size based on values measured in pixels, use |
|---|
| 826 |
@code{frame-char-height} and @code{frame-char-width} to convert |
|---|
| 827 |
them to units of characters. |
|---|
| 828 |
@end defun |
|---|
| 829 |
|
|---|
| 830 |
@defun set-frame-height frame lines &optional pretend |
|---|
| 831 |
This function resizes @var{frame} to a height of @var{lines} lines. The |
|---|
| 832 |
sizes of existing windows in @var{frame} are altered proportionally to |
|---|
| 833 |
fit. |
|---|
| 834 |
|
|---|
| 835 |
If @var{pretend} is non-@code{nil}, then Emacs displays @var{lines} |
|---|
| 836 |
lines of output in @var{frame}, but does not change its value for the |
|---|
| 837 |
actual height of the frame. This is only useful for a terminal frame. |
|---|
| 838 |
Using a smaller height than the terminal actually implements may be |
|---|
| 839 |
useful to reproduce behavior observed on a smaller screen, or if the |
|---|
| 840 |
terminal malfunctions when using its whole screen. Setting the frame |
|---|
| 841 |
height ``for real'' does not always work, because knowing the correct |
|---|
| 842 |
actual size may be necessary for correct cursor positioning on a |
|---|
| 843 |
terminal frame. |
|---|
| 844 |
@end defun |
|---|
| 845 |
|
|---|
| 846 |
@defun set-frame-width frame width &optional pretend |
|---|
| 847 |
This function sets the width of @var{frame}, measured in characters. |
|---|
| 848 |
The argument @var{pretend} has the same meaning as in |
|---|
| 849 |
@code{set-frame-height}. |
|---|
| 850 |
@end defun |
|---|
| 851 |
|
|---|
| 852 |
@findex set-screen-height |
|---|
| 853 |
@findex set-screen-width |
|---|
| 854 |
The older functions @code{set-screen-height} and |
|---|
| 855 |
@code{set-screen-width} were used to specify the height and width of the |
|---|
| 856 |
screen, in Emacs versions that did not support multiple frames. They |
|---|
| 857 |
are semi-obsolete, but still work; they apply to the selected frame. |
|---|
| 858 |
|
|---|
| 859 |
@node Geometry |
|---|
| 860 |
@subsection Geometry |
|---|
| 861 |
|
|---|
| 862 |
Here's how to examine the data in an X-style window geometry |
|---|
| 863 |
specification: |
|---|
| 864 |
|
|---|
| 865 |
@defun x-parse-geometry geom |
|---|
| 866 |
@cindex geometry specification |
|---|
| 867 |
The function @code{x-parse-geometry} converts a standard X window |
|---|
| 868 |
geometry string to an alist that you can use as part of the argument to |
|---|
| 869 |
@code{make-frame}. |
|---|
| 870 |
|
|---|
| 871 |
The alist describes which parameters were specified in @var{geom}, and |
|---|
| 872 |
gives the values specified for them. Each element looks like |
|---|
| 873 |
@code{(@var{parameter} . @var{value})}. The possible @var{parameter} |
|---|
| 874 |
values are @code{left}, @code{top}, @code{width}, and @code{height}. |
|---|
| 875 |
|
|---|
| 876 |
For the size parameters, the value must be an integer. The position |
|---|
| 877 |
parameter names @code{left} and @code{top} are not totally accurate, |
|---|
| 878 |
because some values indicate the position of the right or bottom edges |
|---|
| 879 |
instead. These are the @var{value} possibilities for the position |
|---|
| 880 |
parameters: |
|---|
| 881 |
|
|---|
| 882 |
@table @asis |
|---|
| 883 |
@item an integer |
|---|
| 884 |
A positive integer relates the left edge or top edge of the window to |
|---|
| 885 |
the left or top edge of the screen. A negative integer relates the |
|---|
| 886 |
right or bottom edge of the window to the right or bottom edge of the |
|---|
| 887 |
screen. |
|---|
| 888 |
|
|---|
| 889 |
@item @code{(+ @var{position})} |
|---|
| 890 |
This specifies the position of the left or top edge of the window |
|---|
| 891 |
relative to the left or top edge of the screen. The integer |
|---|
| 892 |
@var{position} may be positive or negative; a negative value specifies a |
|---|
| 893 |
position outside the screen. |
|---|
| 894 |
|
|---|
| 895 |
@item @code{(- @var{position})} |
|---|
| 896 |
This specifies the position of the right or bottom edge of the window |
|---|
| 897 |
relative to the right or bottom edge of the screen. The integer |
|---|
| 898 |
@var{position} may be positive or negative; a negative value specifies a |
|---|
| 899 |
position outside the screen. |
|---|
| 900 |
@end table |
|---|
| 901 |
|
|---|
| 902 |
Here is an example: |
|---|
| 903 |
|
|---|
| 904 |
@example |
|---|
| 905 |
(x-parse-geometry "35x70+0-0") |
|---|
| 906 |
@result{} ((height . 70) (width . 35) |
|---|
| 907 |
(top - 0) (left . 0)) |
|---|
| 908 |
@end example |
|---|
| 909 |
@end defun |
|---|
| 910 |
|
|---|
| 911 |
@node Frame Titles |
|---|
| 912 |
@section Frame Titles |
|---|
| 913 |
@cindex frame title |
|---|
| 914 |
|
|---|
| 915 |
Every frame has a @code{name} parameter; this serves as the default |
|---|
| 916 |
for the frame title which window systems typically display at the top of |
|---|
| 917 |
the frame. You can specify a name explicitly by setting the @code{name} |
|---|
| 918 |
frame property. |
|---|
| 919 |
|
|---|
| 920 |
Normally you don't specify the name explicitly, and Emacs computes the |
|---|
| 921 |
frame name automatically based on a template stored in the variable |
|---|
| 922 |
@code{frame-title-format}. Emacs recomputes the name each time the |
|---|
| 923 |
frame is redisplayed. |
|---|
| 924 |
|
|---|
| 925 |
@defvar frame-title-format |
|---|
| 926 |
This variable specifies how to compute a name for a frame when you have |
|---|
| 927 |
not explicitly specified one. The variable's value is actually a mode |
|---|
| 928 |
line construct, just like @code{mode-line-format}, except that the |
|---|
| 929 |
@samp{%c} and @samp{%l} constructs are ignored. @xref{Mode Line |
|---|
| 930 |
Data}. |
|---|
| 931 |
@end defvar |
|---|
| 932 |
|
|---|
| 933 |
@defvar icon-title-format |
|---|
| 934 |
This variable specifies how to compute the name for an iconified frame, |
|---|
| 935 |
when you have not explicitly specified the frame title. This title |
|---|
| 936 |
appears in the icon itself. |
|---|
| 937 |
@end defvar |
|---|
| 938 |
|
|---|
| 939 |
@defvar multiple-frames |
|---|
| 940 |
This variable is set automatically by Emacs. Its value is @code{t} when |
|---|
| 941 |
there are two or more frames (not counting minibuffer-only frames or |
|---|
| 942 |
invisible frames). The default value of @code{frame-title-format} uses |
|---|
| 943 |
@code{multiple-frames} so as to put the buffer name in the frame title |
|---|
| 944 |
only when there is more than one frame. |
|---|
| 945 |
|
|---|
| 946 |
The value of this variable is not guaranteed to be accurate except |
|---|
| 947 |
while processing @code{frame-title-format} or |
|---|
| 948 |
@code{icon-title-format}. |
|---|
| 949 |
@end defvar |
|---|
| 950 |
|
|---|
| 951 |
@node Deleting Frames |
|---|
| 952 |
@section Deleting Frames |
|---|
| 953 |
@cindex deleting frames |
|---|
| 954 |
|
|---|
| 955 |
Frames remain potentially visible until you explicitly @dfn{delete} |
|---|
| 956 |
them. A deleted frame cannot appear on the screen, but continues to |
|---|
| 957 |
exist as a Lisp object until there are no references to it. |
|---|
| 958 |
|
|---|
| 959 |
@deffn Command delete-frame &optional frame force |
|---|
| 960 |
@vindex delete-frame-functions |
|---|
| 961 |
This function deletes the frame @var{frame}. Unless @var{frame} is a |
|---|
| 962 |
tooltip, it first runs the hook @code{delete-frame-functions} (each |
|---|
| 963 |
function gets one argument, @var{frame}). By default, @var{frame} is |
|---|
| 964 |
the selected frame. |
|---|
| 965 |
|
|---|
| 966 |
A frame cannot be deleted if its minibuffer is used by other frames. |
|---|
| 967 |
Normally, you cannot delete a frame if all other frames are invisible, |
|---|
| 968 |
but if the @var{force} is non-@code{nil}, then you are allowed to do so. |
|---|
| 969 |
@end deffn |
|---|
| 970 |
|
|---|
| 971 |
@defun frame-live-p frame |
|---|
| 972 |
The function @code{frame-live-p} returns non-@code{nil} if the frame |
|---|
| 973 |
@var{frame} has not been deleted. The possible non-@code{nil} return |
|---|
| 974 |
values are like those of @code{framep}. @xref{Frames}. |
|---|
| 975 |
@end defun |
|---|
| 976 |
|
|---|
| 977 |
Some window managers provide a command to delete a window. These work |
|---|
| 978 |
by sending a special message to the program that operates the window. |
|---|
| 979 |
When Emacs gets one of these commands, it generates a |
|---|
| 980 |
@code{delete-frame} event, whose normal definition is a command that |
|---|
| 981 |
calls the function @code{delete-frame}. @xref{Misc Events}. |
|---|
| 982 |
|
|---|
| 983 |
@node Finding All Frames |
|---|
| 984 |
@section Finding All Frames |
|---|
| 985 |
@cindex frames, scanning all |
|---|
| 986 |
|
|---|
| 987 |
@defun frame-list |
|---|
| 988 |
The function @code{frame-list} returns a list of all the frames that |
|---|
| 989 |
have not been deleted. It is analogous to @code{buffer-list} for |
|---|
| 990 |
buffers, and includes frames on all terminals. The list that you get is |
|---|
| 991 |
newly created, so modifying the list doesn't have any effect on the |
|---|
| 992 |
internals of Emacs. |
|---|
| 993 |
@end defun |
|---|
| 994 |
|
|---|
| 995 |
@defun visible-frame-list |
|---|
| 996 |
This function returns a list of just the currently visible frames. |
|---|
| 997 |
@xref{Visibility of Frames}. (Terminal frames always count as |
|---|
| 998 |
``visible,'' even though only the selected one is actually displayed.) |
|---|
| 999 |
@end defun |
|---|
| 1000 |
|
|---|
| 1001 |
@defun next-frame &optional frame minibuf |
|---|
| 1002 |
The function @code{next-frame} lets you cycle conveniently through all |
|---|
| 1003 |
the frames on the current display from an arbitrary starting point. It |
|---|
| 1004 |
returns the ``next'' frame after @var{frame} in the cycle. If |
|---|
| 1005 |
@var{frame} is omitted or @code{nil}, it defaults to the selected frame |
|---|
| 1006 |
(@pxref{Input Focus}). |
|---|
| 1007 |
|
|---|
| 1008 |
The second argument, @var{minibuf}, says which frames to consider: |
|---|
| 1009 |
|
|---|
| 1010 |
@table @asis |
|---|
| 1011 |
@item @code{nil} |
|---|
| 1012 |
Exclude minibuffer-only frames. |
|---|
| 1013 |
@item @code{visible} |
|---|
| 1014 |
Consider all visible frames. |
|---|
| 1015 |
@item 0 |
|---|
| 1016 |
Consider all visible or iconified frames. |
|---|
| 1017 |
@item a window |
|---|
| 1018 |
Consider only the frames using that particular window as their |
|---|
| 1019 |
minibuffer. |
|---|
| 1020 |
@item anything else |
|---|
| 1021 |
Consider all frames. |
|---|
| 1022 |
@end table |
|---|
| 1023 |
@end defun |
|---|
| 1024 |
|
|---|
| 1025 |
@defun previous-frame &optional frame minibuf |
|---|
| 1026 |
Like @code{next-frame}, but cycles through all frames in the opposite |
|---|
| 1027 |
direction. |
|---|
| 1028 |
@end defun |
|---|
| 1029 |
|
|---|
| 1030 |
See also @code{next-window} and @code{previous-window}, in @ref{Cyclic |
|---|
| 1031 |
Window Ordering}. |
|---|
| 1032 |
|
|---|
| 1033 |
@node Frames and Windows |
|---|
| 1034 |
@section Frames and Windows |
|---|
| 1035 |
|
|---|
| 1036 |
Each window is part of one and only one frame; you can get the frame |
|---|
| 1037 |
with @code{window-frame}. |
|---|
| 1038 |
|
|---|
| 1039 |
@defun window-frame window |
|---|
| 1040 |
This function returns the frame that @var{window} is on. |
|---|
| 1041 |
@end defun |
|---|
| 1042 |
|
|---|
| 1043 |
All the non-minibuffer windows in a frame are arranged in a cyclic |
|---|
| 1044 |
order. The order runs from the frame's top window, which is at the |
|---|
| 1045 |
upper left corner, down and to the right, until it reaches the window at |
|---|
| 1046 |
the lower right corner (always the minibuffer window, if the frame has |
|---|
| 1047 |
one), and then it moves back to the top. @xref{Cyclic Window Ordering}. |
|---|
| 1048 |
|
|---|
| 1049 |
@defun frame-first-window &optional frame |
|---|
| 1050 |
This returns the topmost, leftmost window of frame @var{frame}. |
|---|
| 1051 |
If omitted or @code{nil}, @var{frame} defaults to the selected frame. |
|---|
| 1052 |
@end defun |
|---|
| 1053 |
|
|---|
| 1054 |
At any time, exactly one window on any frame is @dfn{selected within the |
|---|
| 1055 |
frame}. The significance of this designation is that selecting the |
|---|
| 1056 |
frame also selects this window. You can get the frame's current |
|---|
| 1057 |
selected window with @code{frame-selected-window}. |
|---|
| 1058 |
|
|---|
| 1059 |
@defun frame-selected-window &optional frame |
|---|
| 1060 |
This function returns the window on @var{frame} that is selected |
|---|
| 1061 |
within @var{frame}. If omitted or @code{nil}, @var{frame} defaults to |
|---|
| 1062 |
the selected frame. |
|---|
| 1063 |
@end defun |
|---|
| 1064 |
|
|---|
| 1065 |
@defun set-frame-selected-window frame window |
|---|
| 1066 |
This sets the selected window of frame @var{frame} to @var{window}. |
|---|
| 1067 |
If @var{frame} is @code{nil}, it operates on the selected frame. If |
|---|
| 1068 |
@var{frame} is the selected frame, this makes @var{window} the |
|---|
| 1069 |
selected window. This function returns @var{window}. |
|---|
| 1070 |
@end defun |
|---|
| 1071 |
|
|---|
| 1072 |
Conversely, selecting a window for Emacs with @code{select-window} also |
|---|
| 1073 |
makes that window selected within its frame. @xref{Selecting Windows}. |
|---|
| 1074 |
|
|---|
| 1075 |
Another function that (usually) returns one of the windows in a given |
|---|
| 1076 |
frame is @code{minibuffer-window}. @xref{Definition of minibuffer-window}. |
|---|
| 1077 |
|
|---|
| 1078 |
@node Minibuffers and Frames |
|---|
| 1079 |
@section Minibuffers and Frames |
|---|
| 1080 |
|
|---|
| 1081 |
Normally, each frame has its own minibuffer window at the bottom, which |
|---|
| 1082 |
is used whenever that frame is selected. If the frame has a minibuffer, |
|---|
| 1083 |
you can get it with @code{minibuffer-window} (@pxref{Definition of |
|---|
| 1084 |
minibuffer-window}). |
|---|
| 1085 |
|
|---|
| 1086 |
However, you can also create a frame with no minibuffer. Such a frame |
|---|
| 1087 |
must use the minibuffer window of some other frame. When you create the |
|---|
| 1088 |
frame, you can specify explicitly the minibuffer window to use (in some |
|---|
| 1089 |
other frame). If you don't, then the minibuffer is found in the frame |
|---|
| 1090 |
which is the value of the variable @code{default-minibuffer-frame}. Its |
|---|
| 1091 |
value should be a frame that does have a minibuffer. |
|---|
| 1092 |
|
|---|
| 1093 |
If you use a minibuffer-only frame, you might want that frame to raise |
|---|
| 1094 |
when you enter the minibuffer. If so, set the variable |
|---|
| 1095 |
@code{minibuffer-auto-raise} to @code{t}. @xref{Raising and Lowering}. |
|---|
| 1096 |
|
|---|
| 1097 |
@defvar default-minibuffer-frame |
|---|
| 1098 |
This variable specifies the frame to use for the minibuffer window, by |
|---|
| 1099 |
default. It does not affect existing frames. It is always local to |
|---|
| 1100 |
the current terminal and cannot be buffer-local. @xref{Multiple |
|---|
| 1101 |
Displays}. |
|---|
| 1102 |
@end defvar |
|---|
| 1103 |
|
|---|
| 1104 |
@node Input Focus |
|---|
| 1105 |
@section Input Focus |
|---|
| 1106 |
@cindex input focus |
|---|
| 1107 |
@c @cindex selected frame Duplicates selected-frame |
|---|
| 1108 |
|
|---|
| 1109 |
At any time, one frame in Emacs is the @dfn{selected frame}. The selected |
|---|
| 1110 |
window always resides on the selected frame. |
|---|
| 1111 |
|
|---|
| 1112 |
When Emacs displays its frames on several terminals (@pxref{Multiple |
|---|
| 1113 |
Displays}), each terminal has its own selected frame. But only one of |
|---|
| 1114 |
these is ``@emph{the} selected frame'': it's the frame that belongs to |
|---|
| 1115 |
the terminal from which the most recent input came. That is, when Emacs |
|---|
| 1116 |
runs a command that came from a certain terminal, the selected frame is |
|---|
| 1117 |
the one of that terminal. Since Emacs runs only a single command at any |
|---|
| 1118 |
given time, it needs to consider only one selected frame at a time; this |
|---|
| 1119 |
frame is what we call @dfn{the selected frame} in this manual. The |
|---|
| 1120 |
display on which the selected frame is displayed is the @dfn{selected |
|---|
| 1121 |
frame's display}. |
|---|
| 1122 |
|
|---|
| 1123 |
@defun selected-frame |
|---|
| 1124 |
This function returns the selected frame. |
|---|
| 1125 |
@end defun |
|---|
| 1126 |
|
|---|
| 1127 |
Some window systems and window managers direct keyboard input to the |
|---|
| 1128 |
window object that the mouse is in; others require explicit clicks or |
|---|
| 1129 |
commands to @dfn{shift the focus} to various window objects. Either |
|---|
| 1130 |
way, Emacs automatically keeps track of which frame has the focus. To |
|---|
| 1131 |
switch to a different frame from a Lisp function, call |
|---|
| 1132 |
@code{select-frame-set-input-focus}. |
|---|
| 1133 |
|
|---|
| 1134 |
Lisp programs can also switch frames ``temporarily'' by calling the |
|---|
| 1135 |
function @code{select-frame}. This does not alter the window system's |
|---|
| 1136 |
concept of focus; rather, it escapes from the window manager's control |
|---|
| 1137 |
until that control is somehow reasserted. |
|---|
| 1138 |
|
|---|
| 1139 |
When using a text-only terminal, only one frame can be displayed at a |
|---|
| 1140 |
time on the terminal, so after a call to @code{select-frame}, the next |
|---|
| 1141 |
redisplay actually displays the newly selected frame. This frame |
|---|
| 1142 |
remains selected until a subsequent call to @code{select-frame} or |
|---|
| 1143 |
@code{select-frame-set-input-focus}. Each terminal frame has a number |
|---|
| 1144 |
which appears in the mode line before the buffer name (@pxref{Mode |
|---|
| 1145 |
Line Variables}). |
|---|
| 1146 |
|
|---|
| 1147 |
@defun select-frame-set-input-focus frame |
|---|
| 1148 |
This function makes @var{frame} the selected frame, raises it (should |
|---|
| 1149 |
it happen to be obscured by other frames) and tries to give it the X |
|---|
| 1150 |
server's focus. On a text-only terminal, the next redisplay displays |
|---|
| 1151 |
the new frame on the entire terminal screen. The return value of this |
|---|
| 1152 |
function is not significant. |
|---|
| 1153 |
@end defun |
|---|
| 1154 |
|
|---|
| 1155 |
@c ??? This is not yet implemented properly. |
|---|
| 1156 |
@defun select-frame frame |
|---|
| 1157 |
This function selects frame @var{frame}, temporarily disregarding the |
|---|
| 1158 |
focus of the X server if any. The selection of @var{frame} lasts until |
|---|
| 1159 |
the next time the user does something to select a different frame, or |
|---|
| 1160 |
until the next time this function is called. (If you are using a |
|---|
| 1161 |
window system, the previously selected frame may be restored as the |
|---|
| 1162 |
selected frame after return to the command loop, because it still may |
|---|
| 1163 |
have the window system's input focus.) The specified @var{frame} |
|---|
| 1164 |
becomes the selected frame, as explained above, and the terminal that |
|---|
| 1165 |
@var{frame} is on becomes the selected terminal. This function |
|---|
| 1166 |
returns @var{frame}, or @code{nil} if @var{frame} has been deleted. |
|---|
| 1167 |
|
|---|
| 1168 |
In general, you should never use @code{select-frame} in a way that could |
|---|
| 1169 |
switch to a different terminal without switching back when you're done. |
|---|
| 1170 |
@end defun |
|---|
| 1171 |
|
|---|
| 1172 |
Emacs cooperates with the window system by arranging to select frames as |
|---|
| 1173 |
the server and window manager request. It does so by generating a |
|---|
| 1174 |
special kind of input event, called a @dfn{focus} event, when |
|---|
| 1175 |
appropriate. The command loop handles a focus event by calling |
|---|
| 1176 |
@code{handle-switch-frame}. @xref{Focus Events}. |
|---|
| 1177 |
|
|---|
| 1178 |
@deffn Command handle-switch-frame frame |
|---|
| 1179 |
This function handles a focus event by selecting frame @var{frame}. |
|---|
| 1180 |
|
|---|
| 1181 |
Focus events normally do their job by invoking this command. |
|---|
| 1182 |
Don't call it for any other reason. |
|---|
| 1183 |
@end deffn |
|---|
| 1184 |
|
|---|
| 1185 |
@defun redirect-frame-focus frame &optional focus-frame |
|---|
| 1186 |
This function redirects focus from @var{frame} to @var{focus-frame}. |
|---|
| 1187 |
This means that @var{focus-frame} will receive subsequent keystrokes and |
|---|
| 1188 |
events intended for @var{frame}. After such an event, the value of |
|---|
| 1189 |
@code{last-event-frame} will be @var{focus-frame}. Also, switch-frame |
|---|
| 1190 |
events specifying @var{frame} will instead select @var{focus-frame}. |
|---|
| 1191 |
|
|---|
| 1192 |
If @var{focus-frame} is omitted or @code{nil}, that cancels any existing |
|---|
| 1193 |
redirection for @var{frame}, which therefore once again receives its own |
|---|
| 1194 |
e |
|---|