ライブフレームとは、削除されていないフレームのことである。フレームが削除されると、そのフレームは端末ディスプレイから消去されるが、参照がなくなるまではLispオブジェクトとして存在し続けることがある。
この関数はフレーム 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 が削除されていない場合に non-nil を返します。non-nil
として返される可能性のある値は、framep の場合と同様です。Frames を参照してください。
一部のウィンドウマネージャでは、ウィンドウを削除するコマンドが提供されています。これらは、ウィンドウを操作するプログラムに特殊なメッセージを送信することで動作します。Emacsがこうしたコマンドを受信すると、delete-frameイベントを生成します。このイベントの通常の定義は、関数delete-frameを呼び出すコマンドとなっています。その他のシステムイベントを参照してください。
このコマンドは、frameのターミナル上のframe以外のすべてのフレームを削除します。frameが別のフレームのミニバッファを使用している場合、そのミニバッファフレームは変更されません。引数frameには有効なフレームを指定する必要があり、デフォルトでは選択中のフレームが指定されます。内部的には、このコマンドは削除対象のすべてのフレームに対してforceおよびnilを指定してdelete-frameを呼び出すことで動作します。
この関数は、frameの子フレーム(子フレームを参照)を一切削除しません。frameが子フレームである場合、frameの兄弟要素のみを削除します。
接頭辞引数 iconify を指定すると、フレームは削除されるのではなくアイコン化されます。
以下の関数は、フレームを安全に削除できるかどうかを判定します。これは、後続の delete-frame の呼び出しで引数 frame
が削除できなかったり、エラーがシグナルされたりする状況を回避するのに有用です。そのため、Lispプログラムでは、以下の関数が nil 以外を返す場合にのみ delete-frame
を呼び出すようにしてください。
この関数は、frame で指定されたフレームを安全に削除できる場合に non-nil を返します。frame
はライブフレームである必要があり、デフォルトでは選択中のフレームが指定されます。
以下の場合、フレームを安全に削除することはできません。
nil
delete-before以外のパラメータを持っています。
これらの条件は、トップレベルから呼び出された際に delete-frame
が失敗する可能性のあるほとんどのケースを網羅しています。ただし、例えばドラッグ&ドロップ操作中にフレームを削除する場合(ドラッグ&ドロップ
を参照)のような、一部の特殊なケースはカバーしていません。このような場合には、delete-frame の呼び出しを condition-case 形式でラップする方が適切です。
選択したフレームが削除されると、Emacsは代わりに別のフレームを選択する必要があります。以下のオプションで、どちらを選択するか指定できます。