ウィンドウw1、w2を開き、サブウィンドウw1-a、w1-bを親ウィンドウとしてw1と仮定します。 w1-aを親ウィンドウレベルまで移動する方法はありますか?
私はi3ウェブサイトのビデオチュートリアルを見て答えを見つけました:
Shift+$mod+Up
親にフォーカス:
$mod+a
これがi3wmを初めて使う他の人にも役立つことを願っています。
著者の答えをさらに詳しく説明したいと思います。 Shift+$mod+Up
(move up
のw1-a
)は、現在のレイアウトがどのようなものかによって大きく異なります。
コンテナツリーの初期状態が次のとおりだとします。
.
├── w1
│ ├── w1-a
│ └── w1-b
└── w2
(w1は直接表示されないことに注意してください。2つの子コンテナ/ウィンドウのみが表示されます。)
ただし、これは特定の親の子の順序を指定しますが、各コンテナーが水平分割または垂直分割を使用するかどうかは指定しないため、move up
操作の結果に影響します。
たとえば、垂直分割でw1-b
を物理的にw1-a
の下で使用する場合:
. (horizontal split)
├── w1 (vertical split)
│ ├── w1-a
│ └── w1-b
└── w2
次に、w1-b
の上にw1-a
を移動し、notを親の最上位に移動するだけです。コンテナツリーは次のようになります。
. (horizontal split)
├── w1 (vertical split)
│ └── w1-b
│ ├── w1-a
└── w2
視覚的には、変更は次のようになります。
+------------------------------------------+ +------------------------------------------+
| +-----------------+ +-----------------+ | | +-----------------+ +-----------------+ |
| | w1 | | w2 | | | | w1 | | w2 | |
| | +-------------+ | | | | | | +-------------+ | | | |
| | | w1-a | | | | | | | | w1-b | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | +-------------+ | | | | | | +-------------+ | | | |
| | +-------------+ | | | | ---> | | +-------------+ | | | |
| | | w1-b | | | | | | | | w1-a | | | | |
| | | (move up) | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | +-------------+ | | | | | | +-------------+ | | | |
| +-----------------+ +-----------------+ | | +-----------------+ +-----------------+ |
+------------------------------------------+ +------------------------------------------+
一方、w1-a
がw1-b
の左側にあり、w2
がw1
の上にある場合:
. (vertical split)
├── w1 (horizontal split)
│ ├── w1-a
│ └── w1-b
└── w2
次に、move up
でw1-b
を実行すると、ツリーの同じ(最上位)レベルでw2
とw1-b
になりますが、w1-a
は引き続き特にw1
自体が非表示のコンテナであることを考えると、w1
内にあると非常に混乱する可能性があります。
コンテナツリーは次のようになります。
.
├── w1-b
├── w1
│ └── w1-a
└── w2
+------------------------------------------+ +------------------------------------------+
| +--------------------------------------+ | | +--------------------------------------+ |
| | w1 | | | | w1-b | |
| | +---------------+ +---------------+ | | | | | |
| | | w1-a | | w1-b | | | | +--------------------------------------+ |
| | | | | (move up) | | | | +--------------------------------------+ |
| | | | | | | | | | w1 | |
| | | | | | | | | | +----------------------------------+ | |
| | +---------------+ +---------------+ | | | | | w1-a | | |
| +--------------------------------------+ | | | | | | |
| +--------------------------------------+ | ---> | | +----------------------------------+ | |
| | w2 | | | +--------------------------------------+ |
| | | | | +--------------------------------------+ |
| | | | | | w2 | |
| | | | | | | |
| | | | | | | |
| +--------------------------------------+ | | +--------------------------------------+ |
+------------------------------------------+ +------------------------------------------+
次にw1-a
を上に移動しようとすると、視覚的な変化は見られませんが、ツリーが変化してw1
が存在しなくなります。
.
├── w1-b
├── w1-a
└── w2
+------------------------------------------+ +------------------------------------------+
| +--------------------------------------+ | | +--------------------------------------+ |
| | w1-b | | | | w1-b | |
| | | | | | | |
| +--------------------------------------+ | | +--------------------------------------+ |
| +--------------------------------------+ | | +--------------------------------------+ |
| | w1 | | | | w1-a | |
| | +----------------------------------+ | | | | | |
| | | w1-a | | | | | | |
| | | | | | | | | |
| | +----------------------------------+ | | ---> | | | |
| +--------------------------------------+ | | +--------------------------------------+ |
| +--------------------------------------+ | | +--------------------------------------+ |
| | w2 | | | | w2 | |
| | | | | | | |
| | | | | | | |
| +--------------------------------------+ | | +--------------------------------------+ |
+------------------------------------------+ +------------------------------------------+
したがって、最上位に並べ替えてw1-a
をw1-b
の上に配置するには、もう一度上に移動する必要があります。
垂直分割でw1-a
が物理的にw1-b
の上にあり、水平分割でw2
がw1
の右側にある場合:
. (horizontal split)
├── w1 (vertical split)
│ ├── w1-a
│ └── w1-b
└── w2
その後、w1-a
はinw1
およびw2
のコンテナと同じコンテナになります。
コンテナツリー:
.
├── w1-a
└── container
├── w1
│ └── w1-b
└── w2
+------------------------------------------+ +------------------------------------------+
| +-----------------+ +-----------------+ | | +--------------------------------------+ |
| | w1 | | w2 | | | | w1-a | |
| | +-------------+ | | | | | | | |
| | | w1-a | | | | | | | | |
| | | (move up) | | | | | | +--------------------------------------+ |
| | | | | | | | | +--------------------------------------+ |
| | | | | | | | | | container (former root) | |
| | | | | | | | | | +---------------+ +----------------+ | |
| | +-------------+ | | | | | | | w1 | | w2 | | |
| | +-------------+ | | | | ---> | | | +-----------+ | | | | |
| | | w1-b | | | | | | | | | w1-b | | | | | |
| | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | |
| | | | | | | | | | | +-----------+ | | | | |
| | +-------------+ | | | | | | +---------------+ +----------------+ | |
| +-----------------+ +-----------------+ | | +--------------------------------------+ |
+------------------------------------------+ +------------------------------------------+
I3でコンテナー/ウィンドウを移動することは、最初は少し直感的でない場合がありますが、どのコンテナーがどのコンテナーを保持し、どこに配置されているかを理解すれば、コンテナーの移動がどのように動作するかを予測できます。移動操作を実行しても、常に目に見える変化が生じるとは限らないことに注意してください。
PS:少し考えた実験:「コンテナツリーの同じレベル内での並べ替え」の例でmove left
w1-a
を実行すると、「1レベル上の階層に移動する」シナリオに似た結果が得られます。
この問題に対する私の答えは、focus parent
とマークを介してレイアウトとは関係なくこれを実行できるi3helper bashスクリプトを使用することです。抽出された1つのコマンドは次のとおりです。
#!/bin/bash
case $1 in
moveToParent)
i3 mark i3ha
i3 focus parent
i3 focus parent
i3 mark i3hb
i3 [con_mark="i3ha"] focus
i3 move window to mark i3hb
i3 unmark i3ha
i3 unmark i3hb
;;
esac
そしてそれを次のようにi3にバインドします:
# focus the parent container
bindsym $mod+a focus parent
bindsym $mod+shift+a exec i3helper moveToParent
bindsym $mod+z focus child
シーケンスを直接バインドすることも可能ですが、他のコマンドの重要な前処理も行うので、これはより適しています。