Next: , Previous: Overlay Arrow, Up: Display


38.7 一時的な表示

一時的な表示は、 出力をバッファに置き編集目的にではなく ユーザーに読むように提示するために Lispプログラムが使います。

— Special Form: with-output-to-temp-buffer buffer-name forms...

この関数は、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 ----------
— Variable: temp-buffer-show-function

この変数がnil以外であると、 ヘルプバッファを表示するために with-output-to-temp-bufferがこの値を関数として呼び出す。 関数は1つの引数、つまり、表示すべきバッファを受け取る。

この関数では、 save-window-excursionを使いウィンドウとバッファを選択した内側で、 with-output-to-temp-bufferが普通に行うように temp-buffer-show-hookを呼び出すのがよい。

— Variable: temp-buffer-show-hook

このノーマルフックは、ヘルプバッファを表示後に with-output-to-temp-bufferが実行する。 フックを実行するときには、 ヘルプバッファがカレントバッファであり、 それを表示しているウィンドウが選択されているウィンドウである。

— Function: momentary-string-display string position &optional char message

この関数は、カレントバッファ内の位置positionに 文字列stringを瞬間的に表示する。 アンドゥリストやバッファの変更状態には影響しない。

瞬間的な表示は、つぎの入力イベントまで持続する。 つぎの入力イベントがcharであると、 momentary-string-displayはそれを無視して戻る。 さもなければ、そのイベントは入力として使われるように保存される。 したがって、charを打つと文字列の表示が単に消えるだけであるが、 (たとえば)C-fを打つと文字列の表示が消えるだけでなく (たぶん)ポイントを進めることになる。 引数charはデフォルトでは空白である。

momentary-string-displayの戻り値に意味はない。

文字列stringにコントロール文字が含まれなければ、 属性before-stringのオーバレイを作成(のちに削除)することで より一般的な方法で同じことを行える。 see Overlay Properties

messagenil以外であると、 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 ----------