Next: Buffer Size & Locations, Previous: Getting Buffers, Up: Practicing Evaluation [Contents][Index]
other-buffer
関数がバッファーを要求する関数の引数として渡される場合に実際に提供するのはバッファーです。other-buffer
とswitch-to-buffer
を使って別のバッファーに切り替えることで、これを確認することができます。
でも、まずはswitch-to-buffer
関数を簡単に説明します。あなたが(buffer-name)
を評価するためにInfoと*scratch*バッファーとの間を行き来する際には、恐らくC-x
bとタイプしてから、切り替えたいバッファー名の入力を求めるミニバッファーにたいして*scratch*とタイプすることが多いのではないでしょうか7。C-x
bというキーストロークによって、Lispインタープリターがインタラクティブな関数switch-to-buffer
を評価します。前に述べたように、これがEmacsの動作原理です。たとえばC-fならforward-char
、M-eならforward-sentence
、...のように別のキーストロークにたいしては別の関数の呼び出しや実行が行われます。
式の中に切り替えるバッファーとともにswitch-to-buffer
を記述することによって、C-x
bが行うのと同じ方法でバッファーを切り替えることができます:
(switch-to-buffer (other-buffer))
このリストの1つ目の要素はシンボルswitch-to-buffer
なので、Lispインタープリターは関数とみなしてこのシンボルに付帯された命令を実行します。ただしそれを行う前に、インタープリターはまず内側のカッコにあるother-buffer
に着目して、このシンボルにたいして処理を行います。この内側のリストの1つ目(この場合は唯一)の要素はother-buffer
なので、Lispインタープリターがこの関数の呼び出し、あるいは実行を行うのです。この関数が別のバッファーをリターンします。次にインタープリターはリターンされたバッファー、つまりEmacsが切り替えることになる別のバッファーを引数として渡してswitch-to-buffer
を実行します。これをInfoで読んでいるなら、早速試してみましょう。式を評価してみてください(戻る場合はC-x
b
RETをタイプ)8。
このドキュメントの後のセクションにあるプログラム例では、switch-to-buffer
よりも関数set-buffer
を目にすることが多くなります。これはコンピュータープログラムと人間との違いによる理由からです。人間には視覚があり、コンピューター端末上で作業中のバッファーを目で見ることを期待します。これはほとんど言うまでもなく明解でしょう。しかしプログラムに視覚はありません。コンピュータープログラムがバッファーに機能する際には、バッファーが画面上に表示されている必要はないのです。
switch-to-buffer
は人間向けにデザインされており、2つの異なることを行います。1つ目はEmacsの注意が向けられたバッファーに切り替えること、2つ目はウィンドウに表示されているバッファーを新たなバッファーに切り替えることです。一方のset-buffer
が行うのはコンピュータープログラムの注意を別のバッファーに切り替えるだけです。スクリーン上のバッファーは変更されないままなのです(当然ながらコマンドの実行が終わるまで通常は何も起こりません)。
他の専門用語として呼び出す(call)という単語も登場しました。1つ目のシンボルが関数であるようなリストを評価する際には、あなたはその関数の呼び出しを行っているのです。これは電話する(call)ことによって水漏れを修繕するエンティティである配管工のように、関数という概念が呼び出す(call)ことであなたのために何らかの処理を行うエンティティであることに由来する用語です。
または恐らくはタイプ量を減らすために、デフォルトバッファーが*scratch*ならRETのみ、デフォルトバッファーが違うバッファーなら*sc
のように名前の一部だけをタイプしてからTABを押下して完全な名前に展開、それからRETをタイプするのではないでしょうか。
この式はあなたの目に見えないもっとも最近使用した別のバッファーに移動することを思い出してください。もっとも最近使用したバッファーがたとえ目に見えている場合でもそのバッファーに本当に移動したい場合には、より複雑な以下の式を評価する必要があります:
(switch-to-buffer (other-buffer (current-buffer) t))
この場合には、other-buffer
の1つ目の引数では無視すべきバッファーがカレントバッファーであること、2つ目の引数では可視のバッファーであってもそのバッファーに切り替えても構わないことを伝えています。通常の使用においては可視バッファーへの移動にC-x
o
(other-window
)を使う公算が高いために、switch-to-buffer
は不可視のバッファーに移動します。