emacs elisp切换到缓冲区,并按照

我想写一个命令,会导致Emacs切换到一个新的缓冲区,并执行一些操作(在这种情况下,执行一个shell命令)写输出到缓冲区。emacs elisp切换到缓冲区,并按照

(defun test-func() 

(interactive)

(let ((bname "*temp*")

(default-directory "/home/me"))

(with-output-to-temp-buffer bname

(switch-to-buffer bname)

(shell-command "ls -l" bname))))

在这种情况下,它“工作”,除非在命令完成执行之前它不切换缓冲区。我想立即切换,然后在运行时跟随输出。有没有办法做到这一点?

回答:

您需要在switch-to-buffer之后明确呼叫redisplay以使其可见。

请注意,ls是一个相当“快”的命令,它不可能显示零碎。你可能想尝试像

while true; do 

date

sleep 10

done

一个shell脚本并运行是异步的(或者使用async-shell-command或添加&到命令行的末尾)。

还要注意对shell-command帮助说:

在elisp的,你经常会得到更好的通过调用call-processstart-process直接,因为它提供了更多的控制权,也不强制使用一个外壳的服务(需要引用参数)。

以上是 emacs elisp切换到缓冲区,并按照 的全部内容, 来源链接: utcz.com/qa/266980.html

回到顶部