2009-06-20 79 views
5

在Emacs Lisp中下面的函數,Emacs Lisp:在函數返回之前使新創建的緩衝區可見?

(defun show-life() 
    (interactive) 
    (switch-to-buffer "*Life-Window*") ; show how life goes on while living 
    (live)) ; it takes 70 years to finish and return! 

我想創建緩衝區「生命窗口」,並請有(居住)產生的生活事件連續顯示,而現場的推移。

不幸的是,緩衝區只(活)返回後變得可見(當一切都結束了!)

我也試圖彈出到緩衝,該行爲是相同的。

回答

13

在呼叫'live之前添加呼叫'sit-for,例如,

(defun show-life() 
    (interactive) 
    (switch-to-buffer "*Life-Window*") ; show how life goes on while living 
    (sit-for 0)       ; perform redisplay 
    (live))        ; it takes 70 years to finish and return! 

而且,如果你想看到的'live的結果,應該定期調用'sit-for爲好。

'sit-for doc字符串是:

靜坐的是 `subr.el編譯Lisp函數」。 (仰臥爲秒&可選 nodisp)

執行的重新顯示,然後等待 秒秒或直到輸入是 可用。秒可能是一個 浮點值。 (關於操作 系統不支持等待 爲幾分之一秒, 浮點值向下舍入到 最接近的整數。)

如果可選ARG nodisp爲t時,不重新顯示 ,只是等待輸入。 如果在開始之前輸入爲 ,則不會發生重新顯示。

如果等待全職 而沒有輸入到達,則值爲t,否則爲零,否則爲 。

4

我找到了解決方案。我必須使用(sit-for <time-to-wait>)來獲取緩衝區以顯示生活事件的更新。

 
(defun show-life() 
    (interactive) 
    (switch-to-buffer "*Life-Window*") ; show how life goes on while living 
    (sit-for 0) 
    (live)) ; it takes 70 years to finish and return! 

也許內的live體,sit-for應定期調用:

所以如下代碼段應被修改。

+0

我們正在引導相同的氛圍,直到「定期」這個詞。 – 2009-06-20 15:17:00

相關問題