On 2016-07-27 16:55, Drew Adams wrote: > Just hoping I'm missing something simple, like a function > `screen-relative-x-y-pixels-at-point'... Thanks, if you can > point the way. Hey Drew, There was a discussion about this on the Wiki page for pos-tip (back then you suggested filing an enhancement request). The following function, from pos-tip.el, seems to do more or less what you're looking for. Does it? I'm not sure how well it works in Windows. In any case, it would be nice if this was easily feasible. Cheers, Clément. (defun pos-tip-compute-pixel-position (&optional pos window pixel-width pixel-height frame-coordinates dx dy) "Return pixel position of POS in WINDOW like (X . Y), which indicates the absolute or relative coordinates of bottom left corner of the object. Omitting POS and WINDOW means use current position and selected window, respectively. If PIXEL-WIDTH and PIXEL-HEIGHT are given, this function assumes these values as the size of small window like tooltip which is located around the object at POS. These values are used to adjust the location in order that the tooltip won't disappear by sticking out of the display. By referring the variable `pos-tip-upperside-p' after calling this function, user can examine whether the tooltip will be located above the specified position. If FRAME-COORDINATES is omitted or nil, automatically obtain the absolute coordinates of the top left corner of frame which WINDOW is on. Here, `top left corner of frame' represents the origin of `window-pixel-edges' and its coordinates are essential for calculating the return value as absolute coordinates. If a cons cell like (LEFT . TOP), specifies the frame absolute location and makes the calculation slightly faster, but can be used only when it's clear that frame is in the specified position. Users can get the latest values of frame coordinates for using in the next call by referring the variable `pos-tip-saved-frame-coordinates' just after calling this function. Otherwise, FRAME-COORDINATES `relative' means return pixel coordinates of the object relative to the top left corner of the frame. This is the same effect as `pos-tip-use-relative-coordinates' is non-nil. DX specifies horizontal offset in pixel. DY specifies vertical offset in pixel. This makes the calculations done without considering the height of object at POS, so the object might be hidden by the tooltip." (let* ((frame (window-frame (or window (selected-window)))) (w32-frame (eq (pos-tip-window-system frame) 'w32)) (relative (or pos-tip-use-relative-coordinates (eq frame-coordinates 'relative) (and w32-frame (null pos-tip-w32-saved-max-width-height)))) (frame-coord (or (and relative '(0 . 0)) frame-coordinates (pos-tip-frame-top-left-coordinates frame) (progn (setq relative t pos-tip-use-relative-coordinates t) '(0 . 0)))) (posn (posn-at-point (or pos (window-point window)) window)) (line (cdr (posn-actual-col-row posn))) (line-height (and line (or (window-line-height line window) (and (redisplay t) (window-line-height line window))))) (x-y (or (posn-x-y posn) (let ((geom (pos-visible-in-window-p (or pos (window-point window)) window t))) (and geom (cons (car geom) (cadr geom)))) '(0 . 0))) (x (+ (car frame-coord) (car (window-inside-pixel-edges window)) (car x-y) (or dx 0))) (y0 (+ (cdr frame-coord) (cadr (window-pixel-edges window)) (or (nth 2 line-height) (cdr x-y)))) (y (+ y0 (or dy (car line-height) (with-current-buffer (window-buffer window) (cond ;; `posn-object-width-height' returns an incorrect value ;; when the header line is displayed (Emacs bug #4426). ((and posn (null header-line-format)) (cdr (posn-object-width-height posn))) ((and (bound-and-true-p text-scale-mode) (not (zerop (with-no-warnings text-scale-mode-amount)))) (round (* (frame-char-height frame) (with-no-warnings (expt text-scale-mode-step text-scale-mode-amount))))) (t (frame-char-height frame))))))) xmax ymax) (cond (relative (setq xmax (frame-pixel-width frame) ymax (frame-pixel-height frame))) (w32-frame (setq xmax (car pos-tip-w32-saved-max-width-height) ymax (cdr pos-tip-w32-saved-max-width-height))) (t (setq xmax (x-display-pixel-width frame) ymax (x-display-pixel-height frame)))) (setq pos-tip-upperside-p (> (+ y (or pixel-height 0)) ymax)) (cons (max 0 (min x (- xmax (or pixel-width 0)))) (max 0 (if pos-tip-upperside-p (- (if dy ymax y0) (or pixel-height 0)) y))))) (defun pos-tip-w32-max-width-height (&optional keep-maximize) "Maximize the currently selected frame temporarily and set `pos-tip-w32-saved-max-width-height' the effective display size in order to become possible to calculate the absolute location of tooltip. KEEP-MAXIMIZE non-nil means leave the frame maximized. Note that this function is usable only in Emacs 23 for MS-Windows." (interactive) (unless (eq window-system 'w32) (error "`pos-tip-w32-max-width-height' can be used only in w32 frame.")) ;; Maximize frame (with-no-warnings (w32-send-sys-command 61488)) (sit-for 0) (let ((offset (pos-tip-calibrate-frame-offset))) (prog1 (setq pos-tip-w32-saved-max-width-height (cons (frame-pixel-width) (+ (frame-pixel-height) (- (cdr offset) (car offset))))) (if (called-interactively-p 'interactive) (message "%S" pos-tip-w32-saved-max-width-height)) (unless keep-maximize ;; Restore frame (with-no-warnings (w32-send-sys-command 61728))))))