Emacs Lisp:在函数返回之前使新创建的缓冲区可见?
-
06-07-2019 - |
题
在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 <!>”,并在实时继续显示(实时)生成的生活事件。
不幸的是,缓冲区只有在(实时)返回后才会显示(当它结束时!)
我也试过pop-to-buffer,行为是一样的。
解决方案
在呼叫'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!
并且,如果您想查看<=>的结果,它也应该定期调用<=>。
<=>的文档字符串是:
sit-for是一个已编译的Lisp函数 `subr.el”。 (坐着几秒钟<!>放大器;可选 nodisp)
执行重新显示,然后等待 秒秒或直到输入 可用。秒可能是一个 浮点值。 (在操作上 不支持等待的系统 几分之一秒 浮点值向下舍入 到最近的整数。)
如果是可选的arg nodisp,请不要 重新显示,等待输入。 如果输入是,则不会发生重新显示 在它开始之前可用。
如果等待全职,则值为t 没有输入到达,没有 否则。
其他提示
我找到了解决方案。我必须使用(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
。
不隶属于 StackOverflow