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

30.7 フレームの削除

ライブフレームとは、削除されていないフレームのことである。フレームが削除されると、そのフレームは端末ディスプレイから消去されるが、参照がなくなるまではLispオブジェクトとして存在し続けることがある。

コマンド: delete-frame &optional frame force

この関数はフレーム frame を削除します。引数 frame には有効なフレームを指定する必要があり(後述)、デフォルトでは選択中のフレームが指定されます。

まず、frame の子フレーム(子フレームを参照)と、delete-before フレームパラメータ(フレーム相互作用パラメータを参照)で frame が指定されているすべてのフレームを削除します。こうした削除はすべて再帰的に行われます。したがって、このステップにより、frame を祖先とする他のフレームが存在しないことが確定します。次に、frame がツールチップを指定していない限り、この関数はフレームを実際に破棄する前にフック delete-frame-functions を実行します(各関数には引数 frame が1つ渡されます)。フレームを実際に破棄し、フレームリストから削除した後、delete-frame が after-delete-frame-functions を実行します。

なお、あるフレームのミニバッファが別のフレームの代理ミニバッファとして機能している限り、そのフレームを削除することはできません(ミニバッファとフレームを参照)。通常、他のすべてのフレームが非表示である場合はフレームを削除できませんが、force が nil でない場合は、削除が許可されます。また、デーモンとして動作する Emacs プロセスの初期ターミナルフレーム(The GNU Emacs Manual の daemon を参照)は、force が nil でない場合に限り削除可能です。

関数: frame-live-p frame

この関数は、フレーム frame が削除されていない場合に non-nil を返します。non-nil として返される可能性のある値は、framep の場合と同様です。Frames を参照してください。

一部のウィンドウマネージャでは、ウィンドウを削除するコマンドが提供されています。これらは、ウィンドウを操作するプログラムに特殊なメッセージを送信することで動作します。Emacsがこうしたコマンドを受信すると、delete-frameイベントを生成します。このイベントの通常の定義は、関数delete-frameを呼び出すコマンドとなっています。その他のシステムイベントを参照してください。

コマンド: delete-other-frames &optional frame iconify

このコマンドは、frameのターミナル上のframe以外のすべてのフレームを削除します。frameが別のフレームのミニバッファを使用している場合、そのミニバッファフレームは変更されません。引数frameには有効なフレームを指定する必要があり、デフォルトでは選択中のフレームが指定されます。内部的には、このコマンドは削除対象のすべてのフレームに対してforceおよびnilを指定してdelete-frameを呼び出すことで動作します。

この関数は、frameの子フレーム(子フレームを参照)を一切削除しません。frameが子フレームである場合、frameの兄弟要素のみを削除します。

接頭辞引数 iconify を指定すると、フレームは削除されるのではなくアイコン化されます。

以下の関数は、フレームを安全に削除できるかどうかを判定します。これは、後続の delete-frame の呼び出しで引数 frame が削除できなかったり、エラーがシグナルされたりする状況を回避するのに有用です。そのため、Lispプログラムでは、以下の関数が nil 以外を返す場合にのみ delete-frame を呼び出すようにしてください。

関数: frame-deletable-p &optional frame

この関数は、frame で指定されたフレームを安全に削除できる場合に non-nil を返します。frame はライブフレームである必要があり、デフォルトでは選択中のフレームが指定されます。

以下の場合、フレームを安全に削除することはできません。

  • その端末上で、可視またはアイコン化されている唯一のフレーム(フレームの可視性を参照)です。
  • ここにはアクティブなミニバッファウィンドウが表示され、ミニバッファウィンドウは選択中のフレームに従いません((emacs)Basic Minibufferを参照)。
  • 同一端末上のその他のすべての可視またはアイコン化されたフレームは、子フレーム(子フレームを参照)であるか、あるいはnil delete-before以外のパラメータを持っています。
  • フレームまたはその子孫のいずれかが、そのフレームの子孫ではないフレームのミニバッファウィンドウをホストします(子フレームを参照)。

これらの条件は、トップレベルから呼び出された際に delete-frame が失敗する可能性のあるほとんどのケースを網羅しています。ただし、例えばドラッグ&ドロップ操作中にフレームを削除する場合(ドラッグ&ドロップ を参照)のような、一部の特殊なケースはカバーしていません。このような場合には、delete-frame の呼び出しを condition-case 形式でラップする方が適切です。

選択したフレームが削除されると、Emacsは代わりに別のフレームを選択する必要があります。以下のオプションで、どちらを選択するか指定できます。

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

この変数は、選択中のフレームを削除した後にどのフレームを選択するかを指定します。デフォルト値の mru は、delete-frame が同じ端末上の get-mru-frame によって返された直近に使用されたフレーム(入力フォーカス を参照)を選択しようとすることを意味します。値 nil は、delete-frame が削除されたフレームと同じ端末上の、最も古い可視フレームを選択しようとすることを意味します。