A frame on a graphical display may be visible, invisible, or iconified. If it is visible, its contents are displayed in the usual manner. If it is iconified, its contents are not displayed, but there is a little icon somewhere to bring the frame back into view (some window managers refer to this state as minimized rather than iconified, but from Emacs’s point of view they are the same thing). If a frame is invisible, it is not displayed at all.
On a text terminal a frame may be only visible or invisible. The top frame (see Frames) of a terminal cannot be invisible.
On graphical displays the concept of visibility is strongly related to
that of (un-)mapped frames. A frame (or, more precisely, its
window-system window) is and becomes mapped when it is displayed
for the first time and whenever it changes its state of visibility from
iconified or invisible to visible. Conversely, a
frame is and becomes unmapped whenever it changes its status from
visible to iconified or invisible.
This function returns the visibility status of frame frame. The
value is t if frame is visible, nil if it is
invisible, and icon if it is iconified.
Note that the visibility status of a frame as reported by this function
(and by the visibility frame parameter, see Frame Interaction Parameters) does not necessarily tell whether the frame is actually
seen on display. Any such frame can be partially or completely obscured
by other window manager windows on the same graphical terminal. Whether
that completely hides the frame may then depend on the transparency of
the obscuring window. A frame may also reside on a virtual desktop
different from the current one and can be seen only when making that
desktop the current one. One notable restriction holds for child frames
(see Child Frames): A child frame can be seen if and only if this
function returns true for all its ancestors including the frame itself
and its root frame.
On a text terminal only that terminal’s top frame and its child frames can be actually seen. Other root frames and their child frames cannot be seen even if they are considered visible by this function.
This function iconifies frame frame. If you omit frame, it
iconifies the selected frame. This function also removes any child
frames (see Child Frames) of frame and their descendants from
display. If frame is a child frame itself, the behavior depends
on the value of the variable iconify-child-frame. If frame
is the top frame of a text terminal (see Frames), this function has
no effect.
This function makes frame frame visible. If you omit frame,
it makes the selected frame visible. This does not raise the frame, but
you can do that with raise-frame if you wish (see Raising, Lowering and Restacking Frames).
Making a frame visible makes all its child frames with visible ancestors appear on display again (see Child Frames).
This function makes frame frame invisible. If you omit frame, it makes the selected frame invisible. Usually, this makes all child frames of frame (and their descendants) invisible too (see Child Frames).
Unless force is non-nil, this function refuses to make
frame invisible if all other frames are invisible. On a text
terminal this will make frame invisible if and only if it is a
child frame (see Child Frames). In this case, if frame is
selected, it will select the first visible ancestor of frame
instead. In addition, it will remove all child frames with frame
as their ancestor from display.
The visibility status of a frame is also available as a frame parameter. You can read or change it as such. See Frame Interaction Parameters. The user can also iconify and deiconify frames with the window manager. This happens below the level at which Emacs can exert any control, but Emacs does provide events that you can use to keep track of such changes. See Miscellaneous System Events.
This function returns non-nil if frame is currently
being rendered with double buffering. frame defaults to the
selected frame.