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

Emacs Lisp:在函数返回之前使新创建的缓冲区可见吗?,emacs,lisp,buffer,visibility,Emacs,Lisp,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! 我想创建一个缓冲区“生活窗口”,在生活继续进行时,让(生活)生成的生活事件持续显示 不幸的是,缓冲区只有在(活动)返回后才可见(当它结束

在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!
我想创建一个缓冲区“生活窗口”,在生活继续进行时,让(生活)生成的生活事件持续显示

不幸的是,缓冲区只有在(活动)返回后才可见(当它结束时!)


我也试过用pop来缓冲,行为是一样的

在调用
'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
的文档字符串为:

sit for是中编译的Lisp函数 `苏伯尔。(坐几秒钟&可选) nodisp)

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

如果可选参数nodisp为t,则不要 重新显示,只需等待输入。 如果输入为空,则不会重新显示 开始前可用

如果完全等待,则值为t 没有输入到达,并且为零 否则


我找到了解决办法。我必须使用
(sit for)
来获取缓冲区,以显示生活事件的更新

因此,代码段应修改如下:

(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! (德芬秀生活() (互动) (切换到缓冲区“*生活窗口*”;展示生活是如何进行的 (坐0分钟) (现场直播);完成并返回需要70年!
可能在
live
主体内部,应该定期调用
sitfor

我们也在传递同样的情绪,一直到“周期性”这个词。