5

在 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!

我想创建缓冲区“ Life-Window ”,并在 live 继续时连续显示由 (live) 生成的生活事件。

不幸的是,缓冲区仅在 (live) 返回后才可见(当它结束时!)

我也尝试了 pop-to-buffer,行为是一样的。

4

2 回答 2

13

'sit-for在调用 to之前添加调用 to 'live,例如

(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是:

sat-for 是在 `subr.el' 中编译的 Lisp 函数。(坐几秒钟和可选的nodisp)

执行重新显示,然后等待几秒钟或直到输入可用。秒可能是一个浮点值。(在不支持等待几分之一秒的操作系统上,浮点值会向下舍入到最接近的整数。)

如果可选的 arg nodisp 为 t,则不重新显示,等待输入。如果输入在开始之前可用,则不会重新显示。

如果等待完整时间而没有输入到达,则值为 t,否则为 nil。

于 2009-06-20T14:40:03.877 回答
4

我找到了解决方案。我必须使用(sit-for <time-to-wait>)获取缓冲区来显示生活事件的更新。

所以代码段应该修改如下:

(defun show-life ()
  (交互的)
  (switch-to-buffer "*Life-Window*") ; 展示生活中的生活如何继续
  (坐 0 人)
  (居住)) ; 完成并返回需要70年!

也许在live体内,sit-for应该定期调用。

于 2009-06-20T14:41:18.070 回答