Next: バッファーの作成, Previous: 読み取り専用のバッファー, Up: バッファー [Contents][Index]
バッファーリスト(buffer
list)とは、すべての生きた(killされていない)バッファーのリストです。このリスト内のバッファーの順序は主に、それぞれのバッファーがウィンドウに表示されたのがどれほど最近なのかにもとづきます。いくつかの関数、特にother-buffer
はこの順序を使用します。ユーザーに表示されるバッファーリストもこの順序にしたがいます。
バッファーを作成するとそれはバッファーリストの最後に追加され
バッファーをkillすることによってそのリストから削除されます。ウィンドウに表示するためにバッファーが選択されたとき(ウィンドウ内のバッファーへの切り替えを参照)、あるいはバッファーを表示するウィンドウが選択されたとき(ウィンドウの選択を参照)、そのバッファーは常にこのリストの先頭に移動します。バッファーがバリー(以下のbury-buffer
を参照)されたときは、このリストの最後に移動します。バッファーリストを直接操作するために利用できるLispプログラマー向けの関数は存在しません。
説明した基本バッファーリスト(fundamental buffer
list)に加えて、Emacsはそれぞれのフレームにたいしてローカルバッファーリスト(local buffer
list)を保守します。ローカルバッファーリストでは、そのフレーム内で表示されていた(または選択されたウィンドウの)バッファーが先頭になります(この順序はそのフレームのフレームパラメーターbuffer-list
に記録される。バッファーのパラメーターを参照)。並び順は基本バッファーリストにならい、そのフレームでは表示されていないフレームは後になになります。。
この関数はすべてのバッファーを含むバッファーリストをリターンする(名前がスペースで始まるバッファーも含む)。リストの要素はバッファーの名前ではなく実際のバッファー。
frameがフレームなら、frameのローカルバッファーリストをリターンする。frameがnil
か省略された場合は、基本バッファーリストが使用される。その場合には、そのバッファーを表示するフレームがどれかとは無関係に、もっとも最近に表示または選択されたバッファーの順になる。
(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
パラメーターをセットしてください(フレームパラメーターへのアクセスを参照)。
この関数はバッファーリスト中でbuffer以外の最初のバッファーをリターンする。これは通常は選択されたウィンドウ(フレームframe、または選択されたフレーム(入力のフォーカスを参照)にもっとも最近表示されたbuffer以外のバッファーである。名前がスペースで始まるバッファーは考慮されない。
bufferが与えられない(または生きたバッファーでない)場合には、other-buffer
は選択されたフレームのローカルバッファーリスト内の最初のバッファーをリターンする(frameが非nil
ならframeのローカルバッファーリスト内の最初のバッファーをリターンする)。
frameが非nil
のbuffer-predicate
パラメーターをもつ場合には、どのバッファーを考慮すべきかを決定するためにother-buffer
はその述語を使用する。これはそれぞれのバッファーごとにその述語を一度呼び出して、値がnil
ならそのバッファーは無視される。バッファーのパラメーターを参照のこと。
visible-okがnil
ならother-buffer
はやむを得ない場合を除き、任意の可視のフレーム上のウィンドウ内で可視のバッファーをリターンすることを避ける。visible-okが非nil
なら、バッファーがどこかで表示されているかどうかは問題にしない。
適切なバッファーが存在しなければ、バッファー*scratch*を(必要なら作成して)リターンする。
この関数はframeのバッファーリスト内からbuffer以外の最後のバッファーをリターンする。frameが省略またはnil
なら選択されたフレームのバッファーリストを使用する。
引数visible-okは上述したother-buffer
と同様に扱われる。適切なバッファーを見つけられなければバッファー*scratch*がリターンされる。
このコマンドはバッファーリスト内の他のバッファーの並び順を変更することなく、buffer-or-nameをバッファーリストの最後に配置する。つまりこのバッファーはother-buffer
がリターンする候補でもっとも期待度が低くなる。引数はバッファー自身かバッファーの名前を指定できる。
この関数は基本バッファーリストと同様に、それぞれのフレームのbuffer-list
パラメーターを操作する。したがってバリー(bury:
埋める、隠す)したバッファーは(buffer-list
frame)
と(buffer-list)
の値の最後に置かれるだろう。さらにバッファーが選択されたウィンドウに表示されていれば、ウィンドウのバッファーリストの最後にバッファーを置くことも行う(ウィンドウのヒストリーを参照)。
buffer-or-nameがnil
または省略された場合には、カレントバッファーをバリーすることを意味する。加えてカレントバッファーが選択されたウィンドウ(ウィンドウの選択を参照)に表示されていれば、そのウィンドウを削除するか他のバッファーを表示する。より正確には選択されたウィンドウが専用(dedicated)のウィンドウ(see 専用のウィンドウ)であり、かつそのフレーム上に他のウィンドウが存在する場合には専用ウィンドウは削除される。それがフレーム上で唯一のウィンドウであり、かつそのフレームが端末上で唯一のフレームでなければ、そのフレームはframe-auto-hide-function
で指定される関数を呼び出すことにより開放される(ウィンドウのquitを参照)。それ以外の場合はに、他のバッファーをそのウィンドウ内に表示するためにswitch-to-prev-buffer
を呼び出す(ウィンドウのヒストリーを参照)。buffer-or-nameが他のウィンドウで表示されていれば、そのまま表示され続ける。
あるバッファーにたいして、それを表示するすべてのウィンドウでバッファーを置き換えるにはreplace-buffer-in-windows
を使用する。バッファーとウィンドウを参照のこと。
このコマンドは選択されたフレームのローカルバッファーリストの最後のバッファーに切り替える。より正確には選択されたウィンドウ内で、last-buffer
(上記参照)がリターンするバッファーを表示するために関数switch-to-buffer
を呼び出す(ウィンドウ内のバッファーへの切り替えを参照)。
これはバッファーリストが変更されたときに常に実行されるノーマルフック。(暗黙に)このフックを実行する関数はget-buffer-create
(バッファーの作成を参照)、rename-buffer
(バッファーの名前を参照)、kill-buffer
(バッファーのkillを参照)、bury-buffer
(上記参照)、select-window
(ウィンドウの選択を参照)。このフックはget-buffer-create
やgenerate-new-buffer
でinhibit-buffer-hooks引数に非nil
を指定して作成した内部バッファーや一時バッファーには実行されない。
このフックが実行する関数は無限再帰を引き起こすので、nil
のnorecord引数によるselect-window
の呼び出しは避けること。