2011-12-25 18 views
8

私は、それぞれがコマンドラインインターフェイスを持つ多数のソフトウェアツールを試して試してみたいです。これらのツールには、hbase、pig、erlang、およびprologがあります。これらのツールのUIとしてemacsを使いたいのですが、M-x run-pythonやPythonシェルをielmモードのLispインタプリタで実行するのと同じ方法です。コマンドラインプログラムの周りにemacsラッパーモードを構築するためのレシピ?

これらのコマンドラインツールの1つをemacsモードでラップする方法はありますか?私はツールのプロンプトを表示する何かを探していますが、C-c C-n/C-pで履歴を検索し、Enterキーを押したツールのプロセスに現在の入力を送信し、ツールの出力を表示します。

私はこれらのツールの多くはすでにemacsモードを持っていることは知っていますが、何も存在しなければすぐにビルドする方法に興味があります。

+0

あなたの質問にはあまり答えませんが、ツール用のemacs lispラッパーを作れば、ielmから使用できます。私はemacs redis wrapperでこれを行います。 http://code.google.com/p/eredis/ – justinhj

答えて

7

私は最近、苦労してゴス語のために「劣ったゴスモード」を構築しました。それは実際にはかなり単純であることが判明しました:私はcomintを延長しました。これはshellielmの両方に基づいています。ここでは、コードの重要なビットです:

(require 'comint) 
(defun inferior-gosu-mode() 
    (interactive) 
    (comint-mode) 
    (setq comint-prompt-regex inferior-gosu-prompt) 
    (setq major-mode 'inferior-gosu-mode) 
    (setq mode-name "Inferior Gosu") 
    (setq mode-line-process '(":%s")) 
    (use-local-map 'inferior-gosu-mode-map)) 

あなたは特別なキーバインディングを定義するだけでどこuse-local-mapビットです。私はのcomintバインディングの単なるコピーとしてそれを持っている:

(defvar inferior-gosu-mode-map nil) 
(unless inferior-gosu-mode-map 
    (setq inferior-gosu-mode-map (copy-keymap comint-mode-map))) 

この後、私はそれが存在する場合*inferior-gosu*バッファを開くポップしまうプロセスを起動するコマンドを定義し、いくつかの簡単なコードを持っていました。私は下位ゴスのシェルを開くために通常のゴスモードに少しのコードを追加しました。

要約:comintを使用してください。ここで

は全体のコードへのリンクだが、それをはるかにありません。https://github.com/TikhonJelvis/Gosu-Mode/blob/master/inferior-gosu-mode.el

は、当然のことながら、しかし、あなたが望むそのコードを使用して自由に感じます。通常のゴスのモードを見て、言語のそれぞれの編集モードにあなたがどのように統合されているかを知ることができます。

+5

これは便利な答えのようですが、おそらくあなたのモードを作成するための最良の方法ではありませんか?私は '(define-derived-mode)'が使用され、 'comint-mode'が親として指定されていることを期待しました。 – phils