Function: posn-at-x-y
posn-at-x-y is a function defined in keyboard.c.
Signature
(posn-at-x-y X Y &optional FRAME-OR-WINDOW WHOLE)
Documentation
Return position information for pixel coordinates X and Y.
By default, X and Y are relative to text area of the selected window. Note that the text area includes the header-line and the tab-line of the window, if any of them are present. Optional third arg FRAME-OR-WINDOW non-nil specifies frame or window. If optional fourth arg WHOLE is non-nil, X is relative to the left edge of the window.
The return value is similar to a mouse click position:
(WINDOW AREA-OR-POS (X . Y) TIMESTAMP OBJECT POS (COL . ROW)
IMAGE (DX . DY) (WIDTH . HEIGHT))
The posn- functions access elements of such lists.
Probably introduced at or before Emacs version 22.1.
Source Code
// Defined in /usr/src/emacs/src/keyboard.c
{
CHECK_FIXNUM (x);
/* We allow X of -1, for the newline in a R2L line that overflowed
into the left fringe. */
if (XFIXNUM (x) != -1)
CHECK_FIXNAT (x);
CHECK_FIXNAT (y);
if (NILP (frame_or_window))
frame_or_window = selected_window;
if (WINDOWP (frame_or_window))
{
struct window *w = decode_live_window (frame_or_window);
XSETINT (x, (XFIXNUM (x)
+ WINDOW_LEFT_EDGE_X (w)
+ (NILP (whole)
? window_box_left_offset (w, TEXT_AREA)
: 0)));
XSETINT (y, WINDOW_TO_FRAME_PIXEL_Y (w, XFIXNUM (y)));
frame_or_window = w->frame;
}
CHECK_LIVE_FRAME (frame_or_window);
return make_lispy_position (XFRAME (frame_or_window), x, y, 0);
}