2009-06-20 20 views
5

、私は(ライブ)によって生成されたライフイベントをバッファ「ライフウィンドウ」を作成し、したいのですがEmacs Lisp:関数が返る前に、新しく作成したバッファを表示させますか?ライブが進む一方でEmacs Lispの次の関数で

(defun show-life() 
    (interactive) 
    (switch-to-buffer "*Life-Window*") ; show how life goes on while living 
    (live)) ; it takes 70 years to finish and return! 

が連続して表示しました。

は残念ながら、バッファは唯一の私もポップ・ツー・バッファを試してみました(ライブ)を返します(それはオーバーだ!)

後に見えるようになり、動作は同じです。

答えて

13

を呼び出す直前に'sit-forに電話をかけます。

(defun show-life() 
    (interactive) 
    (switch-to-buffer "*Life-Window*") ; show how life goes on while living 
    (sit-for 0)       ; perform redisplay 
    (live))        ; it takes 70 years to finish and return! 

そして、あなたは'liveの結果を確認したい場合は、それが定期的に同様'sit-for呼び出す必要があります。

'sit-forのdoc文字列は次のとおりです。

シットため `subr.el」でコンパイルされたLisp関数です。 (sit-forは秒&オプション nodisp)を

再表示を実行し、入力が可能 になるまで seconds秒待ちますか。秒は の浮動小数点値になります。 (第2の画分について 待機サポートしない オペレーティングシステムでは、 浮動小数点値を最も近い整数に を切り捨てている。)

任意のarg nodispは、Tである場合、ない 再表示を行うだけで入力を待つ。 開始する前に入力が の場合、再表示は行われません。

フルタイムを待つと値はtです。入力がない場合は 、それ以外の場合はです。

4

解決策が見つかりました。私は(sit-for <time-to-wait>)を使用して、ライフイベントの更新を示すバッファを取得する必要があります。

次のようにコードセグメントが変更されるべきである:

 
(defun show-life() 
    (interactive) 
    (switch-to-buffer "*Life-Window*") ; show how life goes on while living 
    (sit-for 0) 
    (live)) ; it takes 70 years to finish and return! 

多分live体の内部に、sit-forは、定期的に呼び出されるべきです。

+0

私たちは、同じ周期を「周期的に」という言葉にしていました。 –

関連する問題