In emacs lisp, posn-at-point
is documented as:
posn-at-point is a built-in function in
C source code
.
(posn-at-point &optional POS WINDOW)
.
Return position information for buffer POS in WINDOW.
POS defaults to point in WINDOW; WINDOW defaults to the selected window.
.
Return nil if position is not visible in window. Otherwise,
the return value is similar to that returned byevent-start
for
a mouse click at the upper left corner of the glyph corresponding
to the given buffer position:
(WINDOW AREA-OR-POS (X . Y) TIMESTAMP OBJECT POS (COL . ROW)
IMAGE (DX . DY) (WIDTH . HEIGHT))
Theposn-
functions access elements of such lists.
ok, now I've got a function that looks something like this:
(defun my-move-and-popup-menu ()
"move the point, then pop up a menu."
(goto-char xxxx)
(setq p (posn-at-point))
(my-popup-menu p ...)
)
Basically, move the point, then retrieve the screen position at that point, and then popup a menu at that screen position.
But I am finding that posn-at-point
returns non-nil, only if the xxxx character position (the after position) is visible in the window, before the call to goto-char
. It seems that the position is not actually updated until exit from the function. If goto-char
goes a long way, more than one screenful, then the retrieved position is always nil, and my code doesn't know where to popup the menu.
The reason I suggest that the position is not actually updated until exit from the function - when the menu successfully pops up, the cursor is clearly visible in its previous location while the popup menu is being displayed. When I dismiss the menu, the cursor moves to where I expected it to move, after the goto-char
call.
How can I get the position to be really updated, between goto-char
and posn-at-point
, so that posn-at-point
will not return nil?
In a Windows Forms application I would call Form.Update() or something similar to update the display in the middle of an event handler. What's the emacs version of that?