2009-06-20 44 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

相关问题