428
+ − 1 @c -*-texinfo-*-
+ − 2 @c This is part of the XEmacs Lisp Reference Manual.
444
+ − 3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
428
+ − 4 @c Copyright (C) 1995, 1996 Ben Wing.
+ − 5 @c See the file lispref.texi for copying conditions.
+ − 6 @setfilename ../../info/frames.info
+ − 7 @node Frames, Consoles and Devices, Windows, Top
+ − 8 @chapter Frames
+ − 9 @cindex frame
+ − 10
+ − 11 A @var{frame} is a rectangle on the screen that contains one or more
442
+ − 12 XEmacs windows (@pxref{Windows}). A frame initially contains a single
+ − 13 main window (plus perhaps an echo area), which you can subdivide
+ − 14 vertically or horizontally into smaller windows. Each window is
+ − 15 associated with a modeline (@pxref{Modeline Format}), and optionally two
+ − 16 scrollbars (@pxref{Scrollbars}). By default the vertical scrollbar is
+ − 17 on, the horizontal scrollbar is off.
+ − 18
+ − 19 The frame may also contain menubars (@pxref{Menubar}), toolbars
+ − 20 (@pxref{Toolbar Intro}), and gutters (@pxref{Gutter Intro}). By default
+ − 21 there is one of each at the top of the frame, with menubar topmost,
+ − 22 toolbar next, and gutter lowest, immediately above the windows.
+ − 23 (Warning: the gutter is a new, experimental, and unstable feature of
+ − 24 XEmacs version 21.2.)
428
+ − 25
+ − 26 @cindex terminal frame
+ − 27 @cindex X window frame
+ − 28 When XEmacs runs on a text-only terminal, it starts with one
+ − 29 @dfn{TTY frame}. If you create additional ones, XEmacs displays
+ − 30 one and only one at any given time---on the terminal screen, of course.
+ − 31
+ − 32 When XEmacs communicates directly with an X server, it does not have a
+ − 33 TTY frame; instead, it starts with a single @dfn{X window frame}.
+ − 34 It can display multiple X window frames at the same time, each in its
+ − 35 own X window.
+ − 36
+ − 37 @defun framep object
+ − 38 This predicate returns @code{t} if @var{object} is a frame, and
+ − 39 @code{nil} otherwise.
+ − 40 @end defun
+ − 41
+ − 42 @menu
+ − 43 * Creating Frames:: Creating additional frames.
+ − 44 * Frame Properties:: Controlling frame size, position, font, etc.
+ − 45 * Frame Titles:: Automatic updating of frame titles.
+ − 46 * Deleting Frames:: Frames last until explicitly deleted.
+ − 47 * Finding All Frames:: How to examine all existing frames.
+ − 48 * Frames and Windows:: A frame contains windows;
+ − 49 display of text always works through windows.
+ − 50 * Minibuffers and Frames:: How a frame finds the minibuffer to use.
+ − 51 * Input Focus:: Specifying the selected frame.
+ − 52 * Visibility of Frames:: Frames may be visible or invisible, or icons.
+ − 53 * Raising and Lowering:: Raising a frame makes it hide other X windows;
+ − 54 lowering it makes the others hide them.
+ − 55 * Frame Configurations:: Saving the state of all frames.
+ − 56 * Frame Hooks:: Hooks for customizing frame behavior.
+ − 57 @end menu
+ − 58
+ − 59 @xref{Display}, for related information.
+ − 60
+ − 61 @node Creating Frames
+ − 62 @section Creating Frames
+ − 63
+ − 64 To create a new frame, call the function @code{make-frame}.
+ − 65
444
+ − 66 @deffn Command make-frame &optional props device
428
+ − 67 This function creates a new frame on @var{device}, if @var{device}
+ − 68 permits creation of frames. (An X server does; an ordinary terminal
+ − 69 does not (yet).) @var{device} defaults to the selected device if omitted.
+ − 70 @xref{Consoles and Devices}.
+ − 71
+ − 72 The argument @var{props} is a property list (a list of alternating
+ − 73 keyword-value specifications) of properties for the new frame. (An alist
+ − 74 is accepted for backward compatibility but should not be passed in.) Any
+ − 75 properties not mentioned in @var{props} default according to the value
+ − 76 of the variable @code{default-frame-plist}. For X devices, properties
+ − 77 not specified in @code{default-frame-plist} default in turn from
+ − 78 @code{default-x-frame-plist} and, if not specified there, from the X
+ − 79 resources. For TTY devices, @code{default-tty-frame-plist} is consulted
+ − 80 as well as @code{default-frame-plist}.
+ − 81
+ − 82 The set of possible properties depends in principle on what kind of
+ − 83 window system XEmacs uses to display its frames. @xref{X Frame
+ − 84 Properties}, for documentation of individual properties you can specify
+ − 85 when creating an X window frame.
444
+ − 86 @end deffn
428
+ − 87
+ − 88 @node Frame Properties
+ − 89 @section Frame Properties
+ − 90
+ − 91 A frame has many properties that control its appearance and behavior.
+ − 92 Just what properties a frame has depends on which display mechanism it
+ − 93 uses.
+ − 94
+ − 95 Frame properties exist for the sake of window systems. A terminal frame
+ − 96 has few properties, mostly for compatibility's sake; only the height,
+ − 97 width and @code{buffer-predicate} properties really do something.
+ − 98
+ − 99 @menu
+ − 100 * Property Access:: How to change a frame's properties.
+ − 101 * Initial Properties:: Specifying frame properties when you make a frame.
+ − 102 * X Frame Properties:: List of frame properties.
+ − 103 * Size and Position:: Changing the size and position of a frame.
+ − 104 * Frame Name:: The name of a frame (as opposed to its title).
+ − 105 @end menu
+ − 106
+ − 107 @node Property Access
+ − 108 @subsection Access to Frame Properties
+ − 109
+ − 110 These functions let you read and change the properties of a frame.
+ − 111
+ − 112 @defun frame-properties &optional frame
+ − 113 This function returns a plist listing all the properties of @var{frame}
+ − 114 and their values.
+ − 115 @end defun
+ − 116
+ − 117 @defun frame-property frame property &optional default
+ − 118 This function returns @var{frame}'s value for the property
444
+ − 119 @var{property}, or @var{default} if there is no such property.
428
+ − 120 @end defun
+ − 121
+ − 122 @defun set-frame-properties frame plist
+ − 123 This function alters the properties of frame @var{frame} based on the
+ − 124 elements of property list @var{plist}. If you don't mention a property
+ − 125 in @var{plist}, its value doesn't change.
+ − 126 @end defun
+ − 127
444
+ − 128 @defun set-frame-property frame property value
+ − 129 This function sets the property @var{property} of frame @var{frame} to the
+ − 130 value @var{value}.
428
+ − 131 @end defun
+ − 132
+ − 133 @node Initial Properties
+ − 134 @subsection Initial Frame Properties
+ − 135
+ − 136 You can specify the properties for the initial startup frame by setting
+ − 137 @code{initial-frame-plist} in your @file{.emacs} file.
+ − 138
+ − 139 @defvar initial-frame-plist
+ − 140 This variable's value is a plist of alternating property-value pairs
+ − 141 used when creating the initial X window frame.
+ − 142
+ − 143 XEmacs creates the initial frame before it reads your @file{~/.emacs}
+ − 144 file. After reading that file, XEmacs checks @code{initial-frame-plist},
+ − 145 and applies the property settings in the altered value to the already
+ − 146 created initial frame.
+ − 147
+ − 148 If these settings affect the frame geometry and appearance, you'll see
+ − 149 the frame appear with the wrong ones and then change to the specified
+ − 150 ones. If that bothers you, you can specify the same geometry and
+ − 151 appearance with X resources; those do take affect before the frame is
+ − 152 created. @xref{Resources X,, X Resources, xemacs, The XEmacs User's Manual}.
+ − 153
+ − 154 X resource settings typically apply to all frames. If you want to
+ − 155 specify some X resources solely for the sake of the initial frame, and
+ − 156 you don't want them to apply to subsequent frames, here's how to achieve
+ − 157 this: specify properties in @code{default-frame-plist} to override the X
+ − 158 resources for subsequent frames; then, to prevent these from affecting
+ − 159 the initial frame, specify the same properties in
+ − 160 @code{initial-frame-plist} with values that match the X resources.
+ − 161 @end defvar
+ − 162
+ − 163 If these properties specify a separate minibuffer-only frame via a
+ − 164 @code{minibuffer} property of @code{nil}, and you have not yet created
+ − 165 one, XEmacs creates one for you.
+ − 166
+ − 167 @defvar minibuffer-frame-plist
+ − 168 This variable's value is a plist of properties used when creating an
+ − 169 initial minibuffer-only frame---if such a frame is needed, according to
+ − 170 the properties for the main initial frame.
+ − 171 @end defvar
+ − 172
+ − 173 @defvar default-frame-plist
+ − 174 This is a plist specifying default values of frame properties for
+ − 175 subsequent XEmacs frames (not the initial ones).
+ − 176 @end defvar
+ − 177
+ − 178 See also @code{special-display-frame-plist}, in @ref{Choosing Window}.
+ − 179
+ − 180 If you use options that specify window appearance when you invoke XEmacs,
+ − 181 they take effect by adding elements to @code{default-frame-plist}. One
+ − 182 exception is @samp{-geometry}, which adds the specified position to
+ − 183 @code{initial-frame-plist} instead. @xref{Command Arguments,,, xemacs,
+ − 184 The XEmacs User's Manual}.
+ − 185
+ − 186 @node X Frame Properties
+ − 187 @subsection X Window Frame Properties
+ − 188
+ − 189 Just what properties a frame has depends on what display mechanism it
+ − 190 uses. Here is a table of the properties of an X window frame; of these,
+ − 191 @code{name}, @code{height}, @code{width}, and @code{buffer-predicate}
+ − 192 provide meaningful information in non-X frames.
+ − 193
+ − 194 @table @code
+ − 195 @item name
+ − 196 The name of the frame. Most window managers display the frame's name in
+ − 197 the frame's border, at the top of the frame. If you don't specify a
+ − 198 name, and you have more than one frame, XEmacs sets the frame name based
+ − 199 on the buffer displayed in the frame's selected window.
+ − 200
+ − 201 If you specify the frame name explicitly when you create the frame, the
+ − 202 name is also used (instead of the name of the XEmacs executable) when
+ − 203 looking up X resources for the frame.
+ − 204
+ − 205 @item display
+ − 206 The display on which to open this frame. It should be a string of the
+ − 207 form @code{"@var{host}:@var{dpy}.@var{screen}"}, just like the
+ − 208 @code{DISPLAY} environment variable.
+ − 209
+ − 210 @item left
+ − 211 The screen position of the left edge, in pixels, with respect to the
+ − 212 left edge of the screen. The value may be a positive number @var{pos},
+ − 213 or a list of the form @code{(+ @var{pos})} which permits specifying a
+ − 214 negative @var{pos} value.
+ − 215
+ − 216 A negative number @minus{}@var{pos}, or a list of the form @code{(-
+ − 217 @var{pos})}, actually specifies the position of the right edge of the
+ − 218 window with respect to the right edge of the screen. A positive value
+ − 219 of @var{pos} counts toward the left. If the property is a negative
+ − 220 integer @minus{}@var{pos} then @var{pos} is positive!
+ − 221
+ − 222 @item top
+ − 223 The screen position of the top edge, in pixels, with respect to the
+ − 224 top edge of the screen. The value may be a positive number @var{pos},
+ − 225 or a list of the form @code{(+ @var{pos})} which permits specifying a
+ − 226 negative @var{pos} value.
+ − 227
+ − 228 A negative number @minus{}@var{pos}, or a list of the form @code{(-
+ − 229 @var{pos})}, actually specifies the position of the bottom edge of the
+ − 230 window with respect to the bottom edge of the screen. A positive value
+ − 231 of @var{pos} counts toward the top. If the property is a negative
+ − 232 integer @minus{}@var{pos} then @var{pos} is positive!
+ − 233
+ − 234 @item icon-left
+ − 235 The screen position of the left edge @emph{of the frame's icon}, in
+ − 236 pixels, counting from the left edge of the screen. This takes effect if
+ − 237 and when the frame is iconified.
+ − 238
+ − 239 @item icon-top
+ − 240 The screen position of the top edge @emph{of the frame's icon}, in
+ − 241 pixels, counting from the top edge of the screen. This takes effect if
+ − 242 and when the frame is iconified.
+ − 243
+ − 244 @item user-position
+ − 245 Non-@code{nil} if the screen position of the frame was explicitly
+ − 246 requested by the user (for example, with the @samp{-geometry} option).
+ − 247 Nothing automatically makes this property non-@code{nil}; it is up to
+ − 248 Lisp programs that call @code{make-frame} to specify this property as
+ − 249 well as specifying the @code{left} and @code{top} properties.
+ − 250
+ − 251 @item height
+ − 252 The height of the frame contents, in characters. (To get the height in
+ − 253 pixels, call @code{frame-pixel-height}; see @ref{Size and Position}.)
+ − 254
+ − 255 @item width
+ − 256 The width of the frame contents, in characters. (To get the height in
+ − 257 pixels, call @code{frame-pixel-width}; see @ref{Size and Position}.)
+ − 258
+ − 259 @item window-id
+ − 260 The number of the X window for the frame.
+ − 261
+ − 262 @item minibuffer
+ − 263 Whether this frame has its own minibuffer. The value @code{t} means
+ − 264 yes, @code{nil} means no, @code{only} means this frame is just a
+ − 265 minibuffer. If the value is a minibuffer window (in some other frame),
+ − 266 the new frame uses that minibuffer. (Minibuffer-only and minibuffer-less
+ − 267 frames are not yet implemented in XEmacs.)
+ − 268
+ − 269 @item buffer-predicate
+ − 270 The buffer-predicate function for this frame. The function
+ − 271 @code{other-buffer} uses this predicate (from the selected frame) to
+ − 272 decide which buffers it should consider, if the predicate is not
+ − 273 @code{nil}. It calls the predicate with one arg, a buffer, once for
+ − 274 each buffer; if the predicate returns a non-@code{nil} value, it
+ − 275 considers that buffer.
+ − 276
+ − 277 @item scroll-bar-width
+ − 278 The width of the vertical scroll bar, in pixels.
+ − 279
+ − 280 @ignore Not in XEmacs
+ − 281 @item icon-type
+ − 282 The type of icon to use for this frame when it is iconified. If the
+ − 283 value is a string, that specifies a file containing a bitmap to use.
+ − 284 Any other non-@code{nil} value specifies the default bitmap icon (a
+ − 285 picture of a gnu); @code{nil} specifies a text icon.
+ − 286
+ − 287 @item icon-name
+ − 288 The name to use in the icon for this frame, when and if the icon
+ − 289 appears. If this is @code{nil}, the frame's title is used.
+ − 290 @end ignore
+ − 291
+ − 292 @item cursor-color
+ − 293 The color for the cursor that shows point.
+ − 294
+ − 295 @item border-color
+ − 296 The color for the border of the frame.
+ − 297
+ − 298 @ignore Not in XEmacs
+ − 299 @item cursor-type
+ − 300 The way to display the cursor. The legitimate values are @code{bar},
+ − 301 @code{box}, and @code{(bar . @var{width})}. The symbol @code{box}
+ − 302 specifies an ordinary black box overlaying the character after point;
+ − 303 that is the default. The symbol @code{bar} specifies a vertical bar
+ − 304 between characters as the cursor. @code{(bar . @var{width})} specifies
+ − 305 a bar @var{width} pixels wide.
+ − 306 @end ignore
+ − 307
+ − 308 @item border-width
+ − 309 The width in pixels of the window border.
+ − 310
+ − 311 @item internal-border-width
+ − 312 The distance in pixels between text and border.
+ − 313
+ − 314 @item unsplittable
+ − 315 If non-@code{nil}, this frame's window is never split automatically.
+ − 316
+ − 317 @item inter-line-space
+ − 318 The space in pixels between adjacent lines of text. (Not currently
+ − 319 implemented.)
+ − 320
+ − 321 @item modeline
+ − 322 Whether the frame has a modeline.
+ − 323 @end table
+ − 324
+ − 325 @node Size and Position
+ − 326 @subsection Frame Size And Position
+ − 327 @cindex size of frame
+ − 328 @cindex frame size
+ − 329 @cindex display lines
+ − 330 @cindex display columns
+ − 331 @cindex resize redisplay
+ − 332 @cindex frame position
+ − 333 @cindex position of frame
+ − 334
+ − 335 You can read or change the size and position of a frame using the
+ − 336 frame properties @code{left}, @code{top}, @code{height}, and
+ − 337 @code{width}. Whatever geometry properties you don't specify are chosen
+ − 338 by the window manager in its usual fashion.
+ − 339
+ − 340 Here are some special features for working with sizes and positions:
+ − 341
+ − 342 @defun set-frame-position frame left top
+ − 343 This function sets the position of the top left corner of @var{frame} to
+ − 344 @var{left} and @var{top}. These arguments are measured in pixels, and
+ − 345 count from the top left corner of the screen. Negative property values
+ − 346 count up or rightward from the top left corner of the screen.
+ − 347 @end defun
+ − 348
+ − 349 @defun frame-height &optional frame
+ − 350 @defunx frame-width &optional frame
+ − 351 These functions return the height and width of @var{frame}, measured in
+ − 352 lines and columns. If you don't supply @var{frame}, they use the selected
+ − 353 frame.
+ − 354 @end defun
+ − 355
+ − 356 @defun frame-pixel-height &optional frame
+ − 357 @defunx frame-pixel-width &optional frame
+ − 358 These functions return the height and width of @var{frame}, measured in
+ − 359 pixels. If you don't supply @var{frame}, they use the selected frame.
+ − 360 @end defun
+ − 361
+ − 362 @defun set-frame-size frame cols rows &optional pretend
+ − 363 This function sets the size of @var{frame}, measured in characters;
+ − 364 @var{cols} and @var{rows} specify the new width and height. (If
444
+ − 365 @var{pretend} is non-@code{nil}, it means that redisplay should act as if
428
+ − 366 the frame's size is @var{cols} by @var{rows}, but the actual size
+ − 367 of the frame should not be changed. You should not normally use
+ − 368 this option.)
+ − 369 @end defun
+ − 370
+ − 371 You can also use the functions @code{set-frame-height} and
+ − 372 @code{set-frame-width} to set the height and width individually.
+ − 373 The frame is the first argument and the size (in rows or columns)
+ − 374 is the second. (There is an optional third argument, @var{pretend},
+ − 375 which has the same purpose as the corresponding argument in
+ − 376 @code{set-frame-size}.)
+ − 377
+ − 378 @ignore @c Not in XEmacs
+ − 379 @defun x-parse-geometry geom
+ − 380 @cindex geometry specification
+ − 381 The function @code{x-parse-geometry} converts a standard X windows
+ − 382 geometry string to a plist that you can use as part of the argument to
+ − 383 @code{make-frame}.
+ − 384
+ − 385 The plist describes which properties were specified in @var{geom}, and
+ − 386 gives the values specified for them. Each element looks like
+ − 387 @code{(@var{property} . @var{value})}. The possible @var{property}
+ − 388 values are @code{left}, @code{top}, @code{width}, and @code{height}.
+ − 389
+ − 390 For the size properties, the value must be an integer. The position
+ − 391 property names @code{left} and @code{top} are not totally accurate,
+ − 392 because some values indicate the position of the right or bottom edges
+ − 393 instead. These are the @var{value} possibilities for the position
+ − 394 properties:
+ − 395
+ − 396 @table @asis
+ − 397 @item an integer
+ − 398 A positive integer relates the left edge or top edge of the window to
+ − 399 the left or top edge of the screen. A negative integer relates the
+ − 400 right or bottom edge of the window to the right or bottom edge of the
+ − 401 screen.
+ − 402
+ − 403 @item @code{(+ @var{position})}
+ − 404 This specifies the position of the left or top edge of the window
+ − 405 relative to the left or top edge of the screen. The integer
+ − 406 @var{position} may be positive or negative; a negative value specifies a
+ − 407 position outside the screen.
+ − 408
+ − 409 @item @code{(- @var{position})}
+ − 410 This specifies the position of the right or bottom edge of the window
+ − 411 relative to the right or bottom edge of the screen. The integer
+ − 412 @var{position} may be positive or negative; a negative value specifies a
+ − 413 position outside the screen.
+ − 414 @end table
+ − 415
+ − 416 Here is an example:
+ − 417
+ − 418 @example
+ − 419 (x-parse-geometry "35x70+0-0")
+ − 420 @result{} ((width . 35) (height . 70)
+ − 421 (left . 0) (top - 0))
+ − 422 @end example
+ − 423 @end defun
+ − 424 @end ignore
+ − 425
+ − 426 @node Frame Name
+ − 427 @subsection The Name of a Frame (As Opposed to Its Title)
+ − 428 @cindex frame name
+ − 429
+ − 430 Under X, every frame has a name, which is not the same as the title of
+ − 431 the frame. A frame's name is used to look up its resources and does
+ − 432 not normally change over the lifetime of a frame. It is perfectly
+ − 433 allowable, and quite common, for multiple frames to have the same
+ − 434 name.
+ − 435
+ − 436 @defun frame-name &optional frame
+ − 437 This function returns the name of @var{frame}, which defaults to the
+ − 438 selected frame if not specified. The name of a frame can also be
+ − 439 obtained from the frame's properties. @xref{Frame Properties}.
+ − 440 @end defun
+ − 441
+ − 442 @defvar default-frame-name
+ − 443 This variable holds the default name to assign to newly-created frames.
+ − 444 This can be overridden by arguments to @code{make-frame}. This
+ − 445 must be a string.
+ − 446 @end defvar
+ − 447
+ − 448 @node Frame Titles
+ − 449 @section Frame Titles
+ − 450
+ − 451 Every frame has a title; most window managers display the frame title at
+ − 452 the top of the frame. You can specify an explicit title with the
+ − 453 @code{name} frame property. But normally you don't specify this
+ − 454 explicitly, and XEmacs computes the title automatically.
+ − 455
+ − 456 XEmacs computes the frame title based on a template stored in the
+ − 457 variable @code{frame-title-format}.
+ − 458
+ − 459 @defvar frame-title-format
+ − 460 This variable specifies how to compute a title for a frame
+ − 461 when you have not explicitly specified one.
+ − 462
+ − 463 The variable's value is actually a modeline construct, just like
+ − 464 @code{modeline-format}. @xref{Modeline Data}.
+ − 465 @end defvar
+ − 466
+ − 467 @defvar frame-icon-title-format
+ − 468 This variable specifies how to compute the title for an iconified frame,
+ − 469 when you have not explicitly specified the frame title. This title
+ − 470 appears in the icon itself.
+ − 471 @end defvar
+ − 472
+ − 473 @defun x-set-frame-icon-pixmap frame pixmap &optional mask
+ − 474 This function sets the icon of the given frame to the given image
+ − 475 instance, which should be an image instance object (as returned by
+ − 476 @code{make-image-instance}), a glyph object (as returned by
+ − 477 @code{make-glyph}), or @code{nil}. If a glyph object is given, the
+ − 478 glyph will be instantiated on the frame to produce an image instance
+ − 479 object.
+ − 480
+ − 481 If the given image instance has a mask, that will be used as the icon mask;
+ − 482 however, not all window managers support this.
+ − 483
+ − 484 The window manager is also not required to support color pixmaps,
+ − 485 only bitmaps (one plane deep).
+ − 486
+ − 487 If the image instance does not have a mask, then the optional
+ − 488 third argument may be the image instance to use as the mask (it must be
+ − 489 one plane deep).
+ − 490 @xref{Glyphs}.
+ − 491 @end defun
+ − 492
+ − 493 @node Deleting Frames
+ − 494 @section Deleting Frames
+ − 495 @cindex deletion of frames
+ − 496
+ − 497 Frames remain potentially visible until you explicitly @dfn{delete}
+ − 498 them. A deleted frame cannot appear on the screen, but continues to
+ − 499 exist as a Lisp object until there are no references to it.
+ − 500
444
+ − 501 @deffn Command delete-frame &optional frame force
428
+ − 502 This function deletes the frame @var{frame}. By default, @var{frame} is
+ − 503 the selected frame.
444
+ − 504
+ − 505 A frame may not be deleted if its minibuffer is used by other frames.
+ − 506 Normally, you cannot delete the last non-minibuffer-only frame (you must
+ − 507 use @code{save-buffers-kill-emacs} or @code{kill-emacs}). However, if
+ − 508 optional second argument @var{force} is non-@code{nil}, you can delete
+ − 509 the last frame. (This will automatically call
+ − 510 @code{save-buffers-kill-emacs}.)
428
+ − 511 @end deffn
+ − 512
+ − 513 @defun frame-live-p frame
+ − 514 The function @code{frame-live-p} returns non-@code{nil} if the frame
+ − 515 @var{frame} has not been deleted.
+ − 516 @end defun
+ − 517
+ − 518 @ignore Not in XEmacs currently
+ − 519 Some window managers provide a command to delete a window. These work
+ − 520 by sending a special message to the program that operates the window.
+ − 521 When XEmacs gets one of these commands, it generates a
+ − 522 @code{delete-frame} event, whose normal definition is a command that
+ − 523 calls the function @code{delete-frame}. @xref{Misc Events}.
+ − 524 @end ignore
+ − 525
+ − 526 @node Finding All Frames
+ − 527 @section Finding All Frames
+ − 528
+ − 529 @defun frame-list
+ − 530 The function @code{frame-list} returns a list of all the frames that
+ − 531 have not been deleted. It is analogous to @code{buffer-list} for
+ − 532 buffers. The list that you get is newly created, so modifying the list
+ − 533 doesn't have any effect on the internals of XEmacs.
+ − 534 @end defun
+ − 535
+ − 536 @defun device-frame-list &optional device
+ − 537 This function returns a list of all frames on @var{device}. If
+ − 538 @var{device} is @code{nil}, the selected device will be used.
+ − 539 @end defun
+ − 540
+ − 541 @defun visible-frame-list &optional device
+ − 542 This function returns a list of just the currently visible frames.
+ − 543 If @var{device} is specified only frames on that device will be returned.
+ − 544 @xref{Visibility of Frames}. (TTY frames always count as
+ − 545 ``visible'', even though only the selected one is actually displayed.)
+ − 546 @end defun
+ − 547
444
+ − 548 @defun next-frame &optional frame which-frames which-devices
428
+ − 549 The function @code{next-frame} lets you cycle conveniently through all
+ − 550 the frames from an arbitrary starting point. It returns the ``next''
444
+ − 551 frame after @var{frame} in the cycle. If @var{frame} defaults to the
+ − 552 selected frame.
+ − 553
+ − 554 The second argument, @var{which-frames}, says which frames to consider:
+ − 555
+ − 556 @table @asis
+ − 557 @item @code{visible}
+ − 558 Consider only frames that are visible.
+ − 559
+ − 560 @item @code{iconic}
+ − 561 Consider only frames that are iconic.
+ − 562
+ − 563 @item @code{invisible}
+ − 564 Consider only frames that are invisible (this is different from iconic).
+ − 565
+ − 566 @item @code{visible-iconic}
+ − 567 Consider frames that are visible or iconic.
+ − 568
+ − 569 @item @code{invisible-iconic}
+ − 570 Consider frames that are invisible or iconic.
+ − 571
+ − 572 @item @code{nomini}
+ − 573 Consider all frames except minibuffer-only ones.
428
+ − 574
444
+ − 575 @item @code{visible-nomini}
+ − 576 Like @code{visible} but omits minibuffer-only frames.
+ − 577
+ − 578 @item @code{iconic-nomini}
+ − 579 Like @code{iconic} but omits minibuffer-only frames.
+ − 580
+ − 581 @item @code{invisible-nomini}
+ − 582 Like @code{invisible} but omits minibuffer-only frames.
+ − 583
+ − 584 @item @code{visible-iconic-nomini}
+ − 585 Like @code{visible-iconic} but omits minibuffer-only frames.
+ − 586
+ − 587 @item @code{invisible-iconic-nomini}
+ − 588 Like @code{invisible-iconic} but omits minibuffer-only frames.
+ − 589
+ − 590 @item @code{nil}
+ − 591 Identical to @code{nomini}.
+ − 592
+ − 593 @item @var{window}
+ − 594 Consider only the window @var{window}'s frame and any frame now using
+ − 595 @var{window} as the minibuffer.
+ − 596
+ − 597 @item any other value
+ − 598 Consider all frames.
+ − 599 @end table
+ − 600
+ − 601 The optional argument @var{which-devices} further clarifies on which
+ − 602 devices to search for frames as specified by @var{which-frames}.
428
+ − 603
+ − 604 @table @asis
+ − 605 @item @code{nil}
444
+ − 606 Consider all devices on the selected console.
+ − 607
+ − 608 @item @var{device}
+ − 609 Consider only the one device @var{device}.
+ − 610
+ − 611 @item @var{console}
+ − 612 Consider all devices on @var{console}.
+ − 613
+ − 614 @item @var{device-type}
+ − 615 Consider all devices with device type @var{device-type}.
+ − 616
+ − 617 @item @code{window-system}
+ − 618 Consider all devices on window system consoles.
+ − 619
428
+ − 620 @item anything else
444
+ − 621 Consider all devices without restriction.
428
+ − 622 @end table
+ − 623 @end defun
+ − 624
444
+ − 625 @defun previous-frame &optional frame which-frames which-devices
428
+ − 626 Like @code{next-frame}, but cycles through all frames in the opposite
+ − 627 direction.
+ − 628 @end defun
+ − 629
+ − 630 See also @code{next-window} and @code{previous-window}, in @ref{Cyclic
+ − 631 Window Ordering}.
+ − 632
+ − 633 @node Frames and Windows
+ − 634 @section Frames and Windows
+ − 635
+ − 636 Each window is part of one and only one frame; you can get the frame
+ − 637 with @code{window-frame}.
+ − 638
+ − 639 @defun frame-root-window &optional frame
+ − 640 This returns the root window of frame @var{frame}. @var{frame}
+ − 641 defaults to the selected frame if not specified.
+ − 642 @end defun
+ − 643
+ − 644 @defun window-frame &optional window
+ − 645 This function returns the frame that @var{window} is on. @var{window}
+ − 646 defaults to the selected window if omitted.
+ − 647 @end defun
+ − 648
+ − 649 All the non-minibuffer windows in a frame are arranged in a cyclic
+ − 650 order. The order runs from the frame's top window, which is at the
+ − 651 upper left corner, down and to the right, until it reaches the window at
+ − 652 the lower right corner (always the minibuffer window, if the frame has
+ − 653 one), and then it moves back to the top.
+ − 654
444
+ − 655 @defun frame-highest-window &optional frame position
+ − 656 This function returns the topmost, leftmost window of frame @var{frame}
+ − 657 at position @var{position}.
+ − 658
+ − 659 If omitted, @var{frame} defaults to the currently selected frame.
+ − 660
+ − 661 @var{position} is used to distinguish between multiple windows that abut
+ − 662 the top of the frame: 0 means the leftmost window abutting the top of
+ − 663 the frame, 1 the next-leftmost, etc. @var{position} can also be less
+ − 664 than zero: -1 means the rightmost window abutting the top of the frame,
+ − 665 -2 the next-rightmost, etc. If omitted, @var{position} defaults to 0,
+ − 666 i.e. the leftmost highest window. If there is no window at the given
+ − 667 @var{position}, @code{nil} is returned.
428
+ − 668 @end defun
+ − 669
444
+ − 670 The following three functions work similarly.
+ − 671
+ − 672 @defun frame-lowest-window &optional frame position
+ − 673 This function returns the lowest window on @var{frame} which is at
+ − 674 @var{position}.
+ − 675 @end defun
+ − 676
+ − 677 @defun frame-leftmost-window &optional frame position
+ − 678 This function returns the leftmost window on @var{frame} which is at
+ − 679 @var{position}.
+ − 680 @end defun
+ − 681
+ − 682 @defun frame-rightmost-window &optional frame position
+ − 683 This function returns the rightmost window on @var{frame} which is at
+ − 684 @var{position}.
+ − 685 @end defun
+ − 686
+ − 687
428
+ − 688 At any time, exactly one window on any frame is @dfn{selected within the
+ − 689 frame}. The significance of this designation is that selecting the
+ − 690 frame also selects this window. You can get the frame's current
+ − 691 selected window with @code{frame-selected-window}.
+ − 692
+ − 693 @defun frame-selected-window &optional frame
+ − 694 This function returns the window on @var{frame} that is selected within
+ − 695 @var{frame}. @var{frame} defaults to the selected frame if not
+ − 696 specified.
+ − 697 @end defun
+ − 698
+ − 699 Conversely, selecting a window for XEmacs with @code{select-window} also
+ − 700 makes that window selected within its frame. @xref{Selecting Windows}.
+ − 701
+ − 702 Another function that (usually) returns one of the windows in a frame is
+ − 703 @code{minibuffer-window}. @xref{Minibuffer Misc}.
+ − 704
+ − 705 @node Minibuffers and Frames
+ − 706 @section Minibuffers and Frames
+ − 707
+ − 708 Normally, each frame has its own minibuffer window at the bottom, which
+ − 709 is used whenever that frame is selected. If the frame has a minibuffer,
+ − 710 you can get it with @code{minibuffer-window} (@pxref{Minibuffer Misc}).
+ − 711
+ − 712 However, you can also create a frame with no minibuffer. Such a frame
+ − 713 must use the minibuffer window of some other frame. When you create the
+ − 714 frame, you can specify explicitly the minibuffer window to use (in some
+ − 715 other frame). If you don't, then the minibuffer is found in the frame
+ − 716 which is the value of the variable @code{default-minibuffer-frame}. Its
+ − 717 value should be a frame which does have a minibuffer.
+ − 718
+ − 719 @ignore Not yet in XEmacs
+ − 720 If you use a minibuffer-only frame, you might want that frame to raise
+ − 721 when you enter the minibuffer. If so, set the variable
+ − 722 @code{minibuffer-auto-raise} to @code{t}. @xref{Raising and Lowering}.
+ − 723 @end ignore
+ − 724
+ − 725 @defvar default-minibuffer-frame
+ − 726 This variable specifies the frame to use for the minibuffer window, by
+ − 727 default.
+ − 728 @end defvar
+ − 729
+ − 730 @node Input Focus
+ − 731 @section Input Focus
+ − 732 @cindex input focus
+ − 733 @cindex selected frame
+ − 734
+ − 735 At any time, one frame in XEmacs is the @dfn{selected frame}. The selected
+ − 736 window always resides on the selected frame. As the focus moves from
+ − 737 device to device, the selected frame on each device is remembered and
+ − 738 restored when the focus moves back to that device.
+ − 739
+ − 740 @defun selected-frame &optional device
+ − 741 This function returns the selected frame on @var{device}. If
+ − 742 @var{device} is not specified, the selected device will be used. If no
+ − 743 frames exist on the device, @code{nil} is returned.
+ − 744 @end defun
+ − 745
+ − 746 The X server normally directs keyboard input to the X window that the
+ − 747 mouse is in. Some window managers use mouse clicks or keyboard events
+ − 748 to @dfn{shift the focus} to various X windows, overriding the normal
+ − 749 behavior of the server.
+ − 750
+ − 751 Lisp programs can switch frames ``temporarily'' by calling
+ − 752 the function @code{select-frame}. This does not override the window
+ − 753 manager; rather, it escapes from the window manager's control until
+ − 754 that control is somehow reasserted.
+ − 755
+ − 756 When using a text-only terminal, there is no window manager; therefore,
+ − 757 @code{select-frame} is the only way to switch frames, and the effect
+ − 758 lasts until overridden by a subsequent call to @code{select-frame}.
+ − 759 Only the selected terminal frame is actually displayed on the terminal.
+ − 760 Each terminal screen except for the initial one has a number, and the
+ − 761 number of the selected frame appears in the mode line after the word
+ − 762 @samp{XEmacs} (@pxref{Modeline Variables}).
+ − 763
+ − 764 @defun select-frame frame
+ − 765 This function selects frame @var{frame}, temporarily disregarding the
+ − 766 focus of the X server if any. The selection of @var{frame} lasts until
+ − 767 the next time the user does something to select a different frame, or
+ − 768 until the next time this function is called.
+ − 769
+ − 770 Note that @code{select-frame} does not actually cause the window-system
+ − 771 focus to be set to this frame, or the @code{select-frame-hook} or
+ − 772 @code{deselect-frame-hook} to be run, until the next time that XEmacs is
+ − 773 waiting for an event.
+ − 774
+ − 775 Also note that when the variable @code{focus-follows-mouse} is
+ − 776 non-@code{nil}, the frame selection is temporary and is reverted when
+ − 777 the current command terminates, much like the buffer selected by
+ − 778 @code{set-buffer}. In order to effect a permanent focus change use
+ − 779 @code{focus-frame}.
+ − 780 @end defun
+ − 781
+ − 782 @defun focus-frame frame
+ − 783 This function selects @var{frame} and gives it the window system focus.
+ − 784 The operation of @code{focus-frame} is not affected by the value of
+ − 785 @code{focus-follows-mouse}.
+ − 786 @end defun
+ − 787
444
+ − 788 @defspec save-selected-frame forms@dots{}
+ − 789 This special form records the selected frame, executes @var{forms} in
+ − 790 sequence, then restores the earlier selected frame. The value returned
+ − 791 is the value of the last form.
+ − 792 @end defspec
428
+ − 793
444
+ − 794 @defspec with-selected-frame frame forms@dots{}
+ − 795 This special form records the selected frame, then selects @var{frame}
+ − 796 and executes @var{forms} in sequence. After the last form is finished,
+ − 797 the earlier selected frame is restored. The value returned is the value
+ − 798 of the last form.
+ − 799 @end defspec
428
+ − 800
+ − 801 @ignore (FSF Emacs, continued from defun select-frame)
+ − 802 XEmacs cooperates with the X server and the window managers by arranging
+ − 803 to select frames according to what the server and window manager ask
+ − 804 for. It does so by generating a special kind of input event, called a
+ − 805 @dfn{focus} event. The command loop handles a focus event by calling
+ − 806 @code{handle-select-frame}. @xref{Focus Events}.
+ − 807
+ − 808 @deffn Command handle-switch-frame frame
+ − 809 This function handles a focus event by selecting frame @var{frame}.
+ − 810
+ − 811 Focus events normally do their job by invoking this command.
+ − 812 Don't call it for any other reason.
+ − 813 @end deffn
+ − 814
+ − 815 @defun redirect-frame-focus frame focus-frame
+ − 816 This function redirects focus from @var{frame} to @var{focus-frame}.
+ − 817 This means that @var{focus-frame} will receive subsequent keystrokes
+ − 818 intended for @var{frame}. After such an event, the value of
+ − 819 @code{last-event-frame} will be @var{focus-frame}. Also, switch-frame
+ − 820 events specifying @var{frame} will instead select @var{focus-frame}.
+ − 821
+ − 822 If @var{focus-frame} is @code{nil}, that cancels any existing
+ − 823 redirection for @var{frame}, which therefore once again receives its own
+ − 824 events.
+ − 825
+ − 826 One use of focus redirection is for frames that don't have minibuffers.
+ − 827 These frames use minibuffers on other frames. Activating a minibuffer
+ − 828 on another frame redirects focus to that frame. This puts the focus on
+ − 829 the minibuffer's frame, where it belongs, even though the mouse remains
+ − 830 in the frame that activated the minibuffer.
+ − 831
+ − 832 Selecting a frame can also change focus redirections. Selecting frame
+ − 833 @code{bar}, when @code{foo} had been selected, changes any redirections
+ − 834 pointing to @code{foo} so that they point to @code{bar} instead. This
+ − 835 allows focus redirection to work properly when the user switches from
+ − 836 one frame to another using @code{select-window}.
+ − 837
+ − 838 This means that a frame whose focus is redirected to itself is treated
+ − 839 differently from a frame whose focus is not redirected.
+ − 840 @code{select-frame} affects the former but not the latter.
+ − 841
+ − 842 The redirection lasts until @code{redirect-frame-focus} is called to
+ − 843 change it.
+ − 844 @end defun
+ − 845 @end ignore
+ − 846
+ − 847 @node Visibility of Frames
+ − 848 @section Visibility of Frames
+ − 849 @cindex visible frame
+ − 850 @cindex invisible frame
+ − 851 @cindex iconified frame
+ − 852 @cindex frame visibility
+ − 853
444
+ − 854 An frame on a window system may be @dfn{visible}, @dfn{invisible}, or
428
+ − 855 @dfn{iconified}. If it is visible, you can see its contents. If it is
+ − 856 iconified, the frame's contents do not appear on the screen, but an icon
+ − 857 does. If the frame is invisible, it doesn't show on the screen, not
+ − 858 even as an icon.
+ − 859
+ − 860 Visibility is meaningless for TTY frames, since only the selected
+ − 861 one is actually displayed in any case.
+ − 862
444
+ − 863 @defun make-frame-visible &optional frame
428
+ − 864 This function makes frame @var{frame} visible. If you omit @var{frame},
+ − 865 it makes the selected frame visible.
444
+ − 866 @end defun
428
+ − 867
444
+ − 868 @defun make-frame-invisible &optional frame force
428
+ − 869 This function makes frame @var{frame} invisible.
444
+ − 870 @end defun
428
+ − 871
+ − 872 @deffn Command iconify-frame &optional frame
+ − 873 This function iconifies frame @var{frame}.
+ − 874 @end deffn
+ − 875
444
+ − 876 @defun Command deiconify-frame &optional frame
+ − 877 This function de-iconifies frame @var{frame}. Under a window system,
+ − 878 this is equivalent to @code{make-frame-visible}.
+ − 879 @end defun
428
+ − 880
444
+ − 881 @defun frame-visible-p &optional frame
428
+ − 882 This returns whether @var{frame} is currently ``visible'' (actually in
+ − 883 use for display). A frame that is not visible is not updated, and, if
+ − 884 it works through a window system, may not show at all.
+ − 885 @end defun
+ − 886
444
+ − 887 @defun frame-iconified-p &optional frame
428
+ − 888 This returns whether @var{frame} is iconified. Not all window managers
+ − 889 use icons; some merely unmap the window, so this function is not the
+ − 890 inverse of @code{frame-visible-p}. It is possible for a frame to not
+ − 891 be visible and not be iconified either. However, if the frame is
+ − 892 iconified, it will not be visible. (Under FSF Emacs, the functionality
+ − 893 of this function is obtained through @code{frame-visible-p}.)
+ − 894 @end defun
+ − 895
444
+ − 896 @defun frame-totally-visible-p &optional frame
428
+ − 897 This returns whether @var{frame} is not obscured by any other X
+ − 898 windows. On TTY frames, this is the same as @code{frame-visible-p}.
+ − 899 @end defun
+ − 900
+ − 901 @ignore @c Not in XEmacs.
+ − 902 The visibility status of a frame is also available as a frame
+ − 903 property. You can read or change it as such. @xref{X Frame
+ − 904 Properties}.
+ − 905
+ − 906 The user can iconify and deiconify frames with the window manager. This
+ − 907 happens below the level at which XEmacs can exert any control, but XEmacs
+ − 908 does provide events that you can use to keep track of such changes.
+ − 909 @xref{Misc Events}.
+ − 910 @end ignore
+ − 911
+ − 912 @node Raising and Lowering
+ − 913 @section Raising and Lowering Frames
+ − 914
+ − 915 The X Window System uses a desktop metaphor. Part of this metaphor is
+ − 916 the idea that windows are stacked in a notional third dimension
+ − 917 perpendicular to the screen surface, and thus ordered from ``highest''
+ − 918 to ``lowest''. Where two windows overlap, the one higher up covers the
+ − 919 one underneath. Even a window at the bottom of the stack can be seen if
+ − 920 no other window overlaps it.
+ − 921
+ − 922 @cindex raising a frame
+ − 923 @cindex lowering a frame
+ − 924 A window's place in this ordering is not fixed; in fact, users tend to
+ − 925 change the order frequently. @dfn{Raising} a window means moving it
+ − 926 ``up'', to the top of the stack. @dfn{Lowering} a window means moving
+ − 927 it to the bottom of the stack. This motion is in the notional third
+ − 928 dimension only, and does not change the position of the window on the
+ − 929 screen.
+ − 930
+ − 931 You can raise and lower XEmacs's X windows with these functions:
+ − 932
+ − 933 @deffn Command raise-frame &optional frame
+ − 934 This function raises frame @var{frame}.
+ − 935 @end deffn
+ − 936
+ − 937 @deffn Command lower-frame &optional frame
+ − 938 This function lowers frame @var{frame}.
+ − 939 @end deffn
+ − 940
+ − 941 You can also specify auto-raise (raising automatically when a frame is
+ − 942 selected) or auto-lower (lowering automatically when it is deselected).
+ − 943 Under X, most ICCCM-compliant window managers will have an option to do
+ − 944 this for you, but the following variables are provided in case you're
+ − 945 using a broken WM. (Under FSF Emacs, the same functionality is
+ − 946 provided through the @code{auto-raise} and @code{auto-lower}
+ − 947 frame properties.)
+ − 948
+ − 949 @defvar auto-raise-frame
+ − 950 This variable's value is @code{t} if frames will be raised to the top
+ − 951 when selected.
+ − 952 @end defvar
+ − 953
+ − 954 @ignore Not in XEmacs
+ − 955 @defopt minibuffer-auto-raise
+ − 956 If this is non-@code{nil}, activation of the minibuffer raises the frame
+ − 957 that the minibuffer window is in.
+ − 958 @end defopt
+ − 959 @end ignore
+ − 960
+ − 961 @defvar auto-lower-frame
+ − 962 This variable's value is @code{t} if frames will be lowered to the bottom
+ − 963 when no longer selected.
+ − 964 @end defvar
+ − 965
+ − 966 Auto-raising and auto-lowering is implemented through functions attached
+ − 967 to @code{select-frame-hook} and @code{deselect-frame-hook}
+ − 968 (@pxref{Frame Hooks}). Under normal circumstances, you should not call
+ − 969 these functions directly.
+ − 970
+ − 971 @defun default-select-frame-hook
+ − 972 This hook function implements the @code{auto-raise-frame} variable; it is
+ − 973 for use as the value of @code{select-frame-hook}.
+ − 974 @end defun
+ − 975
+ − 976 @defun default-deselect-frame-hook
+ − 977 This hook function implements the @code{auto-lower-frame} variable; it is
+ − 978 for use as the value of @code{deselect-frame-hook}.
+ − 979 @end defun
+ − 980
+ − 981 @node Frame Configurations
+ − 982 @section Frame Configurations
+ − 983 @cindex frame configuration
+ − 984
+ − 985 A @dfn{frame configuration} records the current arrangement of frames,
+ − 986 all their properties, and the window configuration of each one.
+ − 987
+ − 988 @defun current-frame-configuration
+ − 989 This function returns a frame configuration list that describes
+ − 990 the current arrangement of frames and their contents.
+ − 991 @end defun
+ − 992
444
+ − 993 @defun set-frame-configuration configuration &optional nodelete
+ − 994 This function restores the state of frames described by
+ − 995 @var{configuration}, which should be the return value from a previous
+ − 996 call to @code{current-frame-configuration}.
+ − 997
+ − 998 Each frame listed in @var{configuration} has its position, size, window
+ − 999 configuration, and other properties set as specified in
428
+ − 1000 @var{configuration}.
444
+ − 1001
+ − 1002 Ordinarily, this function deletes all existing frames not listed in
+ − 1003 @var{configuration}. But if optional second argument @var{nodelete} is
+ − 1004 non-@code{nil}, the unwanted frames are iconified instead.
428
+ − 1005 @end defun
+ − 1006
+ − 1007 @node Frame Hooks
+ − 1008 @section Hooks for Customizing Frame Behavior
+ − 1009 @cindex frame hooks
+ − 1010
+ − 1011 XEmacs provides many hooks that are called at various times during a
+ − 1012 frame's lifetime. @xref{Hooks}.
+ − 1013
+ − 1014 @defvar create-frame-hook
+ − 1015 This hook is called each time a frame is created. The functions are called
+ − 1016 with one argument, the newly-created frame.
+ − 1017 @end defvar
+ − 1018
+ − 1019 @defvar delete-frame-hook
+ − 1020 This hook is called each time a frame is deleted. The functions are called
+ − 1021 with one argument, the about-to-be-deleted frame.
+ − 1022 @end defvar
+ − 1023
+ − 1024 @defvar select-frame-hook
+ − 1025 This is a normal hook that is run just after a frame is selected. The
+ − 1026 function @code{default-select-frame-hook}, which implements auto-raising
+ − 1027 (@pxref{Raising and Lowering}), is normally attached to this hook.
+ − 1028
+ − 1029 Note that calling @code{select-frame} does not necessarily set the
+ − 1030 focus: The actual window-system focus will not be changed until the next
+ − 1031 time that XEmacs is waiting for an event, and even then, the window
+ − 1032 manager may refuse the focus-change request.
+ − 1033 @end defvar
+ − 1034
+ − 1035 @defvar deselect-frame-hook
+ − 1036 This is a normal hook that is run just before a frame is deselected
+ − 1037 (and another frame is selected). The function
+ − 1038 @code{default-deselect-frame-hook}, which implements auto-lowering
+ − 1039 (@pxref{Raising and Lowering}), is normally attached to this hook.
+ − 1040 @end defvar
+ − 1041
+ − 1042 @defvar map-frame-hook
+ − 1043 This hook is called each time a frame is mapped (i.e. made visible).
+ − 1044 The functions are called with one argument, the newly mapped frame.
+ − 1045 @end defvar
+ − 1046
+ − 1047 @defvar unmap-frame-hook
+ − 1048 This hook is called each time a frame is unmapped (i.e. made invisible
+ − 1049 or iconified). The functions are called with one argument, the
+ − 1050 newly unmapped frame.
+ − 1051 @end defvar