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