GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Buffer-List.html ・ emacs-doc.conao3.com

28.8 バッファリスト

バッファリストは、すべてのアクティブなバッファの一覧です。このリストにおけるバッファの順序は、主に各バッファが最後にウィンドウに表示されたタイミングに基づいています。other-bufferをはじめとするいくつかの関数が、この順序を利用しています。ユーザーに表示されるバッファリストも、この順序に従います。

バッファを作成するとバッファリストの末尾に追加され、バッファを終了するとそのリストから削除されます。バッファがウィンドウでの表示対象として選択されたとき(ウィンドウ内のバッファへの切り替えを参照)、あるいはそのバッファを表示しているウィンドウが選択されたとき(ウィンドウの選択を参照)、そのバッファはリストの先頭に移動します。バッファが埋もれたとき(後述のbury-bufferを参照)、そのバッファはリストの末尾に移動します。Lispプログラマがバッファリストを直接操作できる関数は用意されていません。

前述の基本バッファリストに加え、Emacsは各フレームごとにローカルバッファリストを保持しており、そこではそのフレームで表示された(あるいはウィンドウが選択された)バッファが先頭に並びます。(この順序はフレームのbuffer-listフレームパラメータに記録されています。バッファパラメータを参照してください。)そのフレームで一度も表示されなかったバッファはその後に続き、基本バッファリストに従って順序付けられます。

関数: buffer-list &optional frame

この関数は、名前がスペースで始まるものも含め、すべてのバッファを含むバッファリストを返します。要素は実際のバッファであり、その名前ではありません。

frame がフレームの場合、frame のローカルバッファリストが返されます。frame が nil であるか、あるいは省略されている場合は、基本バッファリストが使用されます。バッファは、どのフレームに表示されていたかにかかわらず、直近の表示または選択順に並んで表示されます。

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

;; Note that the name of the minibuffer
;;   begins with a space!
(mapcar #'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))))

この方法では、リストの順序を自由に指定できますが、バッファを失ったり、有効なライブバッファではないものを追加したりする恐れはありません。

特定のフレームのバッファリストの順序や値を変更するには、そのフレームの buffer-list パラメータを modify-frame-parameters に設定します(フレームパラメータへのアクセスを参照)。

関数: other-buffer &optional buffer visible-ok frame

この関数は、バッファリストの中で buffer 以外の最初のバッファを返します。通常、これは buffer を除き、直近で選択されたウィンドウ(フレーム frame または選択中のフレーム。入力フォーカス を参照)に表示されるバッファです。名前がスペースで始まるバッファは一切考慮されません。

buffer が指定されていない(またはライブバッファではない)場合、other-buffer は選択されたフレームのローカルバッファリスト内の最初のバッファを返します。(frame が nil 以外の場合は、代わりに frame のローカルバッファリスト内の最初のバッファを返します。)

frame が nil buffer-predicate 以外のパラメータを持つ場合、other-buffer はその述語を用いてどのバッファを考慮するかを決定します。バッファごとに一度その述語を呼び出し、値が nil であればそのバッファは無視されます。バッファパラメータ を参照してください。

visible-ok が nil である場合、other-buffer は最終手段としてを除き、可視フレーム上のいかなるウィンドウでも表示されるバッファを返さないようにする。visible-ok が nil でない場合、バッファがどこかに表示されているかどうかは問わない。

適切なバッファが存在しない場合は、バッファ *scratch* が返されます(必要に応じて作成されます)。

関数: last-buffer &optional buffer visible-ok frame

この関数は、frameのバッファリストのうち、buffer以外の最後のバッファを返します。frameが省略されているか、あるいはnilが指定されている場合は、選択されたフレームのバッファリストが使用されます。

引数 visible-ok は other-buffer と同様に処理されます(上記参照)。適切なバッファが見つからない場合は、バッファ *scratch* が返されます。

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

このコマンドは、リスト内の他のバッファの順序を変更することなく、バッファリストの末尾に buffer-or-name を追加します。そのため、このバッファは other-buffer が返す候補として最も望ましくないものとなります。引数には、バッファそのもの、またはその名前のいずれかを指定できます。

この関数は、各フレームの buffer-list パラメータおよび基本バッファリストの両方を操作します。そのため、埋め込んだバッファは (buffer-list frame) および (buffer-list) の値において最後に配置されます。さらに、そのバッファが選択中のウィンドウに表示されている場合に限り、当該ウィンドウのバッファリストの末尾にも追加されます(ウィンドウ履歴 を参照)。

buffer-or-name が nil であるか、あるいは省略されている場合、これは現在のバッファを非表示にすることを意味します。さらに、現在のバッファが選択中のウィンドウ(ウィンドウの選択 を参照)に表示されている場合、当該ウィンドウが削除されるか、あるいは別のバッファが表示されるようになります。より正確には、選択中のウィンドウが専用ウィンドウ(専用ウィンドウ を参照)であり、そのフレームに他のウィンドウが存在する場合、そのウィンドウは削除されます。そのウィンドウがフレーム上の唯一のウィンドウであり、かつそのフレームがターミナル上の唯一のフレームではない場合、frame-auto-hide-function で指定された関数を呼び出すことでフレームが破棄されます(ウィンドウの終了 を参照)。それ以外の場合は、switch-to-prev-buffer (ウィンドウ履歴 を参照)を呼び出して、そのウィンドウに別のバッファを表示します。buffer-or-name が別のウィンドウに表示されている場合は、そのままそこに表示され続けます。

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

コマンド: unbury-buffer

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

変数: buffer-list-update-hook

これは、バッファリストが変更されるたびに実行される通常のフックです。このフックを(暗黙的に)実行する関数には、get-buffer-create(バッファの作成を参照)、rename-buffer(バッファ名を参照)、kill-buffer(バッファの削除を参照)、bury-buffer(上記参照)、およびselect-window(ウィンドウの選択を参照)があります。このフックは、get-buffer-createまたはgenerate-new-bufferがnil以外の引数inhibit-buffer-hooksを用いて作成した内部バッファや一時バッファに対しては実行されません。

このフックで実行される関数は、無限再帰を招く恐れがあるため、nil や norecord を引数として select-window を呼び出すことは避けてください。

関数: buffer-match-p condition buffer-or-name &rest args

この関数は、buffer-or-name で指定されたバッファが指定した condition を満たすかどうかを判定します。オプション引数 args は、condition の述語関数に渡されます。有効な condition には、以下のいずれかが指定可能です:

  • 正規表現として解釈される文字列。正規表現がバッファ名に一致する場合、バッファはこの条件を満たします。
  • バッファが一致した場合に non-nil を返すべき述語関数。第1引数に buffer-or-name、第2引数に args を指定して呼び出される。
  • oper が以下のいずれかである cons-cell (oper . expr)
    (not cond)

    cond が同一のバッファおよび args を用いて buffer-match-p を満たさない場合に成立する。

    (or conds…)

    conds のいずれかの条件が buffer-match-p を満たせば、同一のバッファおよび args を用いて成立する。

    (and conds…)

    conds のすべての条件が buffer-match-p を満たし、かつ同一のバッファと args である場合に成立する。

    derived-mode

    バッファのメジャーモードが expr に由来する場合に成立します。expr の値は、単一のモードシンボル、または関数 provided-mode-derived-p が受け付けるモードシンボルのリストのいずれかとなります(派生モードの定義 を参照)。なお、バッファのメジャーモードが確立される前に buffer-match-p が呼び出された場合、この条件ではマッチが報告されない可能性があることに注意してください。

    major-mode

    バッファのメジャーモードが expr と等しい場合に成立します。両方が利用可能な場合は、代わりに derived-mode を使用することが推奨されます。なお、バッファのメジャーモードが確定する前に buffer-match-p が呼び出された場合、この条件ではマッチが報告されない可能性があることに注意してください。

    category

    これは、この関数が display-buffer によって呼び出された場合にのみ該当し(バッファ表示用のアクションアリスタ を参照)、display-buffer の呼び出しに使用されたアクションアリスタの action 引数の値に (category . expr) が含まれている場合に成立します。バッファ表示用のアクションアリスタ を参照してください。

    this-command

    これも、この関数が display-buffer によって呼び出された場合にのみ有効であり(バッファ表示用のアクションアリスタ を参照)、現在実行中のコマンドが expr と等しい場合、あるいは expr がリストであり、現在実行中のコマンドがそのリストの要素である場合に成立します。

  • t 任意のバッファで満たされる。""(空文字列)や(and)(空の連言)に代わる便利な選択肢。
関数: match-buffers condition &optional buffer-list &rest args

This function returns a list of all buffers that satisfy the condition. If no buffers match, the function returns nil. The argument condition is as defined in buffer-match-p above. By default, all the buffers are considered, but this can be restricted via the optional argument buffer-list, which should be a list of buffers to consider. Remaining arguments args will be passed to condition in the same way as buffer-match-p does.