emacs elisp切换到缓冲区并关注

时间:2017-12-27 18:48:12

标签: shell emacs buffer

我正在尝试编写一个命令,该命令将导致Emacs切换到新的缓冲区并执行一些操作(在这种情况下,执行shell命令)将输出写入缓冲区。

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

在这种情况下,它“工作”,只是在命令执行完毕之前它不会切换缓冲区。我想立即切换,然后按照输出运行。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

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

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

这样的shell脚本
while true; do
  date
  sleep 10
done

并以异步方式运行(使用async-shell-command或将&添加到命令行的末尾。)

另请注意shell-command的帮助说:

  

在Elisp中,通常可以通过致电call-process或更好地为您提供服务   直接start-process,因为它提供了更多控制,并且没有强制使用shell(需要引用参数)。