我目前正在运行一个具有相当规律性的异步emacs命令,如下所示:
(save-window-excursion
(async-shell-command
cmd
(generate-new-buffer "async")))
这种方法运行良好,但它使我的emacs实例混乱了大量的异步< 5>和async< 11>缓冲区。当相应的异步命令完成执行时,如何自动终止这些缓冲区?
答案 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”之前终止“异步”缓冲区,从而阻止创建额外的“异步”缓冲区。