2011-01-16 8 views
8

dunnet.elゲーム、エリザ医師、またはIELMモードを想像してみてください。これは、回答を評価し、メインバッファで新しい質問を促し、elispの規則に従っていくつかのアクションを実行することです。Emacs Lisp:どのようにして、REPLを使ったインタラクティブバッファ?

私はインタラクティブアシスタントのようなものを作っていますが、(インタラクティブな)(M-xをやっていない)ミニバッファからのプロンプトは表示されません... REPLループが必要です。だから私はどのように作業バッファ(メイン画面)、任意のテキスト会話/冒険のようなインタラクションを得るが、私のdefun'ed関数をこのように呼び出すための質問。

カスタムREPLを作成するには、基本的なelispスケルトンが必要です。目標は、自然言語のアシスタントを作成し、アンサーを解析し、ルールに従っていくつかのアクションを実行することです。

は、お時間を

ありがとうスティーブ、あなたのバッファに上に行くことができるかに応じて、

+0

リターンキーを適切に再バインドして、いくつかのメジャーモードでバッファを設定すれば十分でしょうか? –

答えて

2

は、あなたはそれに適切な再結合returnの持つメジャーモードを与えることができますか? (この答えは、Lisp-Interaction-ModeのC-jにはっきりとは触れていません)

+0

さて、それはメジャーモード、REPL、リターンの再バインディングです。私の目標は、自然言語を解釈し、それをelisp関数呼び出しに変換できるテキストアシスタントを構築することです。例を挙げてみましょう:プレーンテキストをある種のTexソース(LaTex、Texinfo ...)と統合したいパブリッシャーを想像してみてください。最初に、ダイアログは、タイトル、作者、本のサイズ、概要、主題のテキストファイルを要求することができます...またはsqlite selectのクエリを解析する自然言語のREPLを想像してみてください...テキストフロントエンドのようなものです。 – user577475

+1

あなたはおそらくあなた自身の "生の"キーマップを設定して、ユーザがバッファ内を自由に移動することができないようにしたいでしょう。 term-modeのソースコードをチェックすると、デフォルトの "char-mode"のようなことが起こります。 – Thomas

5

emacsに含まれているelisp replを調べてください。

0

C-p C-nのようなバッファに移動するために使用するすべてのキーを上向き矢印/ページ上/下向きにバインドするだけで、それらを(lambda())にバインドする必要があります。カーソル位置が行の先頭または末尾にある場合は、C-bおよびC-f(左向き矢印)の変更機能。そしてReturnキーを現在の行を終わりからオプションのプロンプトに読み込む機能(Regexを使用してプロンプトを削除することができます)をバインドし、その文字列で必要な処理を行い、バッファ内の次の行に移動して結果を出力します。

関連する問題