@cindex text terminal
@cindex graphical terminal
@cindex graphical display
+@cindex top frame
There are two classes of terminals: @dfn{text terminals} and
@dfn{graphical terminals}. Text terminals are non-graphics-capable
-displays, including @command{xterm} and other terminal emulators. On
-a text terminal, each Emacs frame occupies the terminal's entire
-screen; although you can create additional frames and switch between
-them, the terminal only shows one frame at a time. Graphical
-terminals, on the other hand, are managed by graphical display systems
-such as the X Window System, which allow Emacs to show multiple frames
-simultaneously on the same display.
+displays, including @command{xterm} and other terminal emulators. On a
+text terminal, each Emacs frame occupies the terminal's entire screen;
+although you can create additional frames and switch between them, the
+terminal only shows one non-child frame at a time. This frame is
+referred to as the @dfn{top frame} of that terminal and can be retrieved
+with the function @code{tty-top-frame} described below. A top frame may
+have child frames (@pxref{Child Frames}) which will be shown together
+with it but cannot be a child frame itself.
+
+Graphical terminals, on the other hand, are managed by graphical display
+systems such as the X Window System, which allow Emacs to show multiple
+frames simultaneously on the same display.
On GNU and Unix systems, you can create additional frames on any
-available terminal, within a single Emacs session, regardless of
-whether Emacs was started on a text or graphical terminal. Emacs can
-display on both graphical and text terminals simultaneously. This
-comes in handy, for instance, when you connect to the same session
-from several remote locations. @xref{Multiple Terminals}.
+available terminal, within a single Emacs session, regardless of whether
+Emacs was started on a text or graphical terminal. Emacs can display on
+both, graphical and text terminals, simultaneously. This comes in
+handy, for instance, when you connect to the same session from several
+remote locations. @xref{Multiple Terminals}.
@defun framep object
This predicate returns a non-@code{nil} value if @var{object} is a
@end defun
@defun frame-terminal &optional frame
-This function returns the terminal object that displays @var{frame}.
-If @var{frame} is @code{nil} or unspecified, it defaults to the
-selected frame.
+This function returns the terminal object that displays @var{frame}. If
+@var{frame} is @code{nil} or unspecified, it defaults to the selected
+frame (@pxref{Input Focus}).
@end defun
@defun terminal-live-p object
a frame whose window-system window is the child of the window-system
window of another Emacs frame. @xref{Child Frames}.
+On a text terminal you can get its top frame with the following
+function:
+
+@defun tty-top-frame &optional terminal
+This function returns the top frame on @var{terminal}. @var{terminal}
+should be a terminal object, a frame (meaning that frame's terminal), or
+@code{nil} (meaning the selected frame's terminal). If it does not
+refer to a text terminal, the return value is @code{nil}. A top frame
+must be a root frame, which means it cannot be a child frame itself
+(@pxref{Child Frames}), but may have an arbitrary number of child frames
+descending from it.
+@end defun
+
@menu
* Creating Frames:: Creating additional frames.
* Multiple Terminals:: Displaying on several different devices.
position (see below) with respect to its display's origin. For a child
frame (@pxref{Child Frames}) these parameters represent its position
relative to the native position (see below) of its parent frame. For
-frames on text terminals the values of these parameters are meaningless
-and always zero.
+root frames (@pxref{Child Frames}) on text terminals the values of these
+parameters are meaningless and always zero.
@item External Border
@cindex external border
frames (@pxref{Child Frames}) and @code{undecorated} or
@code{override-redirect} frames (@pxref{Management Parameters}).
-Outer borders are never shown on text terminal frames and on frames
-generated by GTK+ routines. On MS-Windows, the outer border is emulated
-with the help of a one pixel wide external border. Non-toolkit builds
-on X allow changing the color of the outer border by setting the
-@code{border-color} frame parameter (@pxref{Layout Parameters}).
+As a rule, outer borders are never shown on text terminal frames and on
+frames generated by GTK+ routines. For a child frame on a text terminal
+you can emulate the outer border by setting the @code{undecorated}
+parameter of that frame to @code{nil} (@pxref{Layout Parameters}). On
+MS-Windows, the outer border is emulated with the help of a one pixel
+wide external border. Non-toolkit builds on X allow changing the color
+of the outer border by setting the @code{border-color} frame parameter
+(@pxref{Layout Parameters}).
@item Title Bar
@cindex title bar
coincide with its top-left corner, the frame may be visible on a
secondary monitor.
-On a text terminal frame both values are zero.
+On a text terminal frame both values are zero for root frames
+(@pxref{Child Frames}).
@end defun
@defun set-frame-position frame x y
@cindex frame parameters
A frame has many parameters that control its appearance and behavior.
-Just what parameters a frame has depends on what display mechanism it
-uses.
-
- Frame parameters exist mostly for the sake of graphical displays.
-Most frame parameters have no effect when applied to a frame on a text
-terminal; only the @code{height}, @code{width}, @code{name},
-@code{title}, @code{menu-bar-lines}, @code{buffer-list} and
-@code{buffer-predicate} parameters do something special. If the
-terminal supports colors, the parameters @code{foreground-color},
-@code{background-color}, @code{background-mode} and
-@code{display-type} are also meaningful. If the terminal supports
-frame transparency, the parameter @code{alpha} is also meaningful.
+Just what parameters are meaningful for a frame depends on what display
+mechanism it uses. Many frame parameters exist mostly for the sake of
+graphical displays and have no effect when applied to the top frame
+(@pxref{Frames}) of a text terminal.
By default, frame parameters are saved and restored by the desktop
library functions (@pxref{Desktop Save Mode}) when the variable
Just what parameters a frame has depends on what display mechanism
it uses. This section describes the parameters that have special
-meanings on some or all kinds of terminals. Of these, @code{name},
-@code{title}, @code{height}, @code{width}, @code{buffer-list} and
-@code{buffer-predicate} provide meaningful information in terminal
-frames, and @code{tty-color-mode} is meaningful only for frames on
-text terminals.
+meanings on some or all kinds of terminals.
@menu
* Basic Parameters:: Parameters that are fundamental.
frame's outer position (@pxref{Frame Geometry}) relative to its
display's origin. For a child frame (@pxref{Child Frames}) they specify
the frame's outer position relative to the native position of the
-frame's parent frame. (Note that none of these parameters is meaningful
-on TTY frames.)
+frame's parent frame. On a text terminal these parameters are
+meaningful for child frames only.
@table @code
@vindex left@r{, a frame parameter}
advisable to use floating-point values when creating decorated frames.
Floating-point values are more suited for ensuring that an (undecorated)
child frame is positioned nicely within the area of its parent frame.
+
+Floating-point values are currently not handled on text terminal frames.
@end table
Some window managers ignore program-specified positions. If you want to
@item icon-left
The screen position of the left edge of the frame's icon, in pixels,
counting from the left edge of the screen. This takes effect when the
-frame is iconified, if the window manager supports this feature. If
-you specify a value for this parameter, then you must also specify a
-value for @code{icon-top} and vice versa.
+frame is iconified, if the window manager supports this feature. If you
+specify a value for this parameter, then you must also specify a value
+for @code{icon-top} and vice versa. This parameter has no meaning on a
+text terminal.
@vindex icon-top@r{, a frame parameter}
@item icon-top
The screen position of the top edge of the frame's icon, in pixels,
counting from the top edge of the screen. This takes effect when the
-frame is iconified, if the window manager supports this feature.
+frame is iconified, if the window manager supports this feature. This
+parameter has no meaning on a text terminal.
@vindex user-position@r{, a frame parameter}
@item user-position
@code{left} and @code{top} parameters, use this parameter to say whether
the specified position was user-specified (explicitly requested in some
way by a human user) or merely program-specified (chosen by a program).
-A non-@code{nil} value says the position was user-specified.
+A non-@code{nil} value says the position was user-specified. This
+parameter has no meaning on a text terminal.
@cindex window positions and window managers
Window managers generally heed user-specified positions, and some heed
@item z-group
This parameter specifies a relative position of the frame's
window-system window in the stacking (Z-) order of the frame's display.
+It has not been implemented yet on text terminals.
If this is @code{above}, the window-system will display the window
that corresponds to the frame above all other window-system windows
Frame parameters usually specify frame sizes in character units. On
graphical displays, the @code{default} face determines the actual pixel
-sizes of these character units (@pxref{Face Attributes}).
+sizes of these character units (@pxref{Face Attributes}). On text
+terminals size parameters affect child frames only.
@table @code
@vindex width@r{, a frame parameter}
This does for the size parameters @code{height} and @code{width} what
the @code{user-position} parameter (@pxref{Position Parameters,
user-position}) does for the position parameters @code{top} and
-@code{left}.
+@code{left}. This parameter has no meaning on a text terminal.
@vindex min-width@r{, a frame parameter}
@item min-width
@vindex fullscreen@r{, a frame parameter}
@item fullscreen
This parameter specifies whether to maximize the frame's width, height
-or both. Its value can be @code{fullwidth}, @code{fullheight},
-@code{fullboth}, or @code{maximized}.@footnote{On PGTK frames, setting
-the values @code{fullheight} and @code{fullwidth} has no effect.} A
+or both. It has no meaning on a text terminal. Its value can be
+@code{fullwidth}, @code{fullheight}, @code{fullboth}, or
+@code{maximized}.@footnote{On PGTK frames, setting the values
+@code{fullheight} and @code{fullwidth} has no effect.} A
@dfn{fullwidth} frame is as wide as possible, a @dfn{fullheight} frame
is as tall as possible, and a @dfn{fullboth} frame is both as wide and
as tall as possible. A @dfn{maximized} frame is like a ``fullboth''
frame, except that it usually keeps its title bar and the buttons for
-resizing and closing the frame. Also, maximized frames typically
-avoid hiding any task bar or panels displayed on the desktop. A
-``fullboth'' frame, on the other hand, usually omits the title bar and
-occupies the entire available screen space.
+resizing and closing the frame. Also, maximized frames typically avoid
+hiding any task bar or panels displayed on the desktop. A ``fullboth''
+frame, on the other hand, usually omits the title bar and occupies the
+entire available screen space.
Full-height and full-width frames are more similar to maximized
frames in this regard. However, these typically display an external
@end example
This will give a new frame full height after typing in it @key{F11} for
-the first time.
+the first time. This parameter has no meaning on a text terminal.
@vindex fit-frame-to-buffer-margins@r{, a frame parameter}
@item fit-frame-to-buffer-margins
@cindex layout parameters of frames
@cindex frame layout parameters
- These frame parameters enable or disable various parts of the
-frame, or control their sizes.
+ These frame parameters enable or disable various parts of the frame,
+or control their sizes. Unless stated otherwise, these parameters have
+no meaning on text terminals.
@table @code
+@vindex undecorated@r{, a frame parameter}
+@item undecorated
+If non-@code{nil}, then on a graphical system this frame's window-system
+window is drawn without decorations, like the title, minimize/maximize
+boxes and external borders. This usually means that the window cannot
+be dragged, resized, iconified, maximized or deleted with the mouse. If
+@code{nil}, the frame's window is usually drawn with all the elements
+listed above unless their display has been suspended via window manager
+settings.
+
+Under X, Emacs uses the Motif window manager hints to turn off
+decorations. Some window managers may not honor these hints.
+
+NS builds consider the tool bar to be a decoration, and therefore hide
+it on an undecorated frame.
+
+On a text terminal, this parameter, if non-@code{nil}, will make a child
+frame show an outer border, which allows to resize that frame via mouse
+dragging (@pxref{Mouse Dragging Parameters}).
+
@vindex border-width@r{, a frame parameter}
@item border-width
The width in pixels of the frame's outer border (@pxref{Frame Geometry}).
@vindex menu-bar-lines@r{, a frame parameter}
@item menu-bar-lines
The number of lines to allocate at the top of the frame for a menu bar
-(@pxref{Menu Bar}). The default is one if Menu Bar mode is enabled
-and zero otherwise. @xref{Menu Bars,,,emacs, The GNU Emacs Manual}.
-For an external menu bar (@pxref{Frame Layout}), this value remains
-unchanged even when the menu bar wraps to two or more lines. In that
-case, the @code{menu-bar-size} value returned by @code{frame-geometry}
-(@pxref{Frame Geometry}) enables you to establish whether the menu bar
-actually occupies one or more lines.
+(@pxref{Menu Bar}). The default is 1 if Menu Bar mode is enabled and 0
+otherwise. @xref{Menu Bars,,,emacs, The GNU Emacs Manual}. For an
+external menu bar (@pxref{Frame Layout}), this value remains unchanged
+even when the menu bar wraps to two or more lines. In that case, the
+@code{menu-bar-size} value returned by @code{frame-geometry}
+(@pxref{Frame Geometry}) can be used to establish whether the menu bar
+actually occupies one or more lines. This parameter affects the
+presence of a menu bar on the root frame (@pxref{Child Frames}) of a
+text terminal too. On a text terminal the value may be only 0 or 1.
@vindex tool-bar-lines@r{, a frame parameter}
@item tool-bar-lines
The number of lines to use for the tab bar (@pxref{Tab Bars,,,emacs, The
GNU Emacs Manual}). The default is one if Tab Bar mode is enabled and
zero otherwise. This value may change whenever the tab bar wraps
-(@pxref{Frame Layout}).
+(@pxref{Frame Layout}). This parameter affects the presence of a tab
+bar on the root frame (@pxref{Child Frames}) of a text terminal too.
@vindex line-spacing@r{, a frame parameter}
@item line-spacing
fitting a frame to its buffer via @code{fit-frame-to-buffer}
(@pxref{Resizing Windows}). This frame parameter has effect only for
GUI frames shown on graphical displays, and only if the fringes are
-disabled. This parameter is intended as a purely-presentation
-feature, and in particular should not be used for frames where the
-user can interactively insert text, or more generally where the cursor
-is shown. A notable example of frames where this is used is tooltip
-frames (@pxref{Tooltips}).
+disabled. This parameter is intended as a purely-presentation feature,
+and in particular should not be used for frames where the user can
+interactively insert text, or more generally where the cursor is shown.
+A notable example of frames where this is used is tooltip frames
+(@pxref{Tooltips}). This parameter affects text terminals as well.
@end table
These parameters supply forms of interactions between different frames.
@table @code
+@vindex visibility@r{, a frame parameter}
+@item visibility
+The state of visibility of the frame. There are three possibilities:
+@code{nil} for invisible, @code{t} for visible, and @code{icon} for
+iconified. @xref{Visibility of Frames}.
+
@vindex parent-frame@r{, a frame parameter}
@item parent-frame
If non-@code{nil}, this means that this frame is a child frame
If non-@code{nil}, this parameter specifies the frame whose windows will
be scrolled whenever the mouse wheel is scrolled with the mouse pointer
hovering over this frame, see @ref{Mouse Commands,,, emacs, The GNU
-Emacs Manual}.
+Emacs Manual}. This parameter has no meaning on a text terminal.
@vindex no-other-frame@r{, a frame parameter}
@item no-other-frame
When this parameter specifies a function, that function will be called
instead of the function specified by the variable
@code{frame-auto-hide-function} when quitting the frame's only window
-(@pxref{Quitting Windows}) and there are other frames left.
+(@pxref{Quitting Windows}) and there are other frames left. This
+parameter has not been yet implemented on text terminals.
@vindex minibuffer-exit@r{, a frame parameter}
@item minibuffer-exit
Alternatively, it can specify the functions @code{iconify-frame} and
@code{delete-frame}. This parameter is useful to make a child frame
disappear automatically (similar to how Emacs deals with a window) when
-exiting the minibuffer.
+exiting the minibuffer. This parameter has not been yet implemented on
+text terminals.
@vindex keep-ratio@r{, a frame parameter}
@item keep-ratio
the @sc{car} of the cell is either @code{t} or @code{height-only}. The
left position ratio is preserved if the @sc{cdr} of the cell is either
@code{t} or @code{left-only}. The top position ratio is preserved if
-the @sc{cdr} of the cell is either @code{t} or @code{top-only}.
+the @sc{cdr} of the cell is either @code{t} or @code{top-only}. This
+parameter has not been yet implemented on text terminals.
@end table
These parameters are mostly useful for child frames (@pxref{Child
Frames}) that come without window manager decorations. If necessary,
-they can be used for undecorated top-level frames as well.
+they can be used for undecorated top-level frames as well. On text
+terminals these parameters affect child frames only.
@table @code
@vindex drag-internal-border@r{, a frame parameter}
@item drag-internal-border
If non-@code{nil}, the frame can be resized by dragging its internal
-borders, if present, with the mouse.
+borders, if present, with the mouse. On text terminals, the decoration
+of a child frame must be dragged instead.
@vindex drag-with-header-line@r{, a frame parameter}
@item drag-with-header-line
effect on text terminals.
@table @code
-@vindex visibility@r{, a frame parameter}
-@item visibility
-The state of visibility of the frame. There are three possibilities:
-@code{nil} for invisible, @code{t} for visible, and @code{icon} for
-iconified. @xref{Visibility of Frames}.
-
@vindex auto-raise@r{, a frame parameter}
@item auto-raise
If non-@code{nil}, Emacs automatically raises the frame when it is
if the user switches to the frame using the key combination
@kbd{Alt-@key{TAB}}.
-@vindex undecorated@r{, a frame parameter}
-@item undecorated
-If non-@code{nil}, this frame's window-system window is drawn without
-decorations, like the title, minimize/maximize boxes and external
-borders. This usually means that the window cannot be dragged, resized,
-iconified, maximized or deleted with the mouse. If @code{nil}, the frame's
-window is usually drawn with all the elements listed above unless their
-display has been suspended via window manager settings.
-
-Under X, Emacs uses the Motif window manager hints to turn off
-decorations. Some window managers may not honor these hints.
-
-NS builds consider the tool bar to be a decoration, and therefore hide
-it on an undecorated frame.
-
@vindex override-redirect@r{, a frame parameter}
@item override-redirect
@cindex override redirect frames
@dfn{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 (@pxref{Frames}) of a terminal cannot be invisible.
+
@cindex mapped frame
@cindex unmapped frame
- 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 @dfn{mapped} when it is displayed for the first time and
-whenever it changes its state of visibility from @code{iconified} or
-@code{invisible} to @code{visible}. Conversely, a frame is and becomes
-@dfn{unmapped} whenever it changes its status from @code{visible} to
-@code{iconified} or @code{invisible}.
-
- Visibility is meaningless on text terminals, since only the selected
-frame is actually displayed in any case.
+ 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 @dfn{mapped} when it is displayed
+for the first time and whenever it changes its state of visibility from
+@code{iconified} or @code{invisible} to @code{visible}. Conversely, a
+frame is and becomes @dfn{unmapped} whenever it changes its status from
+@code{visible} to @code{iconified} or @code{invisible}.
@defun frame-visible-p frame
This function returns the visibility status of frame @var{frame}. The
value is @code{t} if @var{frame} is visible, @code{nil} if it is
invisible, and @code{icon} if it is iconified.
-On a text terminal, all frames are considered visible for the
-purposes of this function, even though only one frame is displayed.
-@xref{Raising and Lowering}.
+Note that the visibility status of a frame as reported by this function
+(and by the @code{visibility} frame parameter, @ref{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
+(@pxref{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.
@end defun
@deffn Command iconify-frame &optional frame
This function iconifies frame @var{frame}. If you omit @var{frame}, it
-iconifies the selected frame. This usually makes all child frames of
-@var{frame} (and their descendants) invisible (@pxref{Child Frames}).
+iconifies the selected frame. This will also remove any child frames
+(@pxref{Child Frames}) of @var{frame} from display. On the top frame of
+a text terminal this function has no effect. visible. If @var{frame} is
+a child frame, the behavior depends on the value of the variable
+@code{iconify-child-frame} (@pxref{Child Frames}).
@end deffn
@deffn Command make-frame-visible &optional frame
you can do that with @code{raise-frame} if you wish (@pxref{Raising and
Lowering}).
-Making a frame visible usually makes all its child frames (and their
-descendants) visible as well (@pxref{Child Frames}).
+Making a frame visible makes all its child frames with visible ancestors
+appear on display again (@pxref{Child Frames}).
@end deffn
@deffn Command make-frame-invisible &optional frame force
(@pxref{Child Frames}).
Unless @var{force} is non-@code{nil}, this function refuses to make
-@var{frame} invisible if all other frames are invisible.
+@var{frame} invisible if all other frames are invisible. On a text
+terminal this will make @var{frame} invisible if and only if it is a
+child frame or at least one other non-child frame (@pxref{Child Frames})
+on that terminal exists. In the former case, if @var{frame} is
+selected, it will select the first visible ancestor of @var{frame}
+instead. In the latter case it will make another non-child frame on
+that terminal visible and the new top frame (@pxref{Frames}) of that
+terminal. In either case, it will remove all child frames with
+@var{frame} as their ancestor from display.
@end deffn
The visibility status of a frame is also available as a frame
-parameter. You can read or change it as such. @xref{Management
+parameter. You can read or change it as such. @xref{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
above all other frames belonging to the same or a lower z-group as
@var{frame}. If @var{frame} is invisible or iconified, this makes it
visible. If @var{frame} is a child frame (@pxref{Child Frames}), this
-raises @var{frame} above all other child frames of its parent.
+raises @var{frame} above all other child frames of its parent. For
+non-child frames on a text terminal this function has no effect.
@end deffn
@deffn Command lower-frame &optional frame
This function lowers frame @var{frame} (default, the selected frame)
below all other frames belonging to the same or a higher z-group as
@var{frame}. If @var{frame} is a child frame (@pxref{Child Frames}),
-this lowers @var{frame} below all other child frames of its parent.
+this lowers @var{frame} below all other child frames of its parent. For
+non-child frames on a text terminal this function has no effect.
@end deffn
@defun frame-restack frame1 frame2 &optional above
display's Z (stacking) order relative to all other frames excluding
@var{frame1} remains unaltered.
-Some window managers may refuse to restack windows.
+Some window managers may refuse to restack windows. This function has
+not been implemented on text terminals yet.
@end defun
Note that the effect of restacking will only hold as long as neither of
@defopt minibuffer-auto-raise
If this is non-@code{nil}, activation of the minibuffer raises the frame
-that the minibuffer window is in.
+that the minibuffer window is in. This function has no effect on text
+terminals.
@end defopt
On window systems, you can also enable auto-raising (on frame
selection) or auto-lowering (on frame deselection) using frame
parameters. @xref{Management Parameters}.
-@cindex top frame
- The concept of raising and lowering frames also applies to text
-terminal frames. On each text terminal, only the top frame is
-displayed at any one time.
-
-@defun tty-top-frame &optional terminal
-This function returns the top frame on @var{terminal}. @var{terminal}
-should be a terminal object, a frame (meaning that frame's terminal),
-or @code{nil} (meaning the selected frame's terminal). If it does not
-refer to a text terminal, the return value is @code{nil}.
-@end defun
-
@node Frame Configurations
@section Frame Configurations
This option tells Emacs how to proceed when it is asked to iconify a
child frame. If it is @code{nil}, @code{iconify-frame} will do nothing
when invoked on a child frame. If it is @code{iconify-top-level}, Emacs
-will try to iconify the top-level frame that is the ancestor of this
-child frame instead. If it is @code{make-invisible}, Emacs will try to
-make this child frame invisible instead of iconifying it.
+will try to iconify the root frame of this child frame instead. If it
+is @code{make-invisible}, Emacs will try to make this child frame
+invisible instead of iconifying it.
Any other value means to try iconifying the child frame. Since such an
attempt may not be honored by all window managers and can even lead to
making the child frame unresponsive to user actions, the default is to
-iconify the top level frame instead.
+iconify the root frame instead.
+
+On a text terminal the only feasible values are @code{nil} and
+@code{make-invisible}.
@end defopt