all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* posn-at-point returns nil after goto-char
@ 2010-04-11  7:30 D Chiesa
  2010-04-11 14:49 ` Jeff Clough
  2010-04-11 17:39 ` Eli Zaretskii
  0 siblings, 2 replies; 3+ messages in thread
From: D Chiesa @ 2010-04-11  7:30 UTC (permalink / raw)
  To: help-gnu-emacs

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 (which happens when 
the xxxx position is visible, though not at point, before entering the 
function), 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, during 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?

Thanks for any hints y'all can provide.


D Chiesa






^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: posn-at-point returns nil after goto-char
  2010-04-11  7:30 posn-at-point returns nil after goto-char D Chiesa
@ 2010-04-11 14:49 ` Jeff Clough
  2010-04-11 17:39 ` Eli Zaretskii
  1 sibling, 0 replies; 3+ messages in thread
From: Jeff Clough @ 2010-04-11 14:49 UTC (permalink / raw)
  To: help-gnu-emacs

"D Chiesa" <dpchiesa@hotmail.com> writes:

> 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?

Putting a call to (recenter) between them will work.

Jeff





^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: posn-at-point returns nil after goto-char
  2010-04-11  7:30 posn-at-point returns nil after goto-char D Chiesa
  2010-04-11 14:49 ` Jeff Clough
@ 2010-04-11 17:39 ` Eli Zaretskii
  1 sibling, 0 replies; 3+ messages in thread
From: Eli Zaretskii @ 2010-04-11 17:39 UTC (permalink / raw)
  To: help-gnu-emacs

> From: "D Chiesa" <dpchiesa@hotmail.com>
> Date: Sun, 11 Apr 2010 03:30:21 -0400
> 
> 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.

The documentation explicitly says that it returns nil for a position
that is not visible.

> 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.

That's because Emacs never updates the display until it has no more
pending commands to run.

> 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?

Add a call to `sit-for'?




^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-04-11 17:39 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-04-11  7:30 posn-at-point returns nil after goto-char D Chiesa
2010-04-11 14:49 ` Jeff Clough
2010-04-11 17:39 ` Eli Zaretskii

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.