Emacs Lisp:在函数返回之前使新创建的缓冲区可见?

Yu *_*hen 5 lisp emacs buffer visibility

在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!
Run Code Online (Sandbox Code Playgroud)

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

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

我也试过pop-to-buffer,行为是一样的.

Tre*_*son 13

在呼叫'sit-for之前添加呼叫'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!
Run Code Online (Sandbox Code Playgroud)

而且,如果你想看到结果'live,它也应该定期调用'sit-for.

doc字符串'sit-for是:

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

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

如果是可选的arg nodisp是t,请不要重新显示,只需等待输入.如果输入在启动之前可用,则不会发生重新显示.

如果在没有输入到达的情况下等待全部时间,则值为t,否则为零.