Emacs Lisp:関数が戻る前に、新しく作成されたバッファーを表示しますか?

StackOverflow https://stackoverflow.com/questions/1021523

  •  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を定期的に呼び出す必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top