Next: Switching Buffers, Previous: Buffer Names, Up: Practicing Evaluation [Contents][Index]
buffer-name
はバッファーの名前(name)をリターンする関数です。バッファー自体を取得するためには別の関数current-buffer
が必要です。コード内でこの関数を使用すると、バッファーそのものを取得することになります。
名前とその名前が参照するオブジェクトやエンティティは互いに異なるものです。たとえばあなたの名前はあなたではありません。他の人が名前によって参照する人物こそがあなたなのです。あなたがGeorgeと話したいと頼んだときに、誰かが‘G’、‘e’、‘o’、‘r’、‘g’、‘e’と書かれたカードを手渡してきたら面白いかもしれませんが、あなたの要求は満足されないでしょう。あなたが話しかけたいのは名前ではなく、その名前が参照する人物だからです。バッファーの場合も同様です。scratchバッファーの名前は*scratch*ですが、この名前はバッファーではありません。バッファーそのものを取得するためには、current-buffer
のような関数が必要です。
ただし少し複雑な点もあります。わたしが以前行ったようにcurrent-buffer
自体の式を評価すると、バッファーの内容を伴わないバッファー名のプリント表現を目にすることになります。このEmacsの振る舞いには2つの理由があります。そのバッファーには表示するには長過ぎる行が数千あるかもしれず、同じ内容で異なる名前をもつバッファーがあり、それらを区別することが重要だからです。
以下はこの関数を含む式です:
(current-buffer)
この式をEmacsのInfoから通常の方法で評価すると、エコーエリアに#<buffer *info*>が表示されるでしょう。この特別なフォーマットは、リターンされたのが単なる名前ではなく、バッファーそのものであることを示しています。
ちなみに、プログラムにたいして数値やシンボルをタイプすることはできますが、バッファーのプリント表現をタイプすることはできません。バッファーそのものを取得する唯一の方法は、current-buffer
のような関数で取得する方法だけです。
これに関連する関数がother-buffer
です。この関数はカレントで選択しているバッファー以外で、もっとも最近に選択されていたバッファーを、プリント表現ではなくバッファーの名前でリターンします。最近*scratch*バッファーとの間で行き来を繰り返していた場合には、other-buffer
は*scratch*バッファーをリターンするでしょう。
以下の式を評価して確認できます:
(other-buffer)
エコーエリアに#<buffer *scratch*>、あるいは最近切り替えた他のバッファーの名前が表示されるはずです6
実際のところは切り替えたばかりのバッファーが別ウィンドウに表示されている場合には、other-buffer
は表示されていないもっとも最近のバッファーを選択するでしょう。これはわたしが失念しがちな微妙な振る舞いです。