在emacs lisp中,posn-at-point
记录为:
好的,现在我有一个看起来像这样的功能:posn-at-point是
C source code
中的内置函数 (posn-at-point&可选POS WINDOW)
。
返回WINDOW中缓冲POS的位置信息 POS默认指向WINDOW; WINDOW默认为选定的窗口 。
如果在窗口中看不到位置,则返回nil。否则,
返回值类似于event-start
为
返回的值 鼠标点击对应的字形左上角 到给定的缓冲位置:
(WINDOW AREA-OR-POS(X.Y)TIMESTAMP OBJECT POS(COL.ROOW)
图像(DX.DY)(宽度。高度))
posn-
函数访问此类列表的元素。
(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 ...)
)
基本上,移动点,然后在该点检索屏幕位置,然后在该屏幕位置弹出菜单。
但是我发现posn-at-point
返回非零,只有当xxxx字符位置(在位置之后)在窗口中可见时,才致goto-char
的电话。似乎在从函数退出之前,该位置实际上并未更新。如果goto-char
走了很长的路,不止一个屏幕,那么检索到的位置总是为零,我的代码不知道弹出菜单的位置。
我建议在退出函数之前实际没有更新位置的原因 - 当菜单成功弹出时,光标在显示弹出菜单时在其先前位置清晰可见。当我关闭菜单时,在goto-char
调用之后,光标移动到我预期移动的位置。
如何在goto-char
和posn-at-point
之间更新 的位置,以便posn-at-point
不会返回nil?
在Windows窗体应用程序中,我会调用Form.Update()或类似的东西来更新事件处理程序中间的显示。什么是emacs版本?
答案 0 :(得分:1)
尝试:
(goto-char xxx)
(redisplay)
强制显示新职位。