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

发布于 2024-07-25 05:54:16 字数 352 浏览 6 评论 0原文

在 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) 生成的生命事件。

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

我也尝试了弹出到缓冲区,行为是相同的。

In the following function in 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!

I'd like to create the buffer "Life-Window", and have the life event generated by (live) displayed continuously while live goes on.

Unfortunately, the buffer only becomes visible after the (live) returns (when it's over!)

I also tried pop-to-buffer, the behavior is the same.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

往日 2024-08-01 05:54:16

在调用 '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 函数
`subr.el'。 (坐几秒钟&可选
诺迪斯普)

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

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

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

Add a call to 'sit-for just before the call to 'live, e.g.

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

And, if you want to see the results of 'live, it should periodically call 'sit-for as well.

The doc string for 'sit-for is:

sit-for is a compiled Lisp function in
`subr.el'. (sit-for seconds &optional
nodisp)

Perform redisplay, then wait for
seconds seconds or until input is
available. seconds may be a
floating-point value. (On operating
systems that do not support waiting
for fractions of a second,
floating-point values are rounded down
to the nearest integer.)

If optional arg nodisp is t, don't
redisplay, just wait for input.
Redisplay does not happen if input is
available before it starts.

Value is t if waited the full time
with no input arriving, and nil
otherwise.

醉生梦死 2024-08-01 05:54:16

我找到了解决办法。 我必须使用 (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!

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

I found out the solution. I have to use (sit-for <time-to-wait>) to get the buffer to show the update of life events.

So the code segment should be modified as follows:

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

Maybe inside of the live body, sit-for should be called periodically.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文