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-process
或start-process
直接,因为它提供了更多的控制权,也不强制使用一个外壳的服务(需要引用参数)。
以上是 emacs elisp切换到缓冲区,并按照 的全部内容, 来源链接: utcz.com/qa/266980.html