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))
シンボル switch-to-buffer
はリストの最初の要素であるため、Lispインタプリタはこれを関数として扱い、それに紐付けられた命令を実行します。しかしその前に、インタプリタは
other-buffer が括弧で囲まれていることに気づき、まずそのシンボルを処理します。other-buffer
はこのリストの最初の(そしてこの場合には唯一の)要素であるため、Lispインタプリタはその関数を呼び出し、あるいは実行します。すると、別のバッファが返されます。次に、インタプリタは
switch-to-buffer
を実行し、引数としてもう一方のバッファを渡します。Emacsはこのバッファに切り替えます。もしこれを Info
で読んでいるなら、今すぐ試してみてください。式を評価してください。(元に戻るには、C-x b RET と入力してください。)8
本ドキュメントの後半のセクションにあるプログラミング例では、switch-to-bufferよりもset-bufferという関数を目にする機会が多くなるでしょう。これは、コンピュータプログラムと人間との違いによるものです。人間には目があり、コンピュータ端末上で作業中のバッファが見えることを期待します。これはあまりに自明なことであり、あえて言うまでもないほどです。しかし、プログラムには目がありません。コンピュータプログラムがバッファを操作する場合、そのバッファが画面上に表示されている必要はないのです。
switch-to-buffer
は人間向けに設計されており、2つの異なる動作を行います。すなわち、Emacs
の注目先となるバッファを切り替えることと、ウィンドウに表示されているバッファを新しいバッファに切り替えることです。一方、set-buffer
が行う動作は1つだけです。それは、コンピュータプログラムの注目先を別のバッファに切り替えることです。画面上のバッファは変更されません(もちろん、通常はコマンドの実行が完了するまで、そこでは何も起こりません)。
また、新たにcallという専門用語を導入しました。最初のシンボルが関数であるリストを評価する際、その関数を呼び出していることになります。この用語が使われているのは、関数を「呼び出せば何かをしてくれる実体」と捉える考え方に基づいています—ちょうど、配管工を呼び出せば水漏れを直してくれる実体であるのと同様です。
というか、入力の手間を省くために、デフォルトのバッファが*scratch*だった場合にのみRETと入力し、異なっていた場合は、*scのように名前の一部だけを入力してTABキーを押してフルネームに展開させ、それからRETと入力していたのでしょう。
なお、この式を使うと、表示されていない直近の別のバッファに移動します。たとえまだ表示されていたとしても、本当に直近に選択したバッファに移動したい場合は、以下のより複雑な式を評価する必要があります。
(switch-to-buffer (other-buffer (current-buffer) t))
この場合、other-buffer
の第1引数でどのバッファをスキップするか(現在のバッファ)を指定し、第2引数で other-buffer に対して可視バッファに切り替えてもよいことを指示します。通常の使用では、おそらく
C-x o (other-window)
を使って別の可視バッファへ移動するため、switch-to-buffer では Windows
上で非表示となっているバッファに移動することになります。