2010-04-11 30 views
1

在的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-charposn-at-point之間,使posn-at-point將不會返回零?

在Windows窗體應用程序中,我會調用Form.Update()或類似的東西來更新事件處理程序中的顯示。那是什麼emacs版本?

回答

1

嘗試:

(goto-char xxx) 
(redisplay) 

執行新的位置顯示。

+0

完美。正是我需要的。 – Cheeso 2010-04-11 15:37:09