Next: , Previous: , Up: Buffers   [Contents][Index]


26.8 The Buffer List

バッファーリスト(buffer list)とは、すべての生きた(killされていない)バッファーのリストです。このリスト内のバッファーの順序は主に、それぞれのバッファーがウィンドウに表示されたのがどれほど最近なのかにもとづきます。いくつかの関数、特にother-bufferはこの順序を使用します。ユーザーに表示されるバッファーリストも、この順序にしたがいます。

バッファーを作成すると、それはバッファーリストの最後に追加され バッファーをkillすることにより、そのリストから削除されます。ウィンドウに表示するためにバッファーが選択されたとき(Switching Buffersを参照)、あるいはバッファーを表示するウィンドウが選択されたとき(Selecting Windowsを参照)、そのバッファーは常にこのリストの先頭に移動します。バッファーがバリー(以下のbury-bufferを参照)されたときは、このリストの最後に移動します。バッファーリストを直接操作するために利用できる、Lispプログラマー向けの関数は存在しません。

説明した基本バッファーリスト(fundamental buffer list)に加えて、Emacsはそれぞれのフレームにたいしてローカルバッファーリスト(local buffer list)を保守します。ローカルバッファーリストでは、そのフレーム内で表示されていた(または選択されたウィンドウの)バッファーが先頭になります(この順序は、そのフレームのフレームパラメーターbuffer-listに記録される。Buffer Parametersを参照されたい)。そのフレームでは表示されていないフレームは後になるよう、並び順は基本バッファーリストに準じます。

Function: buffer-list &optional frame

この関数は、すべてのバッファーを含むバッファーリストをリターンする(名前がスペースで始まるバッファーも含む)。リストの要素はバッファーの名前ではなく、実際のバッファーである。

frameがフレームの場合は、frameのローカルバッファーリストをリターンする。framenil、または省略された場合は、基本バッファーリストが使用される。その場合、そのバッファーを表示するフレームがどれかとは無関係に、もっとも最近に表示、または選択されたバッファーの順になる。

(buffer-list)
     ⇒ (#<buffer buffers.texi>
         #<buffer  *Minibuf-1*> #<buffer buffer.c>
         #<buffer *Help*> #<buffer TAGS>)

;; ミニバッファーの名前が
;;   スペースで始まることに注意!
(mapcar (function buffer-name) (buffer-list))
    ⇒ ("buffers.texi" " *Minibuf-1*"
        "buffer.c" "*Help*" "TAGS")

buffer-listからリターンされるリストは、それ専用に構築されたリストであり、Emacsの内部的なデータ構造ではないし、それを変更してもバッファーの並び順に影響はありません。基本バッファーリスト内のバッファーの並び順を変更したい場合に簡単なのは、以下の方法です:

(defun reorder-buffer-list (new-list)
  (while new-list
    (bury-buffer (car new-list))
    (setq new-list (cdr new-list))))

この方法により、バッファーを失ったり、有効な生きたバッファー以外の何かを追加する危険を犯さずに、リストに任意の並び順を指定できます。

特定のフレームのバッファーリストの並び順や値を変更するには、modify-frame-parametersでそのフレームのbuffer-listパラメーターをセットしてください(Parameter Accessを参照)。

Function: other-buffer &optional buffer visible-ok frame

この関数は、バッファーリスト中でbuffer以外の最初のバッファーをリターンする。これは通常選択されたウィンドウ(フレームframe、または選択されたフレーム。Input Focusを参照)に、もっとも最近表示された、buffer以外のバッファーである。名前がスペースで始まるバッファーは、考慮されない。

bufferが与えられない(または生きたバッファーでない)場合、other-bufferは選択されたフレームのローカルバッファーリスト内の、最初のバッファーをリターンする(frameが非nilの場合は、frameのローカルバッファーリスト内の最初のバッファーをリターンする)。

frameが非nilbuffer-predicateパラメーターをもつ場合は、どのバッファーを考慮すべきかを決定するために、other-bufferはその述語を使用する。これはそれぞれのバッファーごとにその述語を一度呼び出して、値がnilならそのバッファーは無視される。Buffer Parametersを参照のこと。

visible-oknilならば、other-bufferはやむを得ない場合を除き、任意の可視のフレーム上のウィンドウ内で可視のバッファーをリターンすることを避ける。visible-okが非nilの場合は、バッファーがどこかで表示されているかどうかは問題にしない。

適切なバッファーが存在しない場合は、バッファー*scratch*を(必要なら作成して)リターンする。

Function: last-buffer &optional buffer visible-ok frame

この関数は、frameのバッファーリスト内から、buffer以外の最後のバッファーをリターンする。frameが省略、またはnilの場合は、選択されたフレームのバッファーリストを使用する。

引数visible-okは、上述したother-bufferと同様に扱われる。適切なバッファーを見つけられない場合は、バッファー*scratch*がリターンされる。

Command: bury-buffer &optional buffer-or-name

このコマンドは、バッファーリスト内の他のバッファーの並び順を変更することなく、buffer-or-nameをバッファーリストの最後に置く。つまり、このバッファーはother-bufferがリターンする候補で、もっとも期待度が低くなる。引数はバッファー自身か、バッファーの名前を指定できる。

この関数は、基本バッファーリストと同様に、それぞれのフレームのbuffer-listパラメーターを操作する。したがってバリー(bury: 埋める、隠す)したバッファーは、(buffer-list frame)および(buffer-list)の値の最後に置かれるだろう。さらに、そのバッファーが選択されたウィンドウに表示されていれば、そのウィンドウのバッファーリストの最後にバッファーを置くことも行う(Window Historyを参照)。

buffer-or-namenil、または省略された場合は、カレントバッファーをバリーすることを意味する。加えて、カレントバッファーが選択されたウィンドウに表示されている場合は、そのウィンドウを削除するか、他のバッファーを表示する。より正確には、選択されたウィンドウが専用(dedicated)のウィンドウ(see Dedicated Windows)であり、かつそのフレーム上に他のウィンドウが存在する場合、専用ウィンドウは削除される。それがフレーム上で唯一のウィンドウであり、かつそのフレームが端末上で唯一のフレームでない場合、そのフレームはframe-auto-hide-functionで指定される関数を呼び出すことにより、“開放”される(Quitting Windowsを参照)。それ以外の場合は、他のバッファーをそのウィンドウ内に表示するために、switch-to-prev-bufferを呼び出す(Window Historyを参照)。buffer-or-nameが他のウィンドウで表示されていた場合は、そのまま表示され続ける。

あるバッファーにたいして、それを表示するすべてのウィンドウでバッファーを置き換えるには、replace-buffer-in-windowsを使用する。Buffers and Windowsを参照のこと。

Command: unbury-buffer

このコマンドは、選択されたフレームのローカルバッファーリストの最後のバッファーに切り替える。より正確には、選択されたウィンドウ内で、last-buffer(上記参照)がリターンするバッファーを表示するために、関数switch-to-bufferを呼び出す(Switching Buffersを参照)。

Variable: buffer-list-update-hook

これは、バッファーリストが変更されたときは、常に実行されるノーマルフックである。(暗黙的に)このフックを実行する関数はget-buffer-create(Creating Buffersを参照)、rename-buffer(Buffer Namesを参照)、kill-buffer(Killing Buffersを参照)、bury-buffer(上記参照)、select-window(Selecting Windowsを参照)である。