Describe frame geometry and related functions in Elisp manual
* doc/lispref/display.texi (Size of Displayed Text, Line Height) (Showing Images): Update references. * doc/lispref/elisp.texi (Top): Update node listing. * doc/lispref/frames.texi (Frame Geometry): New node. Move `Size and Position' section here. (Size Parameters): Update references. (Mouse Position): Update references and nomenclature. Describe new functions `x-mouse-absolute-pixel-position' and `x-set-mouse-absolute-pixel-position'. * doc/lispref/windows.texi (Window Sizes): Update references. (Resizing Windows): Update references. Move description of `fit-frame-to-buffer' here. (Coordinates and Windows): Update nomenclature and references. Describe new arguments of `window-edges'. Comment out descriptions of `window-left-column', `window-top-line', `window-pixel-left' and `window-pixel-top'. Describe `window-absolute-pixel-position'.
This commit is contained in:
parent
d13dc271e5
commit
e68d43eb87
4 changed files with 792 additions and 411 deletions
|
@ -1897,9 +1897,9 @@ to or less than the display width of @var{ellipsis}. If
|
|||
|
||||
The following function returns the size in pixels of text as if it were
|
||||
displayed in a given window. This function is used by
|
||||
@code{fit-window-to-buffer} (@pxref{Resizing Windows}) and
|
||||
@code{fit-frame-to-buffer} (@pxref{Size and Position}) to make a window
|
||||
exactly as large as the text it contains.
|
||||
@code{fit-window-to-buffer} and @code{fit-frame-to-buffer}
|
||||
(@pxref{Resizing Windows}) to make a window exactly as large as the text
|
||||
it contains.
|
||||
|
||||
@defun window-text-pixel-size &optional window from to x-limit y-limit mode-and-header-line
|
||||
This function returns the size of the text of @var{window}'s buffer in
|
||||
|
@ -1952,12 +1952,12 @@ height of both, if present, in the return value.
|
|||
contents of the line, plus optional additional vertical line spacing
|
||||
above or below the display line.
|
||||
|
||||
The height of the line contents is the maximum height of any
|
||||
character or image on that display line, including the final newline
|
||||
if there is one. (A display line that is continued doesn't include a
|
||||
final newline.) That is the default line height, if you do nothing to
|
||||
specify a greater height. (In the most common case, this equals the
|
||||
height of the default frame font.)
|
||||
The height of the line contents is the maximum height of any character
|
||||
or image on that display line, including the final newline if there is
|
||||
one. (A display line that is continued doesn't include a final
|
||||
newline.) That is the default line height, if you do nothing to specify
|
||||
a greater height. (In the most common case, this equals the height of
|
||||
the corresponding frame's default font, see @ref{Frame Font}.)
|
||||
|
||||
There are several ways to explicitly specify a larger line height,
|
||||
either by specifying an absolute height for the display line, or by
|
||||
|
@ -5406,12 +5406,11 @@ This removes only images that were put into @var{buffer} the way
|
|||
@cindex size of image
|
||||
This function returns the size of an image as a pair
|
||||
@w{@code{(@var{width} . @var{height})}}. @var{spec} is an image
|
||||
specification. @var{pixels} non-@code{nil} means return sizes
|
||||
measured in pixels, otherwise return sizes measured in canonical
|
||||
character units (fractions of the width/height of the frame's default
|
||||
font). @var{frame} is the frame on which the image will be displayed.
|
||||
@var{frame} null or omitted means use the selected frame (@pxref{Input
|
||||
Focus}).
|
||||
specification. @var{pixels} non-@code{nil} means return sizes measured
|
||||
in pixels, otherwise return sizes measured in the default character size
|
||||
of @var{frame} (@pxref{Frame Font}). @var{frame} is the frame on which
|
||||
the image will be displayed. @var{frame} null or omitted means use the
|
||||
selected frame (@pxref{Input Focus}).
|
||||
@end defun
|
||||
|
||||
@defvar max-image-size
|
||||
|
|
|
@ -1041,6 +1041,7 @@ Frames
|
|||
|
||||
* Creating Frames:: Creating additional frames.
|
||||
* Multiple Terminals:: Displaying on several different devices.
|
||||
* Frame Geometry:: Geometric properties of frames.
|
||||
* Frame Parameters:: Controlling frame size, position, font, etc.
|
||||
* Terminal Parameters:: Parameters common for all frames on terminal.
|
||||
* Frame Titles:: Automatic updating of frame titles.
|
||||
|
@ -1064,12 +1065,18 @@ Frames
|
|||
* Resources:: Getting resource values from the server.
|
||||
* Display Feature Testing:: Determining the features of a terminal.
|
||||
|
||||
Frame Geometry
|
||||
|
||||
* Frame Layout:: Basic layout of frames.
|
||||
* Frame Font:: The default font of a frame and how to set it.
|
||||
* Size and Position:: Changing the size and position of a frame.
|
||||
* Implied Frame Resizing:: Implied resizing of frames and how to prevent it.
|
||||
|
||||
Frame Parameters
|
||||
|
||||
* Parameter Access:: How to change a frame's parameters.
|
||||
* Initial Parameters:: Specifying frame parameters when you make a frame.
|
||||
* Window Frame Parameters:: List of frame parameters for window systems.
|
||||
* Size and Position:: Changing the size and position of a frame.
|
||||
* Geometry:: Parsing geometry specifications.
|
||||
|
||||
Window Frame Parameters
|
||||
|
|
|
@ -80,6 +80,7 @@ for @code{framep} above.
|
|||
@menu
|
||||
* Creating Frames:: Creating additional frames.
|
||||
* Multiple Terminals:: Displaying on several different devices.
|
||||
* Frame Geometry:: Geometric properties of frames.
|
||||
* Frame Parameters:: Controlling frame size, position, font, etc.
|
||||
* Terminal Parameters:: Parameters common for all frames on terminal.
|
||||
* Frame Titles:: Automatic updating of frame titles.
|
||||
|
@ -416,6 +417,545 @@ This function returns the attributes of the physical monitor
|
|||
dominating (see above) @var{frame}, which defaults to the selected frame.
|
||||
@end defun
|
||||
|
||||
|
||||
@node Frame Geometry
|
||||
@section Frame Geometry
|
||||
@cindex frame geometry
|
||||
@cindex frame position
|
||||
@cindex position of frame
|
||||
@cindex frame size
|
||||
@cindex size of frame
|
||||
|
||||
The geometry of a frame depends on the toolkit that was used to build
|
||||
this instance of Emacs and the terminal that displays the frame. This
|
||||
chapter describes these dependencies and some of the functions to deal
|
||||
with them. Note that the @var{frame} argument of all of these functions
|
||||
has to specify a live frame (@pxref{Deleting Frames}). If omitted or
|
||||
@code{nil}, it specifies the selected frame (@pxref{Input Focus}).
|
||||
|
||||
@menu
|
||||
* Frame Layout:: Basic layout of frames.
|
||||
* Frame Font:: The default font of a frame and how to set it.
|
||||
* Size and Position:: Changing the size and position of a frame.
|
||||
* Implied Frame Resizing:: Implied resizing of frames and how to prevent it.
|
||||
@end menu
|
||||
|
||||
|
||||
@node Frame Layout
|
||||
@subsection Frame Layout
|
||||
@cindex frame layout
|
||||
@cindex layout of frame
|
||||
|
||||
The drawing below sketches the layout of a frame on a graphical
|
||||
terminal:
|
||||
@smallexample
|
||||
@group
|
||||
|
||||
<------------ Outer Frame Width ----------->
|
||||
___________________________________________
|
||||
^(0) ___________ External Border __________ |
|
||||
| | |_____________ Title Bar ______________| |
|
||||
| | (1)_____________ Menu Bar ______________| | ^
|
||||
| | (2)_____________ Tool Bar ______________| | ^
|
||||
| | (3) _________ Internal Border ________ | | ^
|
||||
| | | | ^ | | | |
|
||||
| | | | | | | | |
|
||||
Outer | | | Inner | | | Native
|
||||
Frame | | | Frame | | | Frame
|
||||
Height | | | Height | | | Height
|
||||
| | | | | | | | |
|
||||
| | | |<--+--- Inner Frame Width ------->| | | |
|
||||
| | | | | | | | |
|
||||
| | | |___v______________________________| | | |
|
||||
| | |___________ Internal Border __________| | v
|
||||
v |______________ External Border _____________|
|
||||
<-------- Native Frame Width -------->
|
||||
|
||||
@end group
|
||||
@end smallexample
|
||||
|
||||
In practice not all of the areas shown in the drawing will or may be
|
||||
present. The meaning of these areas is:
|
||||
|
||||
@table @samp
|
||||
@item Outer Frame
|
||||
@cindex outer frame
|
||||
@cindex outer edges
|
||||
@cindex outer width
|
||||
@cindex outer height
|
||||
The @dfn{outer frame} is a rectangle comprising all areas shown in the
|
||||
drawing. The edges of that rectangle are called the @dfn{outer edges}
|
||||
of the frame. The @dfn{outer width} and @dfn{outer height} of the frame
|
||||
specify the size of that rectangle.
|
||||
|
||||
@cindex outer position
|
||||
The upper left corner of the outer frame (indicated by ``(0)'' in the
|
||||
drawing above) is the @dfn{outer position} or the frame. It is
|
||||
specified by and settable via the @code{left} and @code{top} frame
|
||||
parameters (@pxref{Position Parameters}) as well as the functions
|
||||
@code{frame-position} and @code{set-frame-position} (@pxref{Size and
|
||||
Position}).
|
||||
|
||||
@item External Border
|
||||
@cindex external border
|
||||
The @dfn{external border} is part of the decorations supplied by the
|
||||
window manager. It's typically used for resizing the frame with the
|
||||
mouse. The external border is normally not shown on ``fullboth'' and
|
||||
maximized frames (@pxref{Size Parameters}) and doesn't exist for text
|
||||
terminal frames.
|
||||
|
||||
The external border should not be confused with the @dfn{outer
|
||||
border} specified by the @code{border-width} frame parameter
|
||||
(@pxref{Layout Parameters}). Since the outer border is usually ignored
|
||||
on most platforms it is not covered here.
|
||||
|
||||
@item Title Bar
|
||||
@cindex title bar
|
||||
The @dfn{title bar} is also part of the window manager's decorations and
|
||||
typically displays the title of the frame (@pxref{Frame Titles}) as well
|
||||
as buttons for minimizing, maximizing and deleting the frame. The title
|
||||
bar is usually not displayed on ``fullboth'' (@pxref{Size Parameters})
|
||||
or tooltip frames. Title bars don't exist for text terminal frames.
|
||||
|
||||
@item Menu Bar
|
||||
@cindex internal menu bar
|
||||
@cindex external menu bar
|
||||
The menu bar (@pxref{Menu Bar}) can be either internal (drawn by Emacs
|
||||
itself) or external (drawn by a toolkit). Most builds (GTK+, Lucid,
|
||||
Motif and Windows) rely on an external menu bar. NS also uses an
|
||||
external menu bar which, however, is not part of the outer frame.
|
||||
Non-toolkit builds can provide an internal menu bar. On text terminal
|
||||
frames, the menu bar is part of the frame's root window (@pxref{Windows
|
||||
and Frames}).
|
||||
|
||||
@item Tool Bar
|
||||
@cindex internal tool bar
|
||||
@cindex external tool bar
|
||||
Like the menu bar, the tool bar (@pxref{Tool Bar}) can be either
|
||||
internal (drawn by Emacs itself) or external (drawn by a toolkit). The
|
||||
GTK+ and NS builds have the tool bar drawn by the toolkit. The
|
||||
remaining builds use internal tool bars. With GTK+ the tool bar can be
|
||||
located on either side of the frame, immediately outside the internal
|
||||
border, see below.
|
||||
|
||||
@item Native Frame
|
||||
@cindex native frame
|
||||
@cindex native edges
|
||||
@cindex native width
|
||||
@cindex native height
|
||||
@cindex display area
|
||||
The @dfn{native frame} is a rectangle located entirely within the outer
|
||||
frame. It excludes the areas occupied by the external border, the title
|
||||
bar and any external menu or external tool bar. The area enclosed by
|
||||
the native frame is sometimes also referred to as the @dfn{display area}
|
||||
of the frame. The edges of the native frame are called the @dfn{native
|
||||
edges} of the frame. The @dfn{native width} and @dfn{native height} of
|
||||
the frame specify the size of the rectangle.
|
||||
|
||||
@cindex native position
|
||||
The top left corner of the native frame specifies the @dfn{native
|
||||
position} of the frame. (1)--(3) in the drawing above indicate that
|
||||
position for the various builds:
|
||||
|
||||
@itemize @w
|
||||
@item (1) non-toolkit and terminal frames
|
||||
|
||||
@item (2) Lucid, Motif and Windows frames
|
||||
|
||||
@item (3) GTK+ and NS frames
|
||||
@end itemize
|
||||
|
||||
Accordingly, the native height of a frame includes the height of the
|
||||
tool bar but not that of the menu bar (Lucid, Motif, Windows) or those
|
||||
of the menu bar and the tool bar (non-toolkit and text terminal frames).
|
||||
|
||||
The native position of a frame is the reference position of functions
|
||||
that set or return the current position of the mouse (@pxref{Mouse
|
||||
Position}) and for functions dealing with the position of windows like
|
||||
@code{window-edges}, @code{window-at} or @code{coordinates-in-window-p}
|
||||
(@pxref{Coordinates and Windows}).
|
||||
|
||||
@item Internal Border
|
||||
The internal border (@pxref{Layout Parameters}) is a border drawn by
|
||||
Emacs around the inner frame (see below).
|
||||
|
||||
@item Inner Frame
|
||||
@cindex inner frame
|
||||
@cindex inner edges
|
||||
@cindex inner width
|
||||
@cindex inner height
|
||||
The @dfn{inner frame} is the rectangle reserved for the frame's windows.
|
||||
It's enclosed by the internal border which, however, is not part of the
|
||||
inner frame. Its edges are called the @dfn{inner edges} of the frame.
|
||||
The @dfn{inner width} and @dfn{inner height} specify the size of the
|
||||
rectangle.
|
||||
|
||||
@cindex non-minibuffer frame
|
||||
@cindex minibuffer-only frame
|
||||
As a rule, the inner frame is subdivided into the frame's root window
|
||||
(@pxref{Windows and Frames}) and the frame's minibuffer window
|
||||
(@pxref{Minibuffer Windows}). There are two notable exceptions to this
|
||||
rule: A @dfn{non-minibuffer frame} contains a root window only and does
|
||||
not contain a minibuffer window. A @dfn{minibuffer-only frame} contains
|
||||
only a minibuffer window which also serves as that frame's root window.
|
||||
See @ref{Initial Parameters} for how to create such frame
|
||||
configurations.
|
||||
|
||||
@item Text Area
|
||||
@cindex text area
|
||||
The @dfn{text area} of a frame is a somewhat fictitious area located
|
||||
entirely within the native frame. It can be obtained by removing from
|
||||
the native frame any internal borders, one vertical and one horizontal
|
||||
scroll bar, and one left and one right fringe as specified for this
|
||||
frame, see @ref{Layout Parameters}.
|
||||
@end table
|
||||
|
||||
@cindex absolute position
|
||||
The @dfn{absolute position} of a frame or its edges is usually given in
|
||||
terms of pixels counted from an origin at position (0, 0) of the frame's
|
||||
display. Note that with multiple monitors the origin does not
|
||||
necessarily coincide with the top left corner of the entire usable
|
||||
display area. Hence the absolute outer position of a frame or the
|
||||
absolute positions of the edges of the outer, native or inner frame can
|
||||
be negative in such an environment even when that frame is completely
|
||||
visible.
|
||||
|
||||
For a frame on a graphical terminal the following function returns the
|
||||
sizes of the areas described above:
|
||||
|
||||
@defun x-frame-geometry &optional frame
|
||||
This function returns geometric attributes of @var{frame}. The return
|
||||
value is an association list of the attributes listed below. All
|
||||
coordinate, height and width values are integers counting pixels.
|
||||
|
||||
@table @code
|
||||
@item outer-position
|
||||
A cons of the absolute X- and Y-coordinates of the outer position of
|
||||
@var{frame}, relative to the origin at position (0, 0) of @var{frame}'s
|
||||
display.
|
||||
|
||||
@item outer-size
|
||||
A cons of the outer width and height of @var{frame}.
|
||||
|
||||
@item external-border-size
|
||||
A cons of the horizontal and vertical width of @var{frame}'s external
|
||||
borders as supplied by the window manager. If the window manager
|
||||
doesn't supply these values, Emacs will try to guess them from the
|
||||
coordinates of the outer and inner frame.
|
||||
|
||||
@item title-bar-size
|
||||
A cons of the width and height of the title bar of @var{frame} as
|
||||
supplied by the window manager or operating system. If both of them are
|
||||
zero, the frame has no title bar. If only the width is zero, Emacs was
|
||||
not able to retrieve the width information.
|
||||
|
||||
@item menu-bar-external
|
||||
If non-@code{nil}, this means the menu bar is external (not part of the
|
||||
native frame of @var{frame}).
|
||||
|
||||
@item menu-bar-size
|
||||
A cons of the width and height of the menu bar of @var{frame}.
|
||||
|
||||
@item tool-bar-external
|
||||
If non-@code{nil}, this means the tool bar is external (not part of the
|
||||
native frame of @var{frame}).
|
||||
|
||||
@item tool-bar-position
|
||||
This tells on which side the tool bar on @var{frame} is and can be one
|
||||
of @code{left}, @code{top}, @code{right} or @code{bottom}. The only
|
||||
toolkit that currently supports a value other than @code{top} is GTK+.
|
||||
|
||||
@item tool-bar-size
|
||||
A cons of the width and height of the tool bar of @var{frame}.
|
||||
|
||||
@item internal-border-width
|
||||
The width of the internal border of @var{frame}.
|
||||
@end table
|
||||
@end defun
|
||||
|
||||
The following function can be used to retrieve the edges of the outer,
|
||||
native and inner frame.
|
||||
|
||||
@defun frame-edges &optional frame type
|
||||
This function returns the edges of the outer, native or inner frame of
|
||||
@var{frame}. @var{frame} must be a live frame and defaults to the
|
||||
selected one. The list returned has the form (@var{left} @var{top}
|
||||
@var{right} @var{bottom}) where all values are in pixels relative to the
|
||||
position (0, 0) of @var{frame}'s display. For terminal frames
|
||||
@var{left} and @var{top} are both zero.
|
||||
|
||||
Optional argument @var{type} specifies the type of the edges to return:
|
||||
@var{type} @code{outer-edges} means to return the outer edges of
|
||||
@var{frame}, @code{native-edges} (or @code{nil}) means to return its
|
||||
native edges and @code{inner-edges} means to return its inner edges.
|
||||
|
||||
Notice that the ``pixels at the positions'' @var{bottom} and @var{right}
|
||||
lie immediately outside the corresponding frame. This means that if you
|
||||
have, for example, two side-by-side frames positioned such that the
|
||||
right outer edge of the frame on the left equals the left outer edge of
|
||||
the frame on the right, the pixels ``representing'' that edge are part
|
||||
of the frame on the right.
|
||||
@end defun
|
||||
|
||||
|
||||
@node Frame Font
|
||||
@subsection Frame Font
|
||||
@cindex default font
|
||||
@cindex default character size
|
||||
@cindex default character width
|
||||
@cindex default width of character
|
||||
@cindex default character height
|
||||
@cindex default height of character
|
||||
Each frame has a @dfn{default font} which specifies the default
|
||||
character size for that frame. This size is meant when retrieving or
|
||||
changing the size of a frame in terms of ``columns'' or ``lines''
|
||||
(@pxref{Size Parameters}). It is also used when resizing (@pxref{Window
|
||||
Sizes}) or splitting (@pxref{Splitting Windows}) windows.
|
||||
|
||||
@cindex line height
|
||||
@cindex column width
|
||||
The term @dfn{line height} is sometimes used instead of ``default
|
||||
character height''. Similarly, the term @dfn{column width} is used as
|
||||
shorthand for ``default character width''.
|
||||
|
||||
@defun frame-char-height &optional frame
|
||||
@defunx frame-char-width &optional frame
|
||||
These functions return the default height and width of a character in
|
||||
@var{frame}, measured in pixels. Together, these values establish the
|
||||
size of the default font on @var{frame}. The values depend on the
|
||||
choice of font for @var{frame}, see @ref{Font and Color Parameters}.
|
||||
@end defun
|
||||
|
||||
The default font can be also set directly with the following function:
|
||||
|
||||
@deffn Command set-frame-font font &optional keep-size frames
|
||||
This sets the default font to @var{font}. When called interactively, it
|
||||
prompts for the name of a font, and uses that font on the selected
|
||||
frame. When called from Lisp, @var{font} should be a font name (a
|
||||
string), a font object, font entity, or a font spec.
|
||||
|
||||
If the optional argument @var{keep-size} is @code{nil}, this keeps the
|
||||
number of frame lines and columns fixed. (If non-@code{nil}, the option
|
||||
@code{frame-inhibit-implied-resize} described in the next section will
|
||||
override this.) If @var{keep-size} is non-@code{nil} (or with a prefix
|
||||
argument), it tries to keep the size of the display area of the current
|
||||
frame fixed by adjusting the number of lines and columns.
|
||||
|
||||
If the optional argument @var{frames} is @code{nil}, this applies the
|
||||
font to the selected frame only. If @var{frames} is non-@code{nil}, it
|
||||
should be a list of frames to act upon, or @code{t} meaning all existing
|
||||
graphical frames.
|
||||
@end deffn
|
||||
|
||||
|
||||
@node Size and Position
|
||||
@subsection Size and Position
|
||||
@cindex frame size
|
||||
@cindex frame position
|
||||
@cindex position of frame
|
||||
|
||||
You can read or change the position of a frame using the frame
|
||||
parameters @code{left} and @code{top} (@pxref{Position Parameters}) and
|
||||
its size using the @code{height} and @code{width} parameters
|
||||
(@pxref{Size Parameters}). Here are some special features for working
|
||||
with sizes and positions. For all of these functions the argument
|
||||
@var{frame} must denote a live frame and defaults to the selected frame.
|
||||
|
||||
@defun frame-position &optional Lisp_Object &optional frame
|
||||
This function returns the outer position (@pxref{Frame Layout}) of
|
||||
@var{frame} in pixels. The value is a cons giving the coordinates of
|
||||
the top left corner of the outer frame of @var{frame} relative to an
|
||||
origin at the position (0, 0) of the frame's display. On a text
|
||||
terminal frame both values are zero.
|
||||
@end defun
|
||||
|
||||
@defun set-frame-position frame X Y
|
||||
This function sets the outer frame position of @var{frame} to @var{X}
|
||||
and @var{Y}. The latter arguments specify pixels and normally count
|
||||
from an origin at the position (0, 0) of @var{frame}'s display.
|
||||
|
||||
A negative parameter value positions the right edge of the outer frame
|
||||
by @var{-x} pixels left from the right edge of the screen or the bottom
|
||||
edge by @var{-y} pixels up from the bottom edge of the screen.
|
||||
|
||||
This function has no effect on text terminal frames.
|
||||
@end defun
|
||||
|
||||
@defun frame-pixel-height &optional frame
|
||||
@defunx frame-pixel-width &optional frame
|
||||
These functions return the inner height and width (the height and
|
||||
width of the display area, see @ref{Frame Layout}) of @var{frame} in
|
||||
pixels. For a text terminal, the results are in characters rather than
|
||||
pixels.
|
||||
@end defun
|
||||
|
||||
@defun frame-text-height &optional frame
|
||||
@defunx frame-text-width &optional frame
|
||||
These functions return the height and width of the text area of
|
||||
@var{frame} (@pxref{Frame Layout}), measured in pixels. For a text
|
||||
terminal, the results are in characters rather than pixels.
|
||||
|
||||
The value returned by @code{frame-text-height} differs from that
|
||||
returned by @code{frame-pixel-height} by not including the heights of
|
||||
any internal tool bar or menu bar, the height of one horizontal scroll
|
||||
bar and the widths of the internal border.
|
||||
|
||||
The value returned by @code{frame-text-width} differs from that returned
|
||||
by @code{frame-pixel-width} by not including the width of one vertical
|
||||
scroll bar, the widths of one left and one right fringe and the widths
|
||||
of the internal border.
|
||||
@end defun
|
||||
|
||||
@defun frame-height &optional frame
|
||||
@defunx frame-width &optional frame
|
||||
These functions return the height and width of the text area of
|
||||
@var{frame}, measured in units of the default font height and width of
|
||||
@var{frame} (@pxref{Frame Font}). These functions are plain shorthands
|
||||
for writing @code{(frame-parameter frame 'height)} and
|
||||
@code{(frame-parameter frame 'width)}.
|
||||
|
||||
If the text area of @var{frame} measured in pixels is not a multiple of
|
||||
its default font size, the values returned by these functions are
|
||||
rounded down to the number of characters of the default font that fully
|
||||
fit into the text area.
|
||||
@end defun
|
||||
|
||||
@defopt frame-resize-pixelwise
|
||||
If this option is @code{nil}, a frame's size is usually rounded to a
|
||||
multiple of the current values of that frame's @code{frame-char-height}
|
||||
and @code{frame-char-width} whenever the frame is resized. If this is
|
||||
non-@code{nil}, no rounding occurs, hence frame sizes can
|
||||
increase/decrease by one pixel.
|
||||
|
||||
Setting this variable usually causes the next resize operation to pass
|
||||
the corresponding size hints to the window manager. This means that
|
||||
this variable should be set only in a user's initial file; applications
|
||||
should never bind it temporarily.
|
||||
|
||||
The precise meaning of a value of @code{nil} for this option depends on
|
||||
the toolkit used. Dragging the external border with the mouse is done
|
||||
character-wise provided the window manager is willing to process the
|
||||
corresponding size hints. Calling @code{set-frame-size} (see below)
|
||||
with arguments that do not specify the frame size as an integer multiple
|
||||
of its character size, however, may: be ignored, cause a rounding
|
||||
(GTK+), or be accepted (Lucid, Motif, MS-Windows).
|
||||
|
||||
With some window managers you may have to set this to non-@code{nil} in
|
||||
order to make a frame appear truly ``maximized'' or ``fullscreen''.
|
||||
@end defopt
|
||||
|
||||
@defun set-frame-size frame width height pixelwise
|
||||
This function sets the size of the text area of @var{frame}, measured in
|
||||
terms of the canonical height and width of a character on @var{frame}
|
||||
(@pxref{Frame Font}).
|
||||
|
||||
The optional argument @var{pixelwise} non-@code{nil} means to measure
|
||||
the new width and height in units of pixels instead. Note that if
|
||||
@code{frame-resize-pixelwise} is @code{nil}, some toolkits may refuse to
|
||||
fully honor the request if it does not increase/decrease the frame size
|
||||
to a multiple of its character size.
|
||||
@end defun
|
||||
|
||||
@defun set-frame-height frame height &optional pretend pixelwise
|
||||
This function resizes the text area of @var{frame} to a height of
|
||||
@var{height} lines. The sizes of existing windows in @var{frame} are
|
||||
altered proportionally to fit.
|
||||
|
||||
If @var{pretend} is non-@code{nil}, then Emacs displays @var{height}
|
||||
lines of output in @var{frame}, but does not change its value for the
|
||||
actual height of the frame. This is only useful on text terminals.
|
||||
Using a smaller height than the terminal actually implements may be
|
||||
useful to reproduce behavior observed on a smaller screen, or if the
|
||||
terminal malfunctions when using its whole screen. Setting the frame
|
||||
height ``for real'' does not always work, because knowing the correct
|
||||
actual size may be necessary for correct cursor positioning on
|
||||
text terminals.
|
||||
|
||||
The optional fourth argument @var{pixelwise} non-@code{nil} means that
|
||||
@var{frame} should be @var{height} pixels high. Note that if
|
||||
@code{frame-resize-pixelwise} is @code{nil}, some toolkits may refuse to
|
||||
fully honor the request if it does not increase/decrease the frame
|
||||
height to a multiple of its character height.
|
||||
@end defun
|
||||
|
||||
@defun set-frame-width frame width &optional pretend pixelwise
|
||||
This function sets the width of the text area of @var{frame}, measured
|
||||
in characters. The argument @var{pretend} has the same meaning as in
|
||||
@code{set-frame-height}.
|
||||
|
||||
The optional fourth argument @var{pixelwise} non-@code{nil} means that
|
||||
@var{frame} should be @var{width} pixels wide. Note that if
|
||||
@code{frame-resize-pixelwise} is @code{nil}, some toolkits may refuse to
|
||||
fully honor the request if it does not increase/decrease the frame width
|
||||
to a multiple of its character width.
|
||||
@end defun
|
||||
|
||||
None of these three functions will make a frame smaller than needed to
|
||||
display all of its windows together with their scroll bars, fringes,
|
||||
margins, dividers, mode and header lines. This contrasts with requests
|
||||
by the window manager triggered, for example, by dragging the external
|
||||
border of a frame with the mouse. Such requests are always honored by
|
||||
clipping, if necessary, portions that cannot be displayed at the right,
|
||||
bottom corner of the frame.
|
||||
|
||||
|
||||
@node Implied Frame Resizing
|
||||
@subsection Implied Frame Resizing
|
||||
@cindex implied frame resizing
|
||||
@cindex implied resizing of frame
|
||||
|
||||
By default, Emacs tries to keep the number of lines and columns of a
|
||||
frame's text area unaltered when, for example, adding or removing the
|
||||
menu bar, changing the default font or setting the width of the frame's
|
||||
scroll bars. This means, however, that in such case Emacs must ask the
|
||||
window manager to resize the outer frame in order to accommodate the
|
||||
size change. Note that wrapping a menu or tool bar usually does not
|
||||
resize the frame's outer size, hence this will alter the number of
|
||||
displayed lines.
|
||||
|
||||
Occasionally, such @dfn{implied frame resizing} may be unwanted, for
|
||||
example, when the frame is maximized or made fullscreen (where it's
|
||||
turned off by default). In other cases you can disable implied resizing
|
||||
with the following option:
|
||||
|
||||
@defopt frame-inhibit-implied-resize
|
||||
If this option is @code{nil}, changing font, menu bar, tool bar,
|
||||
internal borders, fringes or scroll bars of a specific frame may
|
||||
implicitly resize the frame's display area in order to preserve the
|
||||
number of columns or lines the frame displays. If this option is
|
||||
non-@code{nil}, no implied resizing is done.
|
||||
|
||||
The value of this option can be also be a list of frame parameters. In
|
||||
that case, implied resizing is inhibited when changing a parameter that
|
||||
appears in this list. The frame parameters currently handled by this
|
||||
option are: @code{font}, @code{font-backend},
|
||||
@code{internal-border-width}, @code{menu-bar-lines} and
|
||||
@code{tool-bar-lines}.
|
||||
|
||||
Changing any of the @code{scroll-bar-width}, @code{scroll-bar-height},
|
||||
@code{vertical-scroll-bars}, @code{horizontal-scroll-bars},
|
||||
@code{left-fringe} and @code{right-fringe} frame parameters is handled
|
||||
as if the frame contained just one live window. This means, for
|
||||
example, that removing vertical scroll bars on a frame containing
|
||||
several side by side windows will shrink the outer frame width by the
|
||||
width of one scroll bar provided this option is @code{nil} and keep it
|
||||
unchanged if this option is either @code{t} or a list containing
|
||||
@code{vertical-scroll-bars}.
|
||||
|
||||
The default value is @code{'(tool-bar-lines)} for Lucid, Motif and
|
||||
Windows (which means that adding/removing a tool bar there does not
|
||||
change the outer frame height), @code{nil} on all other window systems
|
||||
including GTK+ (which means that changing any of the parameters listed
|
||||
above may change the size of the outer frame), and @code{t} otherwise
|
||||
(which means the outer frame size never changes implicitly when there's
|
||||
no window system support).
|
||||
|
||||
Note that when a frame is not large enough to accommodate a change of
|
||||
any of the parameters listed above, Emacs may try to enlarge the frame
|
||||
even if this option is non-@code{nil}.
|
||||
@end defopt
|
||||
|
||||
|
||||
@node Frame Parameters
|
||||
@section Frame Parameters
|
||||
@cindex frame parameters
|
||||
|
@ -438,7 +978,6 @@ frame transparency, the parameter @code{alpha} is also meaningful.
|
|||
* Parameter Access:: How to change a frame's parameters.
|
||||
* Initial Parameters:: Specifying frame parameters when you make a frame.
|
||||
* Window Frame Parameters:: List of frame parameters for window systems.
|
||||
* Size and Position:: Changing the size and position of a frame.
|
||||
* Geometry:: Parsing geometry specifications.
|
||||
@end menu
|
||||
|
||||
|
@ -723,12 +1262,12 @@ pixel sizes of these character units (@pxref{Face Attributes}).
|
|||
@table @code
|
||||
@vindex height, a frame parameter
|
||||
@item height
|
||||
The height of the frame's text area (@pxref{Size and Position}), in
|
||||
The height of the frame's text area (@pxref{Frame Geometry}), in
|
||||
characters.
|
||||
|
||||
@vindex width, a frame parameter
|
||||
@item width
|
||||
The width of the frame's text area (@pxref{Size and Position}), in
|
||||
The width of the frame's text area (@pxref{Frame Geometry}), in
|
||||
characters.
|
||||
|
||||
@vindex user-size, a frame parameter
|
||||
|
@ -1183,309 +1722,6 @@ equivalent to the @code{:background} attribute of the
|
|||
@end table
|
||||
|
||||
|
||||
@node Size and Position
|
||||
@subsection Frame Size and Position
|
||||
@cindex size of frame
|
||||
@cindex screen size
|
||||
@cindex frame size
|
||||
@cindex resize frame
|
||||
|
||||
You can read or change the size and position of a frame using the frame
|
||||
parameters @code{left}, @code{top}, @code{height}, and @code{width}.
|
||||
Whatever geometry parameters you don't specify are chosen by the window
|
||||
manager in its usual fashion.
|
||||
|
||||
Here are some special features for working with sizes and positions.
|
||||
Most of the functions described below use a @var{frame} argument which
|
||||
has to specify a live frame. If omitted or @code{nil}, it specifies the
|
||||
selected frame, see @ref{Input Focus}.
|
||||
|
||||
@defun set-frame-position frame left top
|
||||
This function sets the position of the top left corner of @var{frame} to
|
||||
@var{left} and @var{top}. These arguments are measured in pixels, and
|
||||
normally count from the top left corner of the screen to the top left
|
||||
corner of the rectangle allotted to the frame by the window manager.
|
||||
|
||||
Negative parameter values position the bottom edge of that rectangle up
|
||||
from the bottom edge of the screen, or the right rectangle edge to the
|
||||
left of the right edge of the screen. It would probably be better if
|
||||
the values were always counted from the left and top, so that negative
|
||||
arguments would position the frame partly off the top or left edge of
|
||||
the screen, but it seems inadvisable to change that now.
|
||||
@end defun
|
||||
|
||||
@cindex frame default font
|
||||
@cindex default font of a frame
|
||||
Each frame has a @dfn{default font} which specifies the canonical height
|
||||
and width of a character on that frame. The default font is used when
|
||||
retrieving or changing the size of a frame in terms of columns or lines.
|
||||
It is also used when resizing (@pxref{Window Sizes}) or splitting
|
||||
(@pxref{Splitting Windows}) windows.
|
||||
|
||||
@defun frame-char-height &optional frame
|
||||
@defunx frame-char-width &optional frame
|
||||
These functions return the canonical height and width of a character in
|
||||
@var{frame}, measured in pixels. Together, these values establish the
|
||||
size of the default font on @var{frame}. The values depend on the
|
||||
choice of font for @var{frame}, see @ref{Font and Color Parameters}.
|
||||
@end defun
|
||||
|
||||
The default font can be also set directly with the following function:
|
||||
|
||||
@deffn Command set-frame-font font &optional keep-size frames
|
||||
This sets the default font to @var{font}. When called interactively, it
|
||||
prompts for the name of a font, and uses that font on the selected
|
||||
frame. When called from Lisp, @var{font} should be a font name (a
|
||||
string), a font object, font entity, or a font spec.
|
||||
|
||||
If the optional argument @var{keep-size} is @code{nil}, this keeps the
|
||||
number of frame lines and columns fixed. (If non-@code{nil}, the option
|
||||
@code{frame-inhibit-implied-resize} described below will override this.)
|
||||
If @var{keep-size} is non-@code{nil} (or with a prefix argument), it
|
||||
tries to keep the size of the display area of the current frame fixed by
|
||||
adjusting the number of lines and columns.
|
||||
|
||||
If the optional argument @var{frames} is @code{nil}, this applies the
|
||||
font to the selected frame only. If @var{frames} is non-@code{nil}, it
|
||||
should be a list of frames to act upon, or @code{t} meaning all existing
|
||||
graphical frames.
|
||||
@end deffn
|
||||
|
||||
@cindex frame display area
|
||||
@cindex display area of a frame
|
||||
The @dfn{display area} of a frame is a rectangular area within the area
|
||||
allotted to the frame by the window manager. The display area neither
|
||||
includes the title bar (@pxref{Frame Titles}) nor any other decorations
|
||||
provided by the window manager (like an external border used for
|
||||
resizing frames via mouse dragging).
|
||||
|
||||
The actual height of the display area depends on the window-system
|
||||
and toolkit in use. With GTK+, the display area does not include any
|
||||
tool bar or menu bar. With the Motif or Lucid toolkits and with
|
||||
Windows, the display area includes the tool bar but not the menu bar.
|
||||
In a graphical version with no toolkit, it includes both the tool bar
|
||||
and menu bar. On a text terminal, the display area includes the menu
|
||||
bar.
|
||||
|
||||
@defun frame-pixel-height &optional frame
|
||||
@defunx frame-pixel-width &optional frame
|
||||
These functions return the height and width of the display area of
|
||||
@var{frame}, measured in pixels. For a text terminal, the results are
|
||||
in characters rather than pixels.
|
||||
@end defun
|
||||
|
||||
@cindex frame text area
|
||||
@cindex text area of a frame
|
||||
The @dfn{text area} of a frame is a concept implicitly used by all
|
||||
functions that change a frame's height or width. It is a rectangle
|
||||
located within the display area. Its size is obtained from that of the
|
||||
display area by subtracting the sizes of any tool or menu bars that are
|
||||
part of the display area, any internal borders, one vertical and one
|
||||
horizontal scroll bar, and one left and one right fringe as specified
|
||||
for this frame, see @ref{Layout Parameters}.
|
||||
|
||||
@defun frame-text-height &optional frame
|
||||
@defunx frame-text-width &optional frame
|
||||
These functions return the height and width of the text area of
|
||||
@var{frame}, measured in pixels. For a text terminal, the results are
|
||||
in characters rather than pixels.
|
||||
|
||||
The value returned by @code{frame-text-height} differs from that
|
||||
returned by @code{frame-pixel-height} by not including the heights of
|
||||
any tool bar or menu bar, the height of one horizontal scroll bar and
|
||||
the widths of the internal border.
|
||||
|
||||
The value returned by @code{frame-text-width} differs from that returned
|
||||
by @code{frame-pixel-width} by not including the width of one vertical
|
||||
scroll bar, the widths of one left and one right fringe and the widths
|
||||
of the internal border.
|
||||
@end defun
|
||||
|
||||
@defun frame-height &optional frame
|
||||
@defunx frame-width &optional frame
|
||||
These functions return the height and width of the text area of
|
||||
@var{frame}, measured in units of the default font height and width of
|
||||
@var{frame}. These functions are plain shorthands for writing
|
||||
@code{(frame-parameter frame 'height)} and @code{(frame-parameter frame
|
||||
'width)}.
|
||||
|
||||
If the text area of @var{frame} measured in pixles is not a multiple of
|
||||
its default font size, the values returned by this functions are rounded
|
||||
down to the number of characters of the default font that fully fit into
|
||||
the text area.
|
||||
@end defun
|
||||
|
||||
@defopt frame-resize-pixelwise
|
||||
If this option is @code{nil}, a frame's size is usually rounded to a
|
||||
multiple of the current values of that frame's @code{frame-char-height}
|
||||
and @code{frame-char-width}. If this is non-@code{nil}, no rounding
|
||||
occurs, hence frame sizes can increase/decrease by one pixel.
|
||||
|
||||
Setting this causes the next resize operation to pass the corresponding
|
||||
size hints to the window manager. This means that this variable should
|
||||
be set only in a user's initial file; applications should never bind it
|
||||
temporarily.
|
||||
|
||||
The precise meaning of a value of @code{nil} for this option depends
|
||||
on the toolkit used. Dragging the frame border with the mouse is usually
|
||||
done character-wise. Calling @code{set-frame-size} (see below)
|
||||
with arguments that do not specify the frame size as an integer multiple
|
||||
of its character size, however, may: be ignored, cause a
|
||||
rounding (GTK+), or be accepted (Lucid, Motif, MS-Windows).
|
||||
|
||||
With some window managers you may have to set this to non-@code{nil} in
|
||||
order to make a frame appear truly ``maximized'' or ``fullscreen''.
|
||||
@end defopt
|
||||
|
||||
@defun set-frame-size frame width height pixelwise
|
||||
This function sets the size of the text area of @var{frame}, measured in
|
||||
characters; @var{width} and @var{height} specify the new width in
|
||||
columns and the new height in lines.
|
||||
|
||||
The optional argument @var{pixelwise} non-@code{nil} means to measure
|
||||
the new width and height in units of pixels instead. Note that if
|
||||
@code{frame-resize-pixelwise} is @code{nil}, some toolkits may refuse to
|
||||
fully honor the request if it does not increase/decrease the frame size
|
||||
to a multiple of its character size.
|
||||
@end defun
|
||||
|
||||
@defun set-frame-height frame height &optional pretend pixelwise
|
||||
This function resizes the text area of @var{frame} to a height of
|
||||
@var{height} lines. The sizes of existing windows in @var{frame} are
|
||||
altered proportionally to fit.
|
||||
|
||||
If @var{pretend} is non-@code{nil}, then Emacs displays @var{height}
|
||||
lines of output in @var{frame}, but does not change its value for the
|
||||
actual height of the frame. This is only useful on text terminals.
|
||||
Using a smaller height than the terminal actually implements may be
|
||||
useful to reproduce behavior observed on a smaller screen, or if the
|
||||
terminal malfunctions when using its whole screen. Setting the frame
|
||||
height ``for real'' does not always work, because knowing the correct
|
||||
actual size may be necessary for correct cursor positioning on
|
||||
text terminals.
|
||||
|
||||
The optional fourth argument @var{pixelwise} non-@code{nil} means that
|
||||
@var{frame} should be @var{height} pixels high. Note that if
|
||||
@code{frame-resize-pixelwise} is @code{nil}, some toolkits may refuse to
|
||||
fully honor the request if it does not increase/decrease the frame
|
||||
height to a multiple of its character height.
|
||||
@end defun
|
||||
|
||||
@defun set-frame-width frame width &optional pretend pixelwise
|
||||
This function sets the width of the text area of @var{frame}, measured
|
||||
in characters. The argument @var{pretend} has the same meaning as in
|
||||
@code{set-frame-height}.
|
||||
|
||||
The optional fourth argument @var{pixelwise} non-@code{nil} means that
|
||||
@var{frame} should be @var{width} pixels wide. Note that if
|
||||
@code{frame-resize-pixelwise} is @code{nil}, some toolkits may refuse to
|
||||
fully honor the request if it does not increase/decrease the frame width
|
||||
to a multiple of its character width.
|
||||
@end defun
|
||||
|
||||
None of these three functions will make a frame smaller than needed to
|
||||
display all of its windows together with their scroll bars, fringes,
|
||||
margins, dividers, mode and header lines. This contrasts with requests
|
||||
by the window manager triggered, for example, by dragging the external
|
||||
border of a frame with the mouse. Such requests are always honored by
|
||||
clipping, if necessary, portions that cannot be displayed at the right,
|
||||
bottom corner of the frame.
|
||||
|
||||
By default, Emacs tries to keep the number of lines and columns of a
|
||||
frame's text area unaltered when, for example, adding or removing a menu
|
||||
bar, changing the default font or setting the width of the frame's
|
||||
scroll bars. This means, however, that in such case Emacs must ask the
|
||||
window manager to resize the display area of the frame in order to
|
||||
accommodate the size change. Note that wrapping a menu or tool bar
|
||||
usually does not resize the frame's display area, hence this will alter
|
||||
the number of displayed lines.
|
||||
|
||||
Occasionally, such implied resizing of the display area may be
|
||||
unwanted, for example, when the frame is maximized or made fullscreen
|
||||
where it's turned off by default. In other cases you can disable
|
||||
implied resizing with the following option:
|
||||
|
||||
@defopt frame-inhibit-implied-resize
|
||||
If this option is @code{nil}, changing font, menu bar, tool bar,
|
||||
internal borders, fringes or scroll bars of a specific frame may
|
||||
implicitly resize the frame's display area in order to preserve the
|
||||
number of columns or lines the frame displays. If this option is
|
||||
non-@code{nil}, no implied resizing is done.
|
||||
|
||||
The value of this option can be also be a list of frame parameters. In
|
||||
that case, implied resizing is inhibited when changing a parameter that
|
||||
appears in this list. The frame parameters currently handled by this
|
||||
option are: @code{font}, @code{font-backend},
|
||||
@code{internal-border-width}, @code{menu-bar-lines} and
|
||||
@code{tool-bar-lines}.
|
||||
|
||||
Changing any of the @code{scroll-bar-width}, @code{scroll-bar-height},
|
||||
@code{vertical-scroll-bars}, @code{horizontal-scroll-bars},
|
||||
@code{left-fringe} and @code{right-fringe} frame parameters is handled
|
||||
as if the frame contained just one live window. This means, for
|
||||
example, that removing vertical scroll bars on a frame containing
|
||||
several side by side windows will shrink the frame width by the width of
|
||||
one scroll bar provided this option is @code{nil} and keep it unchanged
|
||||
if this option is either @code{t} or a list containing
|
||||
@code{vertical-scroll-bars}.
|
||||
|
||||
The default value is @code{'(tool-bar-lines)} for Lucid, Motif and
|
||||
Windows (which means that adding/removing a tool bar there does not
|
||||
change the frame height), @code{nil} on all other window systems
|
||||
including GTK+ (which means that changing any of the parameters listed
|
||||
above may change the size of the frame), and @code{t} otherwise (which
|
||||
means the frame size never changes implicitly when there's no window
|
||||
system support).
|
||||
|
||||
Note that when a frame is not large enough to accommodate a change of
|
||||
any of the parameters listed above, Emacs may try to enlarge the frame
|
||||
even if this option is non-@code{nil}.
|
||||
@end defopt
|
||||
|
||||
@c FIXME? Belongs more in Emacs manual than here?
|
||||
@c But, e.g., fit-window-to-buffer is in this manual.
|
||||
If you have a frame that displays only one window, you can fit that
|
||||
frame to its buffer using the command @code{fit-frame-to-buffer}.
|
||||
|
||||
@deffn Command fit-frame-to-buffer &optional frame max-height min-height max-width min-width only
|
||||
This command adjusts the size of @var{frame} to display the contents of
|
||||
its buffer exactly. @var{frame} can be any live frame and defaults to
|
||||
the selected one. Fitting is done only if @var{frame}'s root window is
|
||||
live. The arguments @var{max-height}, @var{min-height}, @var{max-width}
|
||||
and @var{min-width} specify bounds on the new total size of
|
||||
@var{frame}'s root window. @var{min-height} and @var{min-width} default
|
||||
to the values of @code{window-min-height} and @code{window-min-width}
|
||||
respectively.
|
||||
|
||||
If the optional argument @var{only} is @code{vertically}, this function
|
||||
may resize the frame vertically only. If @var{only} is
|
||||
@code{horizontally}, it may resize the frame horizontally only.
|
||||
@end deffn
|
||||
|
||||
The behavior of @code{fit-frame-to-buffer} can be controlled with the
|
||||
help of the two options listed next.
|
||||
|
||||
@defopt fit-frame-to-buffer-margins
|
||||
This option can be used to specify margins around frames to be fit by
|
||||
@code{fit-frame-to-buffer}. Such margins can be useful to avoid, for
|
||||
example, that such frames overlap the taskbar.
|
||||
|
||||
It specifies the numbers of pixels to be left free on the left, above,
|
||||
the right, and below a frame that shall be fit. The default specifies
|
||||
@code{nil} for each which means to use no margins. The value specified
|
||||
here can be overridden for a specific frame by that frame's
|
||||
@code{fit-frame-to-buffer-margins} parameter, if present.
|
||||
@end defopt
|
||||
|
||||
@defopt fit-frame-to-buffer-sizes
|
||||
This option specifies size boundaries for @code{fit-frame-to-buffer}.
|
||||
It specifies the total maximum and minimum lines and maximum and minimum
|
||||
columns of the root window of any frame that shall be fit to its buffer.
|
||||
If any of these values is non-@code{nil}, it overrides the corresponding
|
||||
argument of @code{fit-frame-to-buffer}.
|
||||
@end defopt
|
||||
|
||||
|
||||
@node Geometry
|
||||
@subsection Geometry
|
||||
|
||||
|
@ -2088,8 +2324,10 @@ give access to the current position of the mouse.
|
|||
@defun mouse-position
|
||||
This function returns a description of the position of the mouse. The
|
||||
value looks like @code{(@var{frame} @var{x} . @var{y})}, where @var{x}
|
||||
and @var{y} are integers giving the position in characters relative to
|
||||
the top left corner of the inside of @var{frame}.
|
||||
and @var{y} are integers giving the (possibly rounded) position in
|
||||
multiples of the default character size of @var{frame} (@pxref{Frame
|
||||
Font}) relative to the native position of @var{frame} (@pxref{Frame
|
||||
Geometry}).
|
||||
@end defun
|
||||
|
||||
@defvar mouse-position-function
|
||||
|
@ -2105,9 +2343,13 @@ This abnormal hook exists for the benefit of packages like
|
|||
@defun set-mouse-position frame x y
|
||||
This function @dfn{warps the mouse} to position @var{x}, @var{y} in
|
||||
frame @var{frame}. The arguments @var{x} and @var{y} are integers,
|
||||
giving the position in characters relative to the top left corner of the
|
||||
inside of @var{frame}. If @var{frame} is not visible, this function
|
||||
does nothing. The return value is not significant.
|
||||
giving the position in multiples of the default character size of
|
||||
@var{frame} (@pxref{Frame Font}) relative to the native position of
|
||||
@var{frame} (@pxref{Frame Geometry}).
|
||||
|
||||
The resulting mouse position is constrained to the native frame of
|
||||
@var{frame}. If @var{frame} is not visible, this function does nothing.
|
||||
The return value is not significant.
|
||||
@end defun
|
||||
|
||||
@defun mouse-pixel-position
|
||||
|
@ -2118,12 +2360,31 @@ coordinates in units of pixels rather than units of characters.
|
|||
@defun set-mouse-pixel-position frame x y
|
||||
This function warps the mouse like @code{set-mouse-position} except that
|
||||
@var{x} and @var{y} are in units of pixels rather than units of
|
||||
characters. These coordinates are not required to be within the frame.
|
||||
characters.
|
||||
|
||||
If @var{frame} is not visible, this function does nothing. The return
|
||||
value is not significant.
|
||||
The resulting mouse position is not constrained to the native frame of
|
||||
@var{frame}. If @var{frame} is not visible, this function does nothing.
|
||||
The return value is not significant.
|
||||
@end defun
|
||||
|
||||
On a graphical terminal the following two functions allow to retrieve
|
||||
and set the absolute position of the mouse cursor.
|
||||
|
||||
@defun x-mouse-absolute-pixel-position
|
||||
This function returns a cons cell (@var{x} . @var{y}) of the coordinates
|
||||
of the mouse cursor position in pixels, relative to a position (0, 0) of
|
||||
the selected frame's display.
|
||||
@end defun
|
||||
|
||||
@defun x-set-mouse-absolute-pixel-position x y
|
||||
This function moves the mouse cursor to the position (@var{x}, @var{y}).
|
||||
The coordinates @var{x} and @var{y} are interpreted in pixels relative
|
||||
to a position (0, 0) of the selected frame's display.
|
||||
@end defun
|
||||
|
||||
The following function can tell whether the mouse cursor is currently
|
||||
visible on a frame:
|
||||
|
||||
@defun frame-pointer-visible-p &optional frame
|
||||
This predicate function returns non-@code{nil} if the mouse pointer
|
||||
displayed on @var{frame} is visible; otherwise it returns @code{nil}.
|
||||
|
|
|
@ -432,8 +432,8 @@ specified either in units of pixels or in units of lines and columns.
|
|||
On a graphical display, the latter actually correspond to the height and
|
||||
width of a ``default'' character specified by the frame's default font
|
||||
as returned by @code{frame-char-height} and @code{frame-char-width}
|
||||
(@pxref{Size and Position}). Thus, if a window is displaying text with
|
||||
a different font or size, the reported line height and column width for
|
||||
(@pxref{Frame Font}). Thus, if a window is displaying text with a
|
||||
different font or size, the reported line height and column width for
|
||||
that window may differ from the actual number of text lines or columns
|
||||
displayed within it.
|
||||
|
||||
|
@ -791,8 +791,8 @@ If the value of this option is non-@code{nil}, Emacs resizes windows in
|
|||
units of pixels. This currently affects functions like
|
||||
@code{split-window} (@pxref{Splitting Windows}), @code{maximize-window},
|
||||
@code{minimize-window}, @code{fit-window-to-buffer},
|
||||
@code{shrink-window-if-larger-than-buffer} (all listed below) and
|
||||
@code{fit-frame-to-buffer} (@pxref{Size and Position}).
|
||||
@code{fit-frame-to-buffer} and
|
||||
@code{shrink-window-if-larger-than-buffer} (all listed below).
|
||||
|
||||
Note that when a frame's pixel size is not a multiple of its character
|
||||
size, at least one window may get resized pixelwise even if this
|
||||
|
@ -836,8 +836,7 @@ resize operations (@pxref{Preserving Window Sizes}).
|
|||
|
||||
If the option @code{fit-frame-to-buffer} (see below) is non-@code{nil},
|
||||
this function will try to resize the frame of @var{window} to fit its
|
||||
contents by calling @code{fit-frame-to-buffer} (@pxref{Size and
|
||||
Position}).
|
||||
contents by calling @code{fit-frame-to-buffer} (see below).
|
||||
@end deffn
|
||||
|
||||
@defopt fit-window-to-buffer-horizontally
|
||||
|
@ -858,6 +857,47 @@ live window and this option is non-@code{nil}. If this is
|
|||
non-@code{nil} value means frames can be resized in both dimensions.
|
||||
@end defopt
|
||||
|
||||
If you have a frame that displays only one window, you can fit that
|
||||
frame to its buffer using the command @code{fit-frame-to-buffer}.
|
||||
|
||||
@deffn Command fit-frame-to-buffer &optional frame max-height min-height max-width min-width only
|
||||
This command adjusts the size of @var{frame} to display the contents of
|
||||
its buffer exactly. @var{frame} can be any live frame and defaults to
|
||||
the selected one. Fitting is done only if @var{frame}'s root window is
|
||||
live. The arguments @var{max-height}, @var{min-height}, @var{max-width}
|
||||
and @var{min-width} specify bounds on the new total size of
|
||||
@var{frame}'s root window. @var{min-height} and @var{min-width} default
|
||||
to the values of @code{window-min-height} and @code{window-min-width}
|
||||
respectively.
|
||||
|
||||
If the optional argument @var{only} is @code{vertically}, this function
|
||||
may resize the frame vertically only. If @var{only} is
|
||||
@code{horizontally}, it may resize the frame horizontally only.
|
||||
@end deffn
|
||||
|
||||
The behavior of @code{fit-frame-to-buffer} can be controlled with the
|
||||
help of the two options listed next.
|
||||
|
||||
@defopt fit-frame-to-buffer-margins
|
||||
This option can be used to specify margins around frames to be fit by
|
||||
@code{fit-frame-to-buffer}. Such margins can be useful to avoid, for
|
||||
example, that such frames overlap the taskbar.
|
||||
|
||||
It specifies the numbers of pixels to be left free on the left, above,
|
||||
the right, and below a frame that shall be fit. The default specifies
|
||||
@code{nil} for each which means to use no margins. The value specified
|
||||
here can be overridden for a specific frame by that frame's
|
||||
@code{fit-frame-to-buffer-margins} parameter, if present.
|
||||
@end defopt
|
||||
|
||||
@defopt fit-frame-to-buffer-sizes
|
||||
This option specifies size boundaries for @code{fit-frame-to-buffer}.
|
||||
It specifies the total maximum and minimum lines and maximum and minimum
|
||||
columns of the root window of any frame that shall be fit to its buffer.
|
||||
If any of these values is non-@code{nil}, it overrides the corresponding
|
||||
argument of @code{fit-frame-to-buffer}.
|
||||
@end defopt
|
||||
|
||||
@deffn Command shrink-window-if-larger-than-buffer &optional window
|
||||
This command attempts to reduce @var{window}'s height as much as
|
||||
possible while still showing its full buffer, but no less than
|
||||
|
@ -3622,33 +3662,28 @@ is off the screen due to horizontal scrolling:
|
|||
@end group
|
||||
@end example
|
||||
|
||||
|
||||
@node Coordinates and Windows
|
||||
@section Coordinates and Windows
|
||||
@cindex frame-relative coordinate
|
||||
@cindex coordinate, relative to frame
|
||||
@cindex window position
|
||||
|
||||
This section describes functions that report the position of a
|
||||
window. Most of these functions report positions relative to the
|
||||
window's frame. In this case, the coordinate origin @samp{(0,0)} lies
|
||||
near the upper left corner of the frame. For technical reasons, on
|
||||
graphical displays the origin is not located at the exact corner of
|
||||
the graphical window as it appears on the screen. If Emacs is built
|
||||
with the GTK+ toolkit, the origin is at the upper left corner of the
|
||||
frame area used for displaying Emacs windows, below the title-bar,
|
||||
GTK+ menu bar, and tool bar (since these are drawn by the window
|
||||
manager and/or GTK+, not by Emacs). But if Emacs is not built with
|
||||
GTK+, the origin is at the upper left corner of the tool bar (since in
|
||||
this case Emacs itself draws the tool bar). In both cases, the X and
|
||||
Y coordinates increase rightward and downward respectively.
|
||||
This section describes functions that report the position of a window.
|
||||
Most of these functions report positions relative to an origin at the
|
||||
native position of the window's frame (@pxref{Frame Geometry}). Some
|
||||
functions report positions relative to the origin of the display of the
|
||||
window's frame. In any case, the origin has the coordinates (0, 0) and
|
||||
X and Y coordinates increase ``rightward'' and ``downward''
|
||||
respectively.
|
||||
|
||||
Except where noted, X and Y coordinates are reported in integer
|
||||
character units, i.e., numbers of lines and columns respectively. On a
|
||||
graphical display, each ``line'' and ``column'' corresponds to the
|
||||
height and width of a default character specified by the frame's
|
||||
default font.
|
||||
For the following functions, X and Y coordinates are reported in
|
||||
integer character units, i.e., numbers of lines and columns
|
||||
respectively. On a graphical display, each ``line'' and ``column''
|
||||
corresponds to the height and width of a default character specified by
|
||||
the frame's default font (@pxref{Frame Font}).
|
||||
|
||||
@defun window-edges &optional window
|
||||
@defun window-edges &optional window body absolute pixelwise
|
||||
This function returns a list of the edge coordinates of @var{window}.
|
||||
If @var{window} is omitted or @code{nil}, it defaults to the selected
|
||||
window.
|
||||
|
@ -3665,44 +3700,73 @@ header line, mode line, scroll bar, fringes, window divider and display
|
|||
margins. On a text terminal, if the window has a neighbor on its right,
|
||||
its right edge includes the separator line between the window and its
|
||||
neighbor.
|
||||
|
||||
If the optional argument @var{body} is @code{nil}, this means to
|
||||
return the edges corresponding to the total size of @var{window}.
|
||||
@var{body} non-@code{nil} means to return the edges of @var{window}'s
|
||||
body (aka text area). If @var{body} is non-@code{nil}, @var{window}
|
||||
must specify a live window.
|
||||
|
||||
If the optional argument @var{absolute} is @code{nil}, this means to
|
||||
return edges relative to the native position of @var{window}'s frame.
|
||||
@var{absolute} non-@code{nil} means to return coordinates relative to
|
||||
the origin (0, 0) of @var{window}'s display. On non-graphical systems
|
||||
this argument has no effect.
|
||||
|
||||
If the optional argument @var{pixelwise} is @code{nil}, this means to
|
||||
return the coordinates in terms of the default character width and
|
||||
height of @var{window}'s frame (@pxref{Frame Font}), rounded if
|
||||
necessary. @var{pixelwise} non-@code{nil} means to return the
|
||||
coordinates in pixels. Note that the pixel specified by @var{right} and
|
||||
@var{bottom} is immediately outside of these edges. If @var{absolute}
|
||||
is non-@code{nil}, @var{pixelwise} is implicitly non-@code{nil} too.
|
||||
@end defun
|
||||
|
||||
@defun window-inside-edges &optional window
|
||||
This function is similar to @code{window-edges}, but the returned edge
|
||||
values are for the text area of the window. They exclude any header
|
||||
line, mode line, scroll bar, fringes, window divider, display margins,
|
||||
and vertical separator.
|
||||
@defun window-body-edges &optional window
|
||||
This function returns the edges of @var{window}'s body (@pxref{Window
|
||||
Sizes}). Calling @code{(window-body-edges window)} is equivalent to
|
||||
calling @code{(window-edges window t)}, see above.
|
||||
@end defun
|
||||
|
||||
@comment The following two functions are confusing and hardly used.
|
||||
@ignore
|
||||
@defun window-left-column &optional window
|
||||
This function returns the leftmost column of @var{window}. This value
|
||||
equals the @var{left} entry in the list returned by @code{(window-edges
|
||||
window)} minus the number of columns occupied by the internal border of
|
||||
@var{window}'s frame.
|
||||
@end defun
|
||||
|
||||
@defun window-top-line &optional window
|
||||
This function returns the Y coordinate of the topmost row of
|
||||
@var{window}, equivalent to the @var{top} entry in the list returned
|
||||
by @code{window-edges}.
|
||||
@end defun
|
||||
|
||||
@defun window-left-column &optional window
|
||||
This function returns the X coordinate of the leftmost column of
|
||||
@var{window}, equivalent to the @var{left} entry in the list returned
|
||||
by @code{window-edges}.
|
||||
This function returns the topmost row of @var{window}. This value is
|
||||
equal to the @var{top} entry in the list returned by @code{(window-edges
|
||||
window)} minus the number of lines occupied by the internal border of
|
||||
@var{window}'s frame.
|
||||
@end defun
|
||||
@end ignore
|
||||
|
||||
The following functions can be used to relate a set of
|
||||
frame-relative coordinates to a window:
|
||||
|
||||
@defun window-at x y &optional frame
|
||||
This function returns the live window at the frame-relative
|
||||
coordinates @var{x} and @var{y}, on frame @var{frame}. If there is no
|
||||
window at that position, the return value is @code{nil}. If
|
||||
@var{frame} is omitted or @code{nil}, it defaults to the selected
|
||||
This function returns the live window at the coordinates @var{x} and
|
||||
@var{y} given in default character sizes (@pxref{Frame Font}) relative
|
||||
to the native position of @var{frame} (@pxref{Frame Geometry}).
|
||||
|
||||
If there is no window at that position, the return value is @code{nil}.
|
||||
If @var{frame} is omitted or @code{nil}, it defaults to the selected
|
||||
frame.
|
||||
@end defun
|
||||
|
||||
@defun coordinates-in-window-p coordinates window
|
||||
This function checks whether a window @var{window} occupies the
|
||||
frame-relative coordinates @var{coordinates}, and if so, which part of
|
||||
the window that is. @var{window} should be a live window.
|
||||
This function checks whether a window @var{window} occupies the frame
|
||||
relative coordinates @var{coordinates}, and if so, which part of the
|
||||
window that is. @var{window} should be a live window.
|
||||
|
||||
@var{coordinates} should be a cons cell of the form @code{(@var{x}
|
||||
. @var{y})}, where @var{x} and @var{y} are frame-relative coordinates.
|
||||
. @var{y})}, where @var{x} and @var{y} are given in default character
|
||||
sizes (@pxref{Frame Font}) relative to the native position of
|
||||
@var{window}'s frame (@pxref{Frame Geometry}).
|
||||
|
||||
If there is no window at the specified position, the return value is
|
||||
@code{nil} . Otherwise, the return value is one of the following:
|
||||
|
@ -3757,46 +3821,96 @@ each text character is taken to be ``one pixel''.
|
|||
|
||||
@defun window-pixel-edges &optional window
|
||||
This function returns a list of pixel coordinates for the edges of
|
||||
@var{window}. If @var{window} is omitted or @code{nil}, it defaults
|
||||
to the selected window.
|
||||
|
||||
The return value has the form @code{(@var{left} @var{top} @var{right}
|
||||
@var{bottom})}. The list elements are, respectively, the X pixel
|
||||
coordinate of the left window edge, the Y pixel coordinate of the top
|
||||
edge, one more than the X pixel coordinate of the right edge, and one
|
||||
more than the Y pixel coordinate of the bottom edge.
|
||||
@end defun
|
||||
|
||||
@defun window-inside-pixel-edges &optional window
|
||||
This function is like @code{window-pixel-edges}, except that it
|
||||
returns the pixel coordinates for the edges of the window's text area,
|
||||
rather than the pixel coordinates for the edges of the window itself.
|
||||
@var{window} must specify a live window.
|
||||
@end defun
|
||||
|
||||
The following functions return window positions in pixels, relative
|
||||
to the display screen rather than the frame:
|
||||
|
||||
@defun window-absolute-pixel-edges &optional window
|
||||
This function is like @code{window-pixel-edges}, except that it
|
||||
returns the edge pixel coordinates relative to the top left corner of
|
||||
the display screen.
|
||||
@end defun
|
||||
|
||||
@defun window-inside-absolute-pixel-edges &optional window
|
||||
This function is like @code{window-inside-pixel-edges}, except that it
|
||||
returns the edge pixel coordinates relative to the top left corner of
|
||||
the display screen. @var{window} must specify a live window.
|
||||
@var{window}. Calling @code{(window-pixel-edges window)} is equivalent
|
||||
to calling @code{(window-edges window nil nil t)}, see above.
|
||||
@end defun
|
||||
|
||||
@comment The following two functions are confusing and hardly used.
|
||||
@ignore
|
||||
@defun window-pixel-left &optional window
|
||||
This function returns the left pixel edge of window @var{window}.
|
||||
@var{window} must be a valid window and defaults to the selected one.
|
||||
This function returns the left pixel edge of window @var{window}. This
|
||||
value equals the @var{left} entry in the list returned by
|
||||
@code{(window-pixel-edges window)} minus the number of pixels occupied
|
||||
by the internal border of @var{window}'s frame. @var{window} must be a
|
||||
valid window and defaults to the selected one.
|
||||
@end defun
|
||||
|
||||
@defun window-pixel-top &optional window
|
||||
This function returns the top pixel edge of window @var{window}.
|
||||
@var{window} must be a valid window and defaults to the selected one.
|
||||
This function returns the top pixel edge of window @var{window}. This
|
||||
value is equal to the @var{top} entry in the list returned by
|
||||
@code{(window-pixel-edges window)} minus the number of pixels occupied
|
||||
by the internal border of @var{window}'s frame. @var{window} must be a
|
||||
valid window and defaults to the selected one.
|
||||
@end defun
|
||||
@end ignore
|
||||
|
||||
@defun window-body-pixel-edges &optional window
|
||||
This function returns the pixel edges of @var{window}'s body. Calling
|
||||
@code{(window-body-pixel-edges window)} is equivalent to calling
|
||||
@code{(window-edges window t nil t)}, see above.
|
||||
@end defun
|
||||
|
||||
The following functions return window positions in pixels, relative to
|
||||
the origin of the display screen rather than that of the frame:
|
||||
|
||||
@defun window-absolute-pixel-edges &optional window
|
||||
This function returns the pixel coordinates of @var{WINDOW} relative to
|
||||
an origin at (0, 0) of the display of @var{window}'s frame. Calling
|
||||
@code{(window-absolute-pixel-edges)} is equivalent to calling
|
||||
@code{(window-edges window nil t t)}, see above.
|
||||
@end defun
|
||||
|
||||
@defun window-absolute-body-pixel-edges &optional window
|
||||
This function returns the pixel coordinates of @var{WINDOW}'s body
|
||||
relative to an origin at (0, 0) of the display of @var{window}'s frame.
|
||||
Calling @code{(window-absolute-body-pixel-edges window)} is equivalent
|
||||
to calling @code{(window-edges window t t t)}, see above.
|
||||
|
||||
Combined with @code{x-set-mouse-absolute-pixel-position}, this function
|
||||
can be used to move the mouse pointer to an arbitrary buffer position
|
||||
visible in some window:
|
||||
|
||||
@example
|
||||
@group
|
||||
(let ((edges (window-absolute-body-pixel-edges))
|
||||
(position (pos-visible-in-window-p nil nil t)))
|
||||
(x-set-mouse-absolute-pixel-position
|
||||
(+ (nth 0 edges) (nth 0 position))
|
||||
(+ (nth 1 edges) (nth 1 position))))
|
||||
@end group
|
||||
@end example
|
||||
|
||||
On a graphical terminal this form ``warps'' the mouse cursor to the
|
||||
upper left corner of the glyph at the selected window's point. A
|
||||
position calculated this way can be also used to show a tooltip window
|
||||
there.
|
||||
@end defun
|
||||
|
||||
The following function returns the screen coordinates of a buffer
|
||||
position visible in a window:
|
||||
|
||||
@defun window-absolute-pixel-position &optional position window
|
||||
If the buffer position @var{position} is visible in window @var{window},
|
||||
this function returns the display coordinates of the upper/left corner
|
||||
of the glyph at @var{position}. The return value is a cons of the X-
|
||||
and Y-coordinates of that corner, relative to an origin at (0, 0) of
|
||||
@var{window}'s display. It returns @code{nil} if @var{position} is not
|
||||
visible in @var{window}.
|
||||
|
||||
@var{window} must be a live window and defaults to the selected
|
||||
window. @var{position} defaults to the value of @code{window-point}
|
||||
of @var{window}.
|
||||
|
||||
This means that in order to move the mouse pointer to the position of
|
||||
point in the selected window, it's sufficient to write:
|
||||
|
||||
@example
|
||||
@group
|
||||
(let ((position (window-absolute-pixel-position)))
|
||||
(x-set-mouse-absolute-pixel-position
|
||||
(car position) (cdr position)))
|
||||
@end group
|
||||
@end example
|
||||
@end defun
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue