2011-11-10 1 views
0

に私はSBCLコンパイラで、Common LispのためSLIMEとEMACSを使用していながら。関数の引数がミニバッファに表示されるSLIMEのオートドック機能はうまく動作します。スライムautodocのカスタムREPL

しかし、私は次のようなカスタムREPLを実行すると:

(defun game-repl() 
    (let ((cmd (game-read))) 
    (unless (eq (car cmd) 'quit) 
     (game-print (game-eval cmd)) 
     (game-repl)))) 

autodocの機能はもう動作しません。私のカスタムREPLではなく、LISPバッファにあります。 SBCLプロセスは私のREPLで忙しいですおそらくので(入力待ち)とSLIMEと通信することはできません。

は私がC-u M-x slimeで別のSBCLプロセスを開始した後、autodocの機能はなく、唯一のLISPのバッファで、再び動作します。

私のカスタムREPLでSLIMEオートドックを取得する方法はありますか?

+0

私はこれをいくつかの機会に起こしました。スワンク、EmacsとREPL間の状態を何とかめちゃくちゃにされているかのように時々、それはそうです。 –

+0

あなたはスレッドでカスタムREPLを起動しようとしましたか? すなわち ' ボルドーthreads''と(ボルドースレッド:# 'ゲームREPLスレッド作る) ' – Daimrod

答えて

2

スワンクバックエンド(あなたのsbclプロセス内)がビジーであると結論づけるのは正しいと思います。 IIRCスライムには同期コマンドと非同期コマンドの両方があり、game-replは同期コマンドで、非同期ドキュメンテーションコマンドをバックエンドに渡すことはできません。対照的に、スライムREPLで通常のコマンドを作成すると、バックエンドはアイドル状態になっているため、docクエリが通過できます。

しかし、また、あなたは、この特定のケースでやっている理にかなっているかどうかを疑問に思うのための私を許してください - REPLはおそらく一方または両方である、カスタムの目的:

  • は、限定されたまたは合成のコマンドを公開非標準制御/構文構造に

を提供し、いずれの場合も、カスタムREPLへの入力は、そのスライムがあなたのための自動-docの可能性通常のコードと同等ではないかもしれません

  • を設定します。

    はオプションでは、通常のスライムREPLで遊ぶことができている限られた「ゲーム」の名前空間を提供することで、その後も唯一その内のシンボルへのアクセスを可能にするリーダーとの個別の生産指向のREPLを提供するかもしれません名前空間? (共通lispサンドボックスの説明はhereです。)

  • +0

    私は別名gametreeをナビゲートし、『ゲームをプレイする』ために私のカスタムREPLを使用しています。私のコマンドではない入力は、デバッグに役立つように、通常評価されます。こうすることで、ゲームが実行されている間にgametreeを調べることができます。 – chrm