次: , 前: Read Only Buffers, 上: Buffers


26.8 バッファリスト

バッファリスト(buffer list)は、 すべてのバッファのリストです。 バッファを作成すると当該バッファはこのリストに追加され、 削除するとこのリストから取り除かれます。 リスト内のバッファの順序は、各バッファが選択されているウィンドウに どの程度最近に表示されたかを主な基準にしています。 バッファが選択されるとリストの先頭に移動し、 隠されると(下記のbury-bufferを参照)末尾に移動します。 other-bufferをはじめとするいくつかの関数が、この順序を使います。 ユーザーに表示するバッファ一覧もこの順序を反映しています。

Emacs基本バッファリストに加えて、 各フレームには独自のバッファリストがあります。 そのリストでは、 当該フレームでもっとも最近に選択されたバッファから順に 当該フレームで選択されたバッファが先にきます。 (この順番は、フレームのフレームパラメータbuffer-listに入っている。 Window Frame Parametersを参照。) 当該フレームで選択されたことがないバッファは、 Emacs基本バッファリストでの順にうしろに続きます。

— 機能: buffer-list &optional frame

この関数は、空白で始まる名前のバッファを含めて、 すべてのバッファを含んだバッファリストを返す。 要素は実際にバッファであり、それらの名前ではない。

frameがフレームであると、 この関数はフレームframeのバッファリストを返す。 framenilであるとEmacs基本バッファリストを使う。

          (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が返すリストは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(see Parameter Access)で、 フレームのフレームパラメータbuffer-listに設定します。

— 機能: other-buffer &optional buffer visible-ok frame

この関数は、バッファリストからbuffer以外の最初のバッファを返す。 通常、当該バッファは、bufferを除いて (frameか現在選択されているフレームで) もっとも最近に選択されたバッファである。 空白で始まる名前のバッファは完全に除外する。

bufferを指定しないと(あるいはバッファでないと)、 other-bufferは、選択されているフレームのバッファリストの中から 可視フレームのどのウィンドウにも表示されていない最初のバッファを返す。

framenil以外のパラメータbuffer-predicateがあると、 other-bufferは当該述語を使って どのバッファを考慮に入れるかを決定する。 各バッファについて当該述語を1回呼び出し、 その値がnilであると当該バッファを無視する。 see Window Frame Parameters

visible-oknilであると、 other-bufferは可視フレームのいずれかのウィンドウに 表示されているバッファを可能な限り返さないようにする。 visible-oknil以外であると、 バッファが表示されているかどうかは関係ない。

適当なバッファが存在しない場合には、 バッファ`*scratch*'を(必要ならば作成して)返す。

— コマンド: bury-buffer &optional buffer-or-name

この関数は、バッファリストの他のバッファの順序は変えずに buffer-or-nameを末尾に置く。 この結果、当該バッファは、other-bufferが返す候補としては もっとも可能性が低くなる。

bury-bufferは、 Emacsのフレーム独立なバッファリストに加えて、 各フレームのパラメータbuffer-listも操作する。 したがって、指定したバッファは、 (buffer-list frame)(buffer-list nil)の いずれの値でも最後になる。

buffer-or-namenilであるか省略すると、 カレントバッファを最後尾に置くことを意味する。 さらに、当該バッファが選択されているウィンドウに表示されていると、 そのウィンドウでは(other-bufferで得られる) 別のバッファに切り替わる。 当該バッファが別のウィンドウにも表示されている場合、 その表示は替わらない。

すべてのウィンドウに表示している特定のバッファを置き換えるには、 replace-buffer-in-windowsを使う。 see Buffers and Windows