【问题标题】:emacs elisp switch to buffer and followemacs elisp 切换到缓冲并跟随
【发布时间】:2018-06-08 09:28:17
【问题描述】:

我正在尝试编写一个命令,该命令将导致 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))))

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

【问题讨论】:

    标签: shell emacs buffer


    【解决方案1】:

    您需要在switch-to-buffer 之后显式调用redisplay 以使其可见。

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

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

    并异步运行(使用async-shell-command 或在命令行末尾添加&)。

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

    在 Elisp 中,致电call-processstart-process 直接,因为它提供了更多的控制并且不强制使用 shell(需要引用参数)。

    【讨论】:

    • 是的,切换到缓冲区,但缓冲区在 shell 命令完成之前不会更新......也许有不同的调用方式。
    • 看起来像重新显示,然后启动进程可以做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多