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

29.8 Windowsの削除

ウィンドウを削除すると、そのウィンドウはフレームのウィンドウツリーから取り除かれます。そのウィンドウがライブウィンドウである場合は、画面から消えます。内部ウィンドウである場合は、その子ウィンドウも削除されます。

ウィンドウを削除した後でも、それへの参照がなくなるまでは、Lispオブジェクトとして存在し続けます。保存済みのウィンドウ設定を復元することで、ウィンドウの削除を取り消すことができます(ウィンドウ設定を参照)。

コマンド: delete-window &optional window

この関数は、表示から window を削除し、nil を返します。window が省略された場合、または nil が指定された場合は、選択中のウィンドウがデフォルトとなります。

ウィンドウを削除することでウィンドウツリーにウィンドウが一つも残らなくなる場合(例:そのフレーム内で唯一のアクティブなウィンドウである場合)、または window のフレームに残っているすべてのウィンドウがサイドウィンドウである場合(サイドウィンドウ を参照)、エラーが通知されます。window がアトミックウィンドウの一部である場合(アトミックウィンドウ を参照)、この関数は代わりにそのアトミックウィンドウのルートを削除しようとします。

デフォルトでは、window が占有する領域は、隣接する兄弟ウィンドウが存在する場合、そのうちの1つに割り当てられます。ただし、変数 window-combination-resize が nil 以外の場合、その領域は同じウィンドウ組み合わせ内の残りのウィンドウに比例配分されます。ウィンドウの再結合 を参照してください。

変数 ignore-window-parameters が nil である限り、この関数の動作は window のウィンドウパラメータによって変更されることがあります。delete-window ウィンドウパラメータの値が t である場合、この関数は他のすべてのウィンドウパラメータを無視します。そうでない場合、delete-window ウィンドウパラメータの値が関数であれば、delete-window の通常の動作に代わり、その関数が引数 window とともに呼び出されます。ウィンドウパラメータ を参照してください。

delete-window がフレームの選択済みウィンドウを削除する場合、別のウィンドウをそのフレームの新たな選択済みウィンドウとして設定する必要があります。以下のオプションで、どのウィンドウを選択するかを設定できます。

ユーザーオプション: delete-window-choose-selected

このオプションでは、delete-window が以前に選択されていたウィンドウを削除した後、どのウィンドウをフレームの選択済みウィンドウにするかを指定できます。選択可能な項目は以下の通りです。

  • mru(デフォルト)は、そのフレームで選択されているウィンドウ以外の、直近で使用されたウィンドウを選択することを意味します(ウィンドウの循環順序を参照)。
  • pos は、そのフレーム上で以前に選択されていたウィンドウの window-point の位置(ウィンドウとポイント を参照)を含むウィンドウを選択することを意味します。
  • nil は、そのフレーム上の最初のウィンドウ(frame-first-window によって返されるウィンドウ。ウィンドウとフレーム を参照)を選択することを意味します。

window-no-other-p(ウィンドウの循環順序を参照)がnil以外の値を返すウィンドウは、そのフレーム上の他のすべてのウィンドウのno-other-windowパラメータも同様にnil以外の値に設定されている場合にのみ選択されます。

コマンド: delete-other-windows &optional window

この関数は、必要に応じて他のウィンドウを削除しながら、window をフレームいっぱいに広げます。window が省略された場合、または nil が指定された場合は、選択中のウィンドウがデフォルトとなります。window がサイドウィンドウである場合はエラーが報告されます(サイドウィンドウを参照)。window がアトミックウィンドウ(アトミックウィンドウを参照)の一部である場合、この関数はそのアトミックウィンドウのルートをフレームいっぱいに広げようとします。戻り値は nil です。

変数 ignore-window-parameters が nil である限り、この関数の動作は window のウィンドウパラメータによって変更されることがあります。delete-other-windows ウィンドウパラメータの値が t である場合、この関数は他のすべてのウィンドウパラメータを無視します。そうでない場合、delete-other-windows ウィンドウパラメータの値が関数であれば、delete-other-windows の通常の動作に代わり、その関数が引数 window とともに呼び出されます。ウィンドウパラメータ を参照してください。

また、ignore-window-parameters が nil である場合、この関数は no-delete-other-windows パラメータが nil 以外であるウィンドウを一切削除しません。

コマンド: delete-windows-on &optional buffer-or-name frame

この関数は、buffer-or-name を表示しているすべてのウィンドウに対して delete-window を呼び出すことで、それらのウィンドウを削除します。buffer-or-name にはバッファまたはバッファ名を指定します。省略した場合や nil を指定した場合は、現在のバッファがデフォルトとなります。指定したバッファを表示しているウィンドウが存在しない場合、この関数は何も行いません。指定したバッファがミニバッファである場合は、エラーが通知されます。

バッファを表示する専用ウィンドウがあり、そのウィンドウが自身のフレーム内に唯一存在する場合、この関数は、当該フレームが端末上の唯一のフレームでない限り、そのフレームも削除します。

オプション引数 frame で、どのフレームを操作するかを指定します:

  • nil はすべてのフレームに対して処理を行うことを意味します。
  • tは、選択したフレームに対して操作を行うことを意味します。
  • visible は、表示されているすべてのフレームに対して処理を行うことを意味します。
  • 0 は、表示されている、またはアイコン化されたすべてのフレームに対して操作を行うことを意味します。
  • フレーム手段は、当該フレーム上で動作する。

なお、この引数は、すべてのライブウィンドウを走査する他の関数(ウィンドウの循環順序を参照)と同じ意味を持つわけではない点に注意してください。具体的には、ここでの t および nil の意味は、それらの他の関数における意味とは逆になっています。

上記のコマンドは、明示的にウィンドウを削除します。ただし、Emacsは、無関係なバッファを表示するよりもウィンドウを削除する方が直感的であると判断した場合、暗黙的にウィンドウを削除することもあります。暗黙的にウィンドウを削除する可能性のある関数には、kill-buffer(バッファの削除を参照)、quit-restore-window(ウィンドウの終了を参照)、およびbury-buffer(バッファリストを参照)があります。これらのうち一部の関数は、そのウィンドウが対応するバッファ専用である場合に限り、ウィンドウを削除します(専用ウィンドウを参照)。また、display-bufferによって作成されたウィンドウを削除する関数もあります(適切なウィンドウへのバッファの表示を参照)。さらに、同一ターミナル上に他のフレームが存在し、かつそのフレームがアクティブなミニバッファウィンドウをホストしていない場合に限り、ウィンドウのフレームをウィンドウと共に削除しようとする関数もあります。

次に説明するフックを使えば、これらの関数によってウィンドウが削除されるのを防ぐことができます。

ユーザーオプション: window-deletable-functions

これは、ウィンドウが暗黙的に削除されるのを回避するために使用できる特殊なフックです。値には、2つの引数を取る関数のリストを指定します。第1引数は、削除されようとしているウィンドウです。第2引数がnil以外の場合、そのウィンドウがフレーム上の唯一のウィンドウであり、フレームと共に削除されることを意味します。このフックが実行される際、ウィンドウのバッファがカレントとなります。

これらの関数のいずれかが nil を返す場合、ウィンドウは削除されず、別のバッファがそこに表示されます。このフックは、関数 quit-restore-window、kill-buffer、および bury-buffer によって(間接的に)実行されます。delete-window、delete-other-windows、または delete-windows-on のように明示的にウィンドウを削除する関数では実行されません。

このフックの目的は、クライアントがウィンドウやフレームを削除されずに保存できるようにすることです。というのも、そのウィンドウやフレームを引き続き自身の用途で利用したい場合があるためです。