[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master e68d43e: Describe frame geometry and related functi
From: |
Martin Rudalics |
Subject: |
[Emacs-diffs] master e68d43e: Describe frame geometry and related functions in Elisp manual |
Date: |
Thu, 20 Aug 2015 16:10:37 +0000 |
branch: master
commit e68d43eb8734b4ec466c489b43b26fe732e02dfd
Author: Martin Rudalics <address@hidden>
Commit: Martin Rudalics <address@hidden>
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'.
---
doc/lispref/display.texi | 29 +-
doc/lispref/elisp.texi | 9 +-
doc/lispref/frames.texi | 889 ++++++++++++++++++++++++++++++----------------
doc/lispref/windows.texi | 266 ++++++++++----
4 files changed, 787 insertions(+), 406 deletions(-)
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index 9e9f8e3..ae59bbb 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -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
address@hidden (@pxref{Resizing Windows}) and
address@hidden (@pxref{Size and Position}) to make a window
-exactly as large as the text it contains.
address@hidden 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
@address@hidden(@var{width} . @var{height})}}. @var{spec} is an image
-specification. @var{pixels} address@hidden 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.
address@hidden null or omitted means use the selected frame (@pxref{Input
-Focus}).
+specification. @var{pixels} address@hidden 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
diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi
index a32c69c..9044fba 100644
--- a/doc/lispref/elisp.texi
+++ b/doc/lispref/elisp.texi
@@ -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
diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi
index 79b5172..28e6fbd 100644
--- a/doc/lispref/frames.texi
+++ b/doc/lispref/frames.texi
@@ -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
+
address@hidden Frame Geometry
address@hidden Frame Geometry
address@hidden frame geometry
address@hidden frame position
address@hidden position of frame
address@hidden frame size
address@hidden 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
address@hidden, it specifies the selected frame (@pxref{Input Focus}).
+
address@hidden
+* 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.
address@hidden menu
+
+
address@hidden Frame Layout
address@hidden Frame Layout
address@hidden frame layout
address@hidden layout of frame
+
+The drawing below sketches the layout of a frame on a graphical
+terminal:
address@hidden
address@hidden
+
+ <------------ 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 -------->
+
address@hidden group
address@hidden smallexample
+
+In practice not all of the areas shown in the drawing will or may be
+present. The meaning of these areas is:
+
address@hidden @samp
address@hidden Outer Frame
address@hidden outer frame
address@hidden outer edges
address@hidden outer width
address@hidden 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.
+
address@hidden 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
address@hidden and @code{set-frame-position} (@pxref{Size and
+Position}).
+
address@hidden External Border
address@hidden 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.
+
address@hidden Title Bar
address@hidden 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.
+
address@hidden Menu Bar
address@hidden internal menu bar
address@hidden 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}).
+
address@hidden Tool Bar
address@hidden internal tool bar
address@hidden 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.
+
address@hidden Native Frame
address@hidden native frame
address@hidden native edges
address@hidden native width
address@hidden native height
address@hidden 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.
+
address@hidden 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:
+
address@hidden @w
address@hidden (1) non-toolkit and terminal frames
+
address@hidden (2) Lucid, Motif and Windows frames
+
address@hidden (3) GTK+ and NS frames
address@hidden 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
address@hidden, @code{window-at} or @code{coordinates-in-window-p}
+(@pxref{Coordinates and Windows}).
+
address@hidden Internal Border
+The internal border (@pxref{Layout Parameters}) is a border drawn by
+Emacs around the inner frame (see below).
+
address@hidden Inner Frame
address@hidden inner frame
address@hidden inner edges
address@hidden inner width
address@hidden 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.
+
address@hidden non-minibuffer frame
address@hidden 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.
+
address@hidden Text Area
address@hidden 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}.
address@hidden table
+
address@hidden 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:
+
address@hidden 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.
+
address@hidden @code
address@hidden outer-position
+A cons of the absolute X- and Y-coordinates of the outer position of
address@hidden, relative to the origin at position (0, 0) of @var{frame}'s
+display.
+
address@hidden outer-size
+A cons of the outer width and height of @var{frame}.
+
address@hidden 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.
+
address@hidden 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.
+
address@hidden menu-bar-external
+If address@hidden, this means the menu bar is external (not part of the
+native frame of @var{frame}).
+
address@hidden menu-bar-size
+A cons of the width and height of the menu bar of @var{frame}.
+
address@hidden tool-bar-external
+If address@hidden, this means the tool bar is external (not part of the
+native frame of @var{frame}).
+
address@hidden 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+.
+
address@hidden tool-bar-size
+A cons of the width and height of the tool bar of @var{frame}.
+
address@hidden internal-border-width
+The width of the internal border of @var{frame}.
address@hidden table
address@hidden defun
+
+The following function can be used to retrieve the edges of the outer,
+native and inner frame.
+
address@hidden frame-edges &optional frame type
+This function returns the edges of the outer, native or inner frame of
address@hidden @var{frame} must be a live frame and defaults to the
+selected one. The list returned has the form (@var{left} @var{top}
address@hidden @var{bottom}) where all values are in pixels relative to the
+position (0, 0) of @var{frame}'s display. For terminal frames
address@hidden and @var{top} are both zero.
+
+Optional argument @var{type} specifies the type of the edges to return:
address@hidden @code{outer-edges} means to return the outer edges of
address@hidden, @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.
address@hidden defun
+
+
address@hidden Frame Font
address@hidden Frame Font
address@hidden default font
address@hidden default character size
address@hidden default character width
address@hidden default width of character
address@hidden default character height
address@hidden 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.
+
address@hidden line height
address@hidden 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''.
+
address@hidden frame-char-height &optional frame
address@hidden frame-char-width &optional frame
+These functions return the default height and width of a character in
address@hidden, 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}.
address@hidden defun
+
+The default font can be also set directly with the following function:
+
address@hidden 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 address@hidden, the option
address@hidden described in the next section will
+override this.) If @var{keep-size} is address@hidden (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 address@hidden, it
+should be a list of frames to act upon, or @code{t} meaning all existing
+graphical frames.
address@hidden deffn
+
+
address@hidden Size and Position
address@hidden Size and Position
address@hidden frame size
address@hidden frame position
address@hidden 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
address@hidden must denote a live frame and defaults to the selected frame.
+
address@hidden frame-position &optional Lisp_Object &optional frame
+This function returns the outer position (@pxref{Frame Layout}) of
address@hidden 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.
address@hidden defun
+
address@hidden 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.
address@hidden defun
+
address@hidden frame-pixel-height &optional frame
address@hidden 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.
address@hidden defun
+
address@hidden frame-text-height &optional frame
address@hidden frame-text-width &optional frame
+These functions return the height and width of the text area of
address@hidden (@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.
address@hidden defun
+
address@hidden frame-height &optional frame
address@hidden frame-width &optional frame
+These functions return the height and width of the text area of
address@hidden, measured in units of the default font height and width of
address@hidden (@pxref{Frame Font}). These functions are plain shorthands
+for writing @code{(frame-parameter frame 'height)} and
address@hidden(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.
address@hidden defun
+
address@hidden 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
address@hidden, 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 address@hidden in
+order to make a frame appear truly ``maximized'' or ``fullscreen''.
address@hidden defopt
+
address@hidden 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} address@hidden means to measure
+the new width and height in units of pixels instead. Note that if
address@hidden 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.
address@hidden defun
+
address@hidden set-frame-height frame height &optional pretend pixelwise
+This function resizes the text area of @var{frame} to a height of
address@hidden lines. The sizes of existing windows in @var{frame} are
+altered proportionally to fit.
+
+If @var{pretend} is address@hidden, 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} address@hidden means that
address@hidden should be @var{height} pixels high. Note that if
address@hidden 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.
address@hidden defun
+
address@hidden 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
address@hidden
+
+The optional fourth argument @var{pixelwise} address@hidden means that
address@hidden should be @var{width} pixels wide. Note that if
address@hidden 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.
address@hidden 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.
+
+
address@hidden Implied Frame Resizing
address@hidden Implied Frame Resizing
address@hidden implied frame resizing
address@hidden 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:
+
address@hidden 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
address@hidden, 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},
address@hidden, @code{menu-bar-lines} and
address@hidden
+
+Changing any of the @code{scroll-bar-width}, @code{scroll-bar-height},
address@hidden, @code{horizontal-scroll-bars},
address@hidden 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
address@hidden
+
+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 address@hidden
address@hidden 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
address@hidden Size and Position
address@hidden Frame Size and Position
address@hidden size of frame
address@hidden screen size
address@hidden frame size
address@hidden 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}.
-
address@hidden set-frame-position frame left top
-This function sets the position of the top left corner of @var{frame} to
address@hidden 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.
address@hidden defun
-
address@hidden frame default font
address@hidden 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.
-
address@hidden frame-char-height &optional frame
address@hidden frame-char-width &optional frame
-These functions return the canonical height and width of a character in
address@hidden, 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}.
address@hidden defun
-
-The default font can be also set directly with the following function:
-
address@hidden 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 address@hidden, the option
address@hidden described below will override this.)
-If @var{keep-size} is address@hidden (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 address@hidden, it
-should be a list of frames to act upon, or @code{t} meaning all existing
-graphical frames.
address@hidden deffn
-
address@hidden frame display area
address@hidden 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.
-
address@hidden frame-pixel-height &optional frame
address@hidden frame-pixel-width &optional frame
- These functions return the height and width of the display area of
address@hidden, measured in pixels. For a text terminal, the results are
-in characters rather than pixels.
address@hidden defun
-
address@hidden frame text area
address@hidden 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}.
-
address@hidden frame-text-height &optional frame
address@hidden frame-text-width &optional frame
-These functions return the height and width of the text area of
address@hidden, 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.
address@hidden defun
-
address@hidden frame-height &optional frame
address@hidden frame-width &optional frame
-These functions return the height and width of the text area of
address@hidden, measured in units of the default font height and width of
address@hidden These functions are plain shorthands for writing
address@hidden(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.
address@hidden defun
-
address@hidden 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 address@hidden, 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 address@hidden in
-order to make a frame appear truly ``maximized'' or ``fullscreen''.
address@hidden defopt
-
address@hidden 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} address@hidden means to measure
-the new width and height in units of pixels instead. Note that if
address@hidden 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.
address@hidden defun
-
address@hidden set-frame-height frame height &optional pretend pixelwise
-This function resizes the text area of @var{frame} to a height of
address@hidden lines. The sizes of existing windows in @var{frame} are
-altered proportionally to fit.
-
-If @var{pretend} is address@hidden, 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} address@hidden means that
address@hidden should be @var{height} pixels high. Note that if
address@hidden 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.
address@hidden defun
-
address@hidden 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
address@hidden
-
-The optional fourth argument @var{pixelwise} address@hidden means that
address@hidden should be @var{width} pixels wide. Note that if
address@hidden 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.
address@hidden 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:
-
address@hidden 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
address@hidden, 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},
address@hidden, @code{menu-bar-lines} and
address@hidden
-
-Changing any of the @code{scroll-bar-width}, @code{scroll-bar-height},
address@hidden, @code{horizontal-scroll-bars},
address@hidden 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
address@hidden
-
-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 address@hidden
address@hidden defopt
-
address@hidden FIXME? Belongs more in Emacs manual than here?
address@hidden 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}.
-
address@hidden 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
address@hidden'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
address@hidden, it may resize the frame horizontally only.
address@hidden deffn
-
-The behavior of @code{fit-frame-to-buffer} can be controlled with the
-help of the two options listed next.
-
address@hidden fit-frame-to-buffer-margins
-This option can be used to specify margins around frames to be fit by
address@hidden 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
address@hidden for each which means to use no margins. The value specified
-here can be overridden for a specific frame by that frame's
address@hidden parameter, if present.
address@hidden defopt
-
address@hidden 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 address@hidden, it overrides the corresponding
-argument of @code{fit-frame-to-buffer}.
address@hidden 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
address@hidden (@pxref{Frame Font}) relative to the native position of
address@hidden (@pxref{Frame Geometry}).
+
+The resulting mouse position is constrained to the native frame of
address@hidden 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
address@hidden 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.
+
address@hidden 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.
address@hidden defun
+
address@hidden 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.
address@hidden 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 address@hidden if the mouse pointer
displayed on @var{frame} is visible; otherwise it returns @code{nil}.
diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi
index ccfe7ff..b55a139 100644
--- a/doc/lispref/windows.texi
+++ b/doc/lispref/windows.texi
@@ -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 address@hidden, 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},
address@hidden (all listed below) and
address@hidden (@pxref{Size and Position}).
address@hidden and
address@hidden (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 address@hidden,
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 address@hidden If this is
address@hidden 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}.
+
address@hidden 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
address@hidden'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
address@hidden, it may resize the frame horizontally only.
address@hidden deffn
+
+The behavior of @code{fit-frame-to-buffer} can be controlled with the
+help of the two options listed next.
+
address@hidden fit-frame-to-buffer-margins
+This option can be used to specify margins around frames to be fit by
address@hidden 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
address@hidden for each which means to use no margins. The value specified
+here can be overridden for a specific frame by that frame's
address@hidden parameter, if present.
address@hidden defopt
+
address@hidden 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 address@hidden, it overrides the corresponding
+argument of @code{fit-frame-to-buffer}.
address@hidden 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.
-
- 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.
-
address@hidden window-edges &optional window
+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.
+
+ 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}).
+
address@hidden 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.
address@hidden defun
address@hidden 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.
+If the optional argument @var{body} is @code{nil}, this means to
+return the edges corresponding to the total size of @var{window}.
address@hidden address@hidden means to return the edges of @var{window}'s
+body (aka text area). If @var{body} is address@hidden, @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.
address@hidden address@hidden 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} address@hidden means to return the
+coordinates in pixels. Note that the pixel specified by @var{right} and
address@hidden is immediately outside of these edges. If @var{absolute}
+is address@hidden, @var{pixelwise} is implicitly address@hidden too.
@end defun
address@hidden window-top-line &optional window
-This function returns the Y coordinate of the topmost row of
address@hidden, equivalent to the @var{top} entry in the list returned
-by @code{window-edges}.
address@hidden 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
address@hidden The following two functions are confusing and hardly used.
address@hidden
@defun window-left-column &optional window
-This function returns the X coordinate of the leftmost column of
address@hidden, equivalent to the @var{left} entry in the list returned
-by @code{window-edges}.
+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
address@hidden's frame.
@end defun
address@hidden window-top-line &optional window
+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
address@hidden's frame.
address@hidden defun
address@hidden 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
address@hidden is omitted or @code{nil}, it defaults to the selected
+This function returns the live window at the coordinates @var{x} and
address@hidden 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
address@hidden'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
address@hidden If @var{window} is omitted or @code{nil}, it defaults
-to the selected window.
address@hidden Calling @code{(window-pixel-edges window)} is equivalent
+to calling @code{(window-edges window nil nil t)}, see above.
address@hidden defun
-The return value has the form @code{(@var{left} @var{top} @var{right}
address@hidden)}. 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.
address@hidden The following two functions are confusing and hardly used.
address@hidden
address@hidden window-pixel-left &optional window
+This function returns the left pixel edge of window @var{window}. This
+value equals the @var{left} entry in the list returned by
address@hidden(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
address@hidden 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.
address@hidden must specify a live window.
address@hidden window-pixel-top &optional window
+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
address@hidden(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.
address@hidden defun
address@hidden ignore
+
address@hidden window-body-pixel-edges &optional window
+This function returns the pixel edges of @var{window}'s body. Calling
address@hidden(window-body-pixel-edges window)} is equivalent to calling
address@hidden(window-edges window t nil t)}, see above.
@end defun
- The following functions return window positions in pixels, relative
-to the display screen rather than the frame:
+ 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 is like @code{window-pixel-edges}, except that it
-returns the edge pixel coordinates relative to the top left corner of
-the display screen.
+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
address@hidden(window-absolute-pixel-edges)} is equivalent to calling
address@hidden(window-edges window nil t t)}, see above.
@end defun
address@hidden 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.
address@hidden defun
address@hidden 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.
address@hidden window-pixel-left &optional window
-This function returns the left pixel edge of window @var{window}.
address@hidden must be a valid window and defaults to the selected one.
+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:
+
address@hidden
address@hidden
+(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))))
address@hidden group
address@hidden 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
address@hidden window-pixel-top &optional window
-This function returns the top pixel edge of window @var{window}.
address@hidden must be a valid window and defaults to the selected one.
+The following function returns the screen coordinates of a buffer
+position visible in a window:
+
address@hidden 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
address@hidden's display. It returns @code{nil} if @var{position} is not
+visible in @var{window}.
+
address@hidden 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:
+
address@hidden
address@hidden
+(let ((position (window-absolute-pixel-position)))
+ (x-set-mouse-absolute-pixel-position
+ (car position) (cdr position)))
address@hidden group
address@hidden example
@end defun
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master e68d43e: Describe frame geometry and related functions in Elisp manual,
Martin Rudalics <=