Emacs在命令完成时自动关闭异步输出缓冲区

时间:2011-08-02 16:25:51

标签: emacs

我目前正在运行一个具有相当规律性的异步emacs命令,如下所示:

(save-window-excursion
  (async-shell-command
    cmd
    (generate-new-buffer "async")))

这种方法运行良好,但它使我的emacs实例混乱了大量的异步< 5>和async< 11>缓冲区。当相应的异步命令完成执行时,如何自动终止这些缓冲区?

3 个答案:

答案 0 :(得分:2)

虽然在命令完成时它不会杀死它们,但是你可以在一段时间后释放缓冲区 - 这假设async命令是shotr-lived(或具有公认的运行时)。类似的东西:

(save-window-excursion
  (let ((buf (generate-new-buffer "async")))
    (async-shell-command cmd buf)
    (run-with-timer 10 nil (lambda (buf) (kill-buffer buf)) buf)))

答案 1 :(得分:1)

请看一下 http://news.gmane.org/find-root.php?message_id=%3cloom.20120517T145957%2d51%40post.gmane.org%3e

第二个提案随着shell进程启动了一个标记。 当此sentinel检测到进程状态'退出时,您可以立即终止进程缓冲区,或者您可以按照引用的帖子中的建议开始进程缓冲区的死亡模式。

在死亡时间内,您可以检查过程输出,取消死亡或延长缓冲区的使用寿命。

祝你好运, 托拜厄斯

答案 2 :(得分:0)

我假设(对于这个特定的用例)你很少有兴趣查看放在“异步”缓冲区中的输出,而你只想防止创建无关的缓冲区。如果是这样,你可以这样做:

(save-window-excursion
  (when (get-buffer "async")
    (kill-buffer "async"))
  (async-shell-command
    cmd
    (generate-new-buffer "async")))

这会在运行“async-shell-command”之前终止“异步”缓冲区,从而阻止创建额外的“异步”缓冲区。