Emacs Lisp:関数が戻る前に、新しく作成されたバッファーを表示しますか?
-
06-07-2019 - |
質問
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!
バッファ<!> quot; Life-Window <!> quot;を作成し、(live)によって生成されたライフイベントを、liveの実行中に継続的に表示したい。
残念ながら、バッファは(ライブ)が戻った後(終了したときのみ)に表示されます
pop-to-bufferも試しましたが、動作は同じです。
解決
'sit-for
への呼び出しの直前に'live
への呼び出しを追加します。例:
(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!
そして、<=>の結果を見たい場合は、定期的に<=>も呼び出す必要があります。
<=>のドキュメント文字列は次のとおりです:
sit-forは、コンパイルされたLisp関数です 「subr.el」。 (sit-for seconds <!> amp; optional nodisp)
再表示を実行してから、 seconds秒または入力が完了するまで 利用できます。秒は 浮動小数点値。 (動作中 待機をサポートしないシステム ほんの一瞬 浮動小数点値は切り捨てられます 最も近い整数に)。
オプションの引数nodispがtの場合、しないでください 再表示、入力を待ちます。 入力が次の場合、再表示は行われません 開始前に利用可能です。
フルタイムで待機している場合、値はtです 入力が到着せず、nil それ以外の場合。
他のヒント
解決策を見つけました。ライフイベントの更新を表示するバッファーを取得するには、(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
を定期的に呼び出す必要があります。