Next: , Previous: , Up: バッファー   [Contents][Index]


28.8 バッファーリスト

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

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

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

Function: buffer-list &optional frame

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

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

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

;; ミニバッファーの名前が
;;   スペースで始まることに注意!
(mapcar #'buffer-name (buffer-list))
    ⇒ ("buffers-ja.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パラメーターをセットしてください(フレームパラメーターへのアクセスを参照)。

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

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

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

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

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)の値の最後に置かれるだろう。さらにバッファーが選択されたウィンドウに表示されていれば、ウィンドウのバッファーリストの最後にバッファーを置くことも行う(ウィンドウのヒストリーを参照)。

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

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

Command: unbury-buffer

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

Variable: buffer-list-update-hook

これはバッファーリストが変更されたときに常に実行されるノーマルフック。(暗黙に)このフックを実行する関数はget-buffer-create (バッファーの作成を参照)、rename-buffer (バッファーの名前を参照)、kill-buffer (バッファーのkillを参照)、bury-buffer (上記参照)、select-window (ウィンドウの選択を参照)。このフックはget-buffer-creategenerate-new-bufferinhibit-buffer-hooks引数に非nilを指定して作成した内部バッファーや一時バッファーには実行されない。

このフックが実行する関数は無限再帰を引き起こすので、nilnorecord引数によるselect-windowの呼び出しは避けること。