2012-07-23 43 views
5

我怎么能告诉Emacs的不叫这样一个shell命令时弹出*Shell Command Output*缓冲区?* shell命令输出*缓冲区如何保存在后台?

(shell-command MY_COMMAND) 

目前的emacs将当前窗口分成两个,示出(主要是不相关的)输出缓冲器。对我来说,如果我能够在晚些时候看到它,如果我喜欢它,那将是完全足够的。

+0

'壳command'是使用'启动process'一个奇特的功能 - 后者提供了更多的控制壳command':'在elisp的,你经常会得到更好的服务调用“呼叫处理”或“开始处理”直接,因为它提供了更多的控制权,也不强制使用一个壳(其需要引用通过使用启动过程,您还可以将输出缓冲区设置为“nil”。 – lawlist 2013-12-12 15:53:39

回答

7

也许使用shell-command是问题的根源。我想我找到了解决办法与call-process其作品,虽然有可能是一个更优雅的方式:

(call-process-shell-command 
"cat ~/.emacs.d/init.el" 
nil "*Shell Command Output*" t 
) 
8

shell-command有一个可选的参数OUTPUT-BUFFER在那里你可以指定缓冲区输出到。如果是t(其实并不是一个缓冲区名称,而不是nil),这将是在当前缓冲区输出。所以我们总结这为with-temp-buffer和将永远不会有管它:

(with-temp-buffer 
    (shell-command "cat ~/.emacs.d/init.el" t)) 
+0

是的,但这仍然弹出'*邮件*'缓冲区。 – quazgar 2012-07-23 14:10:51

+0

@quazgar哦,它没有为我的测试中的小输出做到这一点。我会尽力破解。 – pmr 2012-07-23 14:14:28

+0

是的,而一个简单的临时缓冲区不显示任何输出,我认为这有资格作为“麻烦解决了”。 – quazgar 2012-07-23 14:43:41

1

此实用程序功能可能会有所帮助。从`doc字符串这里是摘录 - 它返回shell命令的实际值

(defun shell-command-as-string (cmd) 
    (with-temp-buffer 
    (shell-command-on-region (point-min) (point-max) 
          cmd t) 
    (buffer-string)))