append-to-buffer インタラクティブ式
¶append-to-buffer 関数はインタラクティブに使用されるため、その関数には interactive 式が必要です。(interactive の復習については、関数をインタラクティブにする を参照してください。)
式は次のように読みます。
(interactive
(list (read-buffer
"Append to buffer: "
(other-buffer (current-buffer) t))
(region-beginning)
(region-end)))
この表現は、前述のような、各部分を表す文字を用いたものではありません。代わりに、以下の部分でリストを開始します:
リストの前半部分は、バッファ名を読み取って文字列として返す式です。それが read-buffer
です。この関数は、第1引数としてプロンプト ‘"Append to buffer:
"’ を必要とします。第2引数は、何も指定しなかった場合にどのような値を返すかをコマンドに指示するものです。
この場合、2番目の引数は、関数 other-buffer、例外、および真を表す
‘t’ を含む式となります。
other-buffer の第1引数である例外は、また別の関数 current-buffer です。これは返されません。第2引数は true を表すシンボル t です。これにより other-buffer
は、可視バッファを表示してよいことが伝えられます(ただしこの場合は、現在のバッファは表示されませんが、これは妥当な挙動です)。
式は次のようになります。
(other-buffer (current-buffer) t)
list 式の第2引数と第3引数は (region-beginning) と (region-end) です。これら2つの関数は、追記するテキストの開始位置と終了位置を指定します。
もともと、このコマンドでは‘B’と‘r’という文字が使われていました。interactiveという式全体は、次のような形でした:
(interactive "BAppend to buffer: \nr")
しかし、それが終わると、バッファが切り替わった際のデフォルト値が非表示になった。それは望ましくなかった。
(プロンプトは、改行 ‘\n’
によって第2引数から区切られていた。それに続いて ‘r’
があり、これによりEmacsは、関数の引数リストにおいてシンボル buffer
に続く2つの引数(すなわち start と end)を、point と mark の値にバインドするように指示されていた。その引数は正常に動作した。)