以下の2つの関数は、あるフレームのウィンドウレイアウト(Emacsウィンドウの基本概念を参照)の一部を2つの別々のフレームに転送したり、2つの別々のフレームのウィンドウレイアウトを1つのフレームに統合したりする際に便利です。
このコマンドは、指定された frame のウィンドウをいくつか新しいフレームに転送し、その後 frame 上でそれらを削除します。frame はライブフレームである必要があり、デフォルトでは選択中のフレームが指定されます。arg は転送するウィンドウ数を指定し、デフォルトは 1 です。対話モードでは、arg はプレフィックス引数となります。
まず、frameのメインウィンドウ(サイドウィンドウを参照)の子ウィンドウ(ウィンドウとフレームを参照)を2つの部分に分割します。第1部分には、argが正の場合は最初のarg個の子ウィンドウが、argが負の場合は最後の−arg個の子ウィンドウが含まれます。第2部分には、frameのメインウィンドウの残りの子ウィンドウが含まれます。
第2ステップでは、frameの選択済みウィンドウ(ウィンドウの選択を参照)を含まない部分の各ウィンドウを、新たに作成されたフレームにクローンし(ウィンドウ構成を参照)、それらのウィンドウをframeから削除します。なお、このステップでは、クローンされたウィンドウの元のアイデンティティ(Emacsウィンドウの基本概念を参照)は失われます。ただし、frameに保持されたウィンドウのアイデンティティは維持されます。最終ステップでは、frameからクローンされたウィンドウを削除し、新たに作成されたフレームを返します。
この関数は、arg が 0 であるか数値でない場合、または frame のメインウィンドウがアクティブであるか、あるいは arg の絶対値で指定された数より多くの子ウィンドウを持たない場合に、エラーを通知します。
このコマンドは、frame2 のメインウィンドウ(サイドウィンドウを参照)を frame1 に転送します。frame1 と frame2 の両方で、ライブフレームを指定する必要があります。
最初のステップでは、frame1のメインウィンドウを分割します。verticalがnilでない場合は、frame1の旧メインウィンドウの下に新しいウィンドウを作成します。そうでない場合は、frame1のメインウィンドウの右側に新しいウィンドウを作成します。
第2ステップでは、新しいウィンドウをframe2のメインウィンドウのクローン(ウィンドウ構成を参照)にします。このステップで、クローンされたウィンドウの元のアイデンティティ(Emacsウィンドウの基本概念を参照)は失われます。最終ステップでは、マージが正常に完了した場合にframe2を削除し、frame1を返します。
インタラクティブには、vertical はプレフィックス引数、frame1 は選択されたフレーム、frame2
はすべてのフレームのリストにおいて frame1 の次に続くフレームとなります(すべてのフレームの検索 を参照)。Lisp
からの呼び出しにおいて frame1 と frame2
が省略された場合、または nil が省略された場合は、それぞれ上記の値にデフォルト設定されます。
一般的に、以下の理由により、split-frame の呼び出しを後続の merge-frames の呼び出しで「元に戻す」ことはできません。merge-frame はその第2ステップにおいて、frame2
のメインウィンドウを、第1ステップで分割された内部ウィンドウに配置します。split-frame
を呼び出す前の frame1
の構成には、そのようなウィンドウは存在しませんでした。また、マージ完了後、frame2
のメインウィンドウからクローンされたウィンドウは、マージ前の frame1
のメインウィンドウと同等の領域を占有することになります。これは、元のレイアウトの領域配分と一致しない可能性があります。
したがって、ウィンドウを一時的に切り離して別のフレームで作業し、その後元のフレームのレイアウトに戻るというワークフローを好む場合は、次のように操作してください。元のフレームの設定(ウィンドウ設定を参照)を保存し、split-frameを呼び出して別フレームを作成し、最後に元のフレームの保存済み設定を復元して別フレームを削除します。