次: Overlays, 前: Overlay Arrow, 上: Display
一時的な表示は、 出力をバッファに置き編集目的にではなく ユーザーに読むように提示するために Lispプログラムが使います。
この関数は、buffer-nameという名前のバッファに formsの任意の出力が挿入されるように準備して formsを実行する。 そのバッファは適当なウィンドウに表示されるが、 そのバッファは選択されない。
文字列buffer-nameは、既存である必要はない一時的なバッファを指定する。 引数は、バッファではなく文字列であること。 (問い合わせずに)はじめにバッファを消去し、
with-output-to-temp-buffer
が終了すると未変更と印を付ける。
with-output-to-temp-buffer
は、standard-output
に一時的なバッファを束縛し、 formsのフォーム群を評価する。 forms内で用いたLisp出力関数からの出力は デフォルトでそのバッファに入る (しかし、スクリーン表示やエコー領域のメッセージは、 用語の一般的な意味で『出力』であるが、 影響されない。) see Output Functions。formsの最後のフォームの値を返す。
---------- Buffer: foo ---------- This is the contents of foo. ---------- Buffer: foo ---------- (with-output-to-temp-buffer "foo" (print 20) (print standard-output)) => #<buffer foo> ---------- Buffer: foo ---------- 20 #<buffer foo> ---------- Buffer: foo ----------
この変数が
nil
以外であると、 ヘルプバッファを表示するためにwith-output-to-temp-buffer
がこの値を関数として呼び出す。 関数は1つの引数、つまり、表示すべきバッファを受け取る。この関数では、
save-window-excursion
を使いウィンドウとバッファを選択した内側で、with-output-to-temp-buffer
が普通に行うようにtemp-buffer-show-hook
を呼び出すのがよい。
このノーマルフックは、ヘルプバッファを表示後に
with-output-to-temp-buffer
が実行する。 フックを実行するときには、 ヘルプバッファがカレントバッファであり、 それを表示しているウィンドウが選択されているウィンドウである。
この関数は、カレントバッファ内の位置positionに 文字列stringを瞬間的に表示する。 アンドゥリストやバッファの変更状態には影響しない。
瞬間的な表示は、つぎの入力イベントまで持続する。 つぎの入力イベントがcharであると、
momentary-string-display
はそれを無視して戻る。 さもなければ、そのイベントは入力として使われるように保存される。 したがって、charを打つと文字列の表示が単に消えるだけであるが、 (たとえば)C-fを打つと文字列の表示が消えるだけでなく (たぶん)ポイントを進めることになる。 引数charはデフォルトでは空白である。
momentary-string-display
の戻り値に意味はない。文字列stringにコントロール文字が含まれなければ、 属性
before-string
のオーバレイを作成(のちに削除)することで より一般的な方法で同じことを行える。 see Overlay Properties。messageが
nil
以外であると、 stringをバッファに表示中には、 messageをエコー領域に表示する。nil
であると、デフォルトは 「継続するには文字charを打つこと」 といったメッセージである。つぎの例では、ポイントは始めは2行目の先頭に位置している。
---------- Buffer: foo ---------- This is the contents of foo. -!-Second line. ---------- Buffer: foo ---------- (momentary-string-display "**** Important Message! ****" (point) ?\r "Type RET when done reading") => t ---------- Buffer: foo ---------- This is the contents of foo. **** Important Message! ****Second line. ---------- Buffer: foo ---------- ---------- Echo Area ---------- Type RET when done reading ---------- Echo Area ----------