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

29.13 バッファとウィンドウ

本節では、ウィンドウの内容を確認・設定するための低レベル関数について説明します。ウィンドウに特定のバッファを表示するための高レベル関数については、ウィンドウ内のバッファへの切り替えを参照してください。

関数: window-buffer &optional window

この関数は、window が表示しているバッファを返します。window が省略されているか、または nil の場合は、選択中のウィンドウがデフォルトとなります。window が内部ウィンドウである場合、この関数は nil を返します。

関数: set-window-buffer window buffer-or-name &optional keep-margins

この関数は、window に buffer-or-name を表示させます。window はライブウィンドウである必要があり、nil の場合は選択中のウィンドウがデフォルトとなります。buffer-or-name はバッファ、または既存のバッファ名である必要があります。この関数は、どのウィンドウが選択されているかを変更せず、またどのバッファがカレントであるかを直接変更することもありません(カレントバッファを参照)。戻り値は nil です。

window がバッファに強く専用されており、buffer-or-name がそのバッファを指定していない場合、この関数はエラーを通知します。専用ウィンドウを参照してください。

デフォルトでは、この関数は指定されたバッファ内のローカル変数に基づいて、windowの位置、表示マージン、フリンジ幅、およびスクロールバーの設定をリセットします。ただし、オプション引数 keep-margins が nil 以外の場合、window の表示マージン、フリンジ、およびスクロールバーの設定はそのまま保持されます。

アプリケーションを記述する際は、通常、set-window-buffer を直接呼び出すのではなく、display-buffer(バッファ表示用のウィンドウの選択を参照)や、ウィンドウ内のバッファへの切り替えで説明されている上位レベルの関数を使用すべきです。

これは window-scroll-functions を実行し、続いて window-configuration-change-hook を実行します。ウィンドウのスクロールおよび変更時のフック を参照してください。

変数: buffer-display-count

このバッファローカル変数は、バッファがウィンドウに表示された回数を記録します。バッファに対して set-window-buffer が呼び出されるたびにインクリメントされます。

変数: buffer-display-time

このバッファローカル変数は、バッファが最後にウィンドウに表示された時刻を記録します。バッファが一度も表示されていない場合、値は nil となります。バッファに対して set-window-buffer が呼び出されるたびに更新され、current-time が返す値が代入されます(Time of Day を参照)。

関数: get-buffer-window &optional buffer-or-name all-frames

この関数は、選択されたウィンドウを起点として、ウィンドウの循環順で buffer-or-name を表示している最初のウィンドウを返します(ウィンドウの循環順 を参照)。そのようなウィンドウが存在しない場合、戻り値は nil となります。

buffer-or-name にはバッファまたはバッファ名を指定します。省略した場合や nil の場合は、現在のバッファがデフォルトとなります。オプション引数 all-frames では、対象とするウィンドウを指定します:

  • t は、既存のすべてのフレームにおけるウィンドウを考慮することを意味します。
  • visible は、表示されているすべてのフレームのウィンドウを考慮することを意味します。
  • 0は、表示されている、またはアイコン化されたすべてのフレーム上のウィンドウを考慮することを意味します。
  • フレームとは、そのフレーム上のウィンドウのみを考慮することを意味します。
  • それ以外の値の場合は、選択したフレーム上のウィンドウを考慮してください。

なお、これらの意味は next-window の引数 all-frames の意味とはわずかに異なります(ウィンドウの循環順序 を参照)。この不一致を解消するため、今後の Emacs のバージョンでこの関数が変更される可能性があります。

以下の関数を使用すると、特定のウィンドウのバッファが他のバッファのテキストを共有しているかどうかを判定できます(間接バッファを参照)。

関数: window-indirect-buffer-p &optional window buffer-or-name

この関数は、window が buffer-or-name と間接的に関連している場合に non-nil を返します。window はライブウィンドウである必要があり、デフォルトでは選択中のウィンドウが指定されます。buffer-or-name はバッファまたは既存のバッファ名を指定でき、デフォルトでは現在のバッファが指定されます。

window は、以下のいずれかの条件が成り立つ場合に buffer-or-name と間接的に関連します。

  • buffer-or-nameは間接バッファを指定し、windowのバッファはそのベースバッファとなります。
  • windowのバッファは、buffer-or-nameで指定されたバッファをベースバッファとする間接バッファです。
  • windowのバッファとbuffer-or-nameで指定されたバッファは、いずれも同一のベースバッファを共有する間接バッファです。

上記のいずれにも該当しない場合は nil を返します。

関数: get-buffer-window-list &optional buffer-or-name minibuf all-frames indirect

この関数は、現在 buffer-or-name を表示しているすべてのウィンドウのリストを返します。buffer-or-name にはバッファまたは既存のバッファ名を指定します。省略するか nil を指定した場合は、現在のバッファがデフォルトとなります。現在選択されているウィンドウが buffer-or-name を表示している場合、この関数が返すリストの先頭に配置されます。

引数 minibuf と all-frames は、関数 next-window におけるものと同じ意味を持ちます(ウィンドウの循環順序 を参照)。なお、引数 all-frames は get-buffer-window と全く同じようには動作しません。

オプション引数 indirect non-nil は、buffer-or-name を表示しているウィンドウのリストに、buffer-or-name に間接的に関連するすべてのウィンドウ、すなわち、buffer-or-name で指定されたウィンドウとバッファを引数として window-indirect-buffer-p(上記参照)を呼び出した際に non-nil を返すウィンドウのリストを追記することを意味します。

コマンド: replace-buffer-in-windows &optional buffer-or-name

このコマンドは、それを表示しているすべてのウィンドウにおいて、buffer-or-nameを別のバッファに置き換えます。buffer-or-nameにはバッファまたは既存のバッファ名を指定します。省略した場合やnilを指定した場合は、現在のバッファがデフォルトとなります。

各ウィンドウの置換バッファは、通常 switch-to-prev-buffer によって選択されます(ウィンドウ履歴 を参照)。サイドウィンドウ(サイドウィンドウ を参照)を除き、buffer-or-name を表示している専用ウィンドウは、可能であれば削除されます(専用ウィンドウ を参照)。そのようなウィンドウが自身のフレーム上の唯一のウィンドウであり、かつ同一ターミナル上に他のフレームが存在する場合、そのフレームも削除されます。専用ウィンドウが自身のターミナル上の唯一のフレームにおける唯一のウィンドウである場合でも、バッファはいずれにせよ置換されます。

この関数の主な目的は、kill-buffer によってバッファが破棄されようとしているウィンドウをどう処理するかを決定することです(バッファの破棄を参照)。ただし、同時に、すべてのウィンドウ(ウィンドウ構成によってのみ参照されている破棄済みウィンドウを含む)の前後のバッファリスト(ウィンドウ履歴を参照)から buffer-or-name で指定されたバッファを削除し、そのバッファを参照している quit-restore または quit-restore-prev パラメータ(ウィンドウパラメータを参照)も削除します。

この関数は、表示中のいずれのミニバッファウィンドウにおいても buffer-or-name で指定されたバッファを置き換えることはなく、またミニバッファウィンドウやミニバッファフレームを削除することもありません。ただし、すべてのミニバッファウィンドウの前後のバッファリストから、そのバッファを削除します。

デフォルトでは、replace-buffer-in-windows はバッファ専用のウィンドウのみを削除し、処理対象のウィンドウにおける quit-restore や quit-restore-prev パラメータは無視します。これらの制限を回避するには、以下のオプションが有用です。

ユーザーオプション: kill-buffer-quit-windows

このオプションが nil の場合、kill-buffer(ひいては replace-buffer-in-windows)は、削除対象のバッファ専用となっているウィンドウのみを削除できます。これが nil 以外の場合、replace-buffer-in-windows は quit-restore-window(ウィンドウの終了 を参照)を用いて、そのようなウィンドウを処理します。この関数は、たとえバッファ専用となっていなくても、そのようなウィンドウを削除することがあります。また、ウィンドウを削除できず、そこに別のバッファを表示する必要がある場合、delete-windows-on はフォールバックとして quit-restore-window を使用します。