2つ以上のウィンドウが互いの位置を占めるように、ウィンドウのレイアウトを変更することが有用な場合があります。本節で説明するコマンドは、これを秩序立てて行います。概念的には、これらのコマンドはフレーム上のウィンドウの矩形部分に影響を与えます。原則として、フレームのミニバッファウィンドウや、そのサイドウィンドウ(サイドウィンドウを参照)の位置には影響を与えません。
これらのコマンドに共通しているのは、まずウィンドウを削除し、その後新しい位置に復元する(ウィンドウの復元を参照)ことで、ウィンドウの同一性を維持する点です。ウィンドウが失われることはなく、また追加や重複も発生しません。可能な限り、これらのコマンドはウィンドウの相対的なサイズに加え、パラメータを含むその他のすべての非幾何学的プロパティを維持するよう試みます。位置が変更されようとしているウィンドウがアトミックであるか、あるいは固定サイズである場合、これらのコマンドはエラーを通知します。後述するオプション
transpose-dedicated-windows
は、専用ウィンドウの位置変更を許可するかどうかを決定します。
本節で説明するすべての関数の window 引数には、有効な親ウィンドウを指定する必要があります(ウィンドウとフレームを参照)。これが nil の場合は、選択されたフレームのメインウィンドウ(サイドウィンドウを参照)を指します。対話操作において、接頭辞引数は、選択されたウィンドウの親ウィンドウに対して操作を行うことを意味します。以下に示す例では、特に断りのない限り、表示されるウィンドウはそのフレームのメインウィンドウであり、window 引数は nil であると常に想定します。
最初の2つのコマンドは、ウィンドウレイアウトを時計回りまたは反時計回りに回転させます。
このコマンドは、ウィンドウレイアウトを時計回りに90度回転させます。下図左に示す、3つのライブウィンドウ A、B、C があるレイアウトを想定してください。すると、このコマンドによって右のレイアウトになります。
___________ ___________
| | | | |
| A | | B | |
|___________| --> |_____| A |
| | | | | |
| B | C | | C | |
|_____|_____| |_____|_____|
これは window-layout-rotate-clockwise
と同様ですが、以下の例に示すように、レイアウトを逆方向に回転させます。
___________ ___________
| | | | |
| A | | | C |
|___________| --> | A |_____|
| | | | | |
| B | C | | | B |
|_____|_____| |_____|_____|
続く2つのコマンドはウィンドウのレイアウトを反転させます—仮想的な水平軸または垂直軸を中心に回転させます。反転させるウィンドウの数が奇数の場合、中央のウィンドウは元の位置に留まります。
このコマンドは、以下の例のように、下のウィンドウを上のウィンドウに、上のウィンドウを下のウィンドウに入れ替えます。
___________ ___________
| | | | |
| A | | B | C |
|___________| --> |_____|_____|
| | | | |
| B | C | | A |
|_____|_____| |___________|
このコマンドは、右側のウィンドウが左側に、左側のウィンドウが右側に配置されるよう、ウィンドウを再配置します。
___________ ___________
| | | |
| A | | A |
|___________| --> |___________|
| | | | | |
| B | C | | C | B |
|_____|_____| |_____|_____|
次のコマンドを使用すると、ウィンドウを転置できます—水平分割を垂直分割に、またその逆に変更します。
このコマンドは、すべての水平分割を垂直分割に、またその逆に変換してウィンドウを再配置します。
___________ ___________
| | | | |
| A | | | B |
|___________| --> | A |_____|
| | | | | |
| B | C | | | C |
|_____|_____| |_____|_____|
最後の2つのコマンドを使用すると、既存のレイアウト内でウィンドウを回転させることができます。これらはレイアウトを回転させるコマンドに似ていますが、レイアウトの基礎となる構造は変更しません。実際に変更されるのは、既存のレイアウト内におけるウィンドウの位置です。具体的には、windowのフレームにおけるウィンドウの循環順序(ウィンドウの循環順序を参照)において、あるウィンドウが占めていた位置に、その直前(reverseがnilでない場合はその直後)のウィンドウが配置されるようになります。
このコマンドは、windowの子ウィンドウを循環順に回転させます。オプション引数reverseを指定すると、ウィンドウを逆循環順に回転させます。
___________ ___________
| | | |
| A | | C |
|___________| --> |___________|
| | | | | |
| B | C | | A | B |
|_____|_____| |_____|_____|
このコマンドは、windowの子ウィンドウを循環順で逆方向に回転させます。
___________ ___________
| | | |
| A | | B |
|___________| --> |___________|
| | | | | |
| B | C | | C | A |
|_____|_____| |_____|_____|
上述のすべてのコマンドには、以下のオプションが適用されます。
これが nil の場合、本節で説明する関数は、専用ウィンドウ(専用ウィンドウ を参照)に遭遇した際にエラーを報告します。これが t の場合、専用ウィンドウを非専用ウィンドウと同様に扱います。
最後の2つのコマンドには、以下のオプションが適用されます。
これが nil の場合、選択中のウィンドウは rotate-windows および rotate-windows-back の影響を受けません。これが t(デフォルト)の場合、選択中のウィンドウは、これらのコマンドがいずれも呼び出される前に選択されていたウィンドウの位置に表示されるウィンドウに変更されます。