2012-07-23 6 views
5

このようなシェルコマンドを呼び出すときに、*Shell Command Output*バッファをポップアップしないようにemacsに指示するにはどうすればよいですか?* shellコマンドの出力*バッファをバックグラウンドでどのように保つことができますか?

(shell-command MY_COMMAND) 

現在、emacsは現在のウィンドウを2つに分割して、(ほとんど関係ない)出力バッファを表示します。私には、私がそれが好きなら後で見ることができれば十分です。

+0

'シェルcommand'は '開始process'を使用して空想の関数であるを返しますshell-command': 'Elispでは、より多くの制御を提供し、シェルの使用を強制しないので、 'call-process'または 'start-process'を直接コールする方がよくなるでしょう。引数).' startプロセスを使うことで、出力バッファを 'nil'に設定することもできます。 – lawlist

答えて

7

たぶんshell-commandを使用すると、問題の根本的でした。

(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

はい、これでも '* Messages *'バッファがポップアップします。 – quazgar

+0

@quazgarオハイオ州、それは私のテストで小さな出力のためにそれをしませんでした。私はハックしようとします。 – pmr

+0

はい、単純なテンポラリバッファには出力が全く表示されませんが、これは「トラブルが解決されました」とみなされます。 – quazgar

1

このユーティリティ関数は役立つかもしれない:私はもっとエレガントな方法があるかもしれませんが、私は、作品call-processで解決策を見つけたと思います。後者はより多くの制御を提供しています - - ここでは `のドキュメンテーション文字列からの抜粋であることは、シェルコマンドの実際の値に

(defun shell-command-as-string (cmd) 
    (with-temp-buffer 
    (shell-command-on-region (point-min) (point-max) 
          cmd t) 
    (buffer-string))) 
関連する問題