2010-11-23 12 views
3

私はeshellの実行中のインスタンスを1つのバッファに持っており、別のものにはC++のソースを書きます。私はを<F5>にバインドしていました。別のバッファで実行されているeshellインスタンスで(コンパイルの)出力ファイルを実行することが可能かどうか疑問に思っていますか?Emacs lisp:他のバッファで動作するeshellでコマンドを実行することは可能ですか?

もしそうでなければ、新しいフレームでeshellを開いて自動的にコンパイル出力を実行する方法がありますか?

は事前にありがとうございました。

答えて

5

通常、あなたが何かを実行したい場合コンパイルが完了したら、コンパイルコマンドに追加します。 、代わりに

M-x compile RET make RET 

の例えばあなたは

M-x compile RET make && ./test RET 

を入力する可能性があるかどうかは多分

M-x compile RET make test RET 

を行うことができますので、あなたは、あなたのメイクファイルにいくつかの適切なターゲットにプログラムを追加することができますコンパイルされたプログラムをeshellで実行したい理由を説明できるので、より良いアドバイスを提供できます。コンパイル処理が終了したときに呼び出す

機能:あなたはESHELL使用を主張する場合


しかし、あなたはcompilation-finish-functionsを使用することができるかもしれません。各関数は、コンパイルバッファとプロセスの終了方法を記述する文字列という2つの引数で呼び出されます。

これはすべてが文書化されているわけではありませんが、処理が正常に終了した場合は、文字列は"finished\n"です。ですから、このような何かがあります

(defun run-compilation-output-in-eshell (buf msg) 
    "If compilation finished successfully, switch to eshell and execute a command." 
    (when (string= msg "finished\n") 
    (eshell) 
    (goto-char (point-max)) 
    (eshell-kill-input) 
    (insert "echo command goes here") 
    (eshell-send-input))) 

(add-hook 'compilation-finish-functions #'run-compilation-output-in-eshell) 

をしかし、これはむしろ失礼ようだ:あなたはコンパイルが完了したときにeshellバッファに入力することが起こるならば、これはあなたの入力を削除します。上で述べたように、もう少しコンテキストが役立つかもしれません。

+0

こんにちは。答えをありがとう、あなたのポストの最後の機能は、そのトリックです。これは現在のところ関係しませんが、文脈では、 'g ++ source.cc 'で簡単にコンパイルできるC++(spoj/topcoder)の単純なソースファイルがたくさん書かれています。私はそれをテストすることができます。 – zeroDivisible

+0

私はそれを理解していますが、eshell *でコンパイルされたプログラムを実行する必要がある理由はまだ分かりません。コンパイルされたプログラムとコマンドラインで対話する必要があるからですか? –

+0

私は家庭や職場でemacsで働いています。仕事では私のPC(win xp)の権限が非常に限られています。eshellはUnixシェルにとってもっとも近いものです。さらに、Emacsにはキーストロークが少ないので、基本的なコマンドが少ないシェルが必要なので、それだけで十分です。また、私はこのハックをどのように行うことができるのだろうと思っていた;) – zeroDivisible

2

これはEmacsなので、可能ですが、Elispのハッキングが必要になります。

その間に、私はF5にバインドして簡単なルートに進むことをお勧めします。あなたがC言語でF5を打つと仮定++バッファ:

  1. スイッチがESHELLするバッファ
  2. は、あなたのプログラムバックCへ
  3. スイッチ++バッファ用のコンパイルコマンドを実行します
関連する問題