在的Emacs Lisp,posn-at-point
記錄爲:elisp:poso-at-point在goto-char後返回nil。如何在posn-at-point之前更新顯示?
posn處,在點是在
C source code
內置功能。
(posn-at-point &可選POS窗口)
。
在WINDOW中返回緩衝區POS的位置信息。
POS默認指向WINDOW; WINDOW默認爲選定的窗口。
。
如果位置在窗口中不可見,則返回nil。否則,
返回值是類似於由event-start
爲
鼠標點擊在對應
給定的緩衝器位置的字形的左上角返回:
(窗口面積-OR-POS(X。 Y)TIMESTAMP對象POS(COL。ROW)
IMAGE(DX。DY)(WIDTH。HEIGHT))
posn-
功能訪問此類列表的元素。
OK,現在我有一個看起來像這樣的功能:
(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
長途跋涉,多個screenful,那麼檢索的位置總是零,我的代碼不知道在哪裏彈出菜單。
我建議,直到退出該功能時才真正更新位置的原因 - 當菜單成功彈出時,在顯示彈出菜單時,光標在其先前位置清晰可見。當我關閉菜單時,在撥打goto-char
後,光標移動到我期望的位置。
我怎樣才能得到這個職位是真的更新,goto-char
和posn-at-point
之間,使posn-at-point
將不會返回零?
在Windows窗體應用程序中,我會調用Form.Update()或類似的東西來更新事件處理程序中的顯示。那是什麼emacs版本?
完美。正是我需要的。 – Cheeso 2010-04-11 15:37:09