web-dev-qa-db-ja.com

ウィンドウをi3wmの親ウィンドウのレベルまで移動する方法は?

ウィンドウw1、w2を開き、サブウィンドウw1-a、w1-bを親ウィンドウとしてw1と仮定します。 w1-aを親ウィンドウレベルまで移動する方法はありますか?

22
Nick

私はi3ウェブサイトのビデオチュートリアルを見て答えを見つけました:

Shift+$mod+Up

親にフォーカス:

$mod+a

これがi3wmを初めて使う他の人にも役立つことを願っています。

19
Nick

著者の答えをさらに詳しく説明したいと思います。 Shift+$mod+Upmove upw1-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)   | |  |                 | |      | | |             | |  |                 | |
| | |             | |  |                 | |      | | |             | |  |                 | |
| | |             | |  |                 | |      | | |             | |  |                 | |
| | |             | |  |                 | |      | | |             | |  |                 | |
| | +-------------+ |  |                 | |      | | +-------------+ |  |                 | |
| +-----------------+  +-----------------+ |      | +-----------------+  +-----------------+ |
+------------------------------------------+      +------------------------------------------+

1レベル上に移動する(おそらく質問者が意図したもの)

一方、w1-aw1-bの左側にあり、w2w1の上にある場合:

. (vertical split)
├── w1 (horizontal split)
│   ├── w1-a
│   └── w1-b
└── w2

次に、move upw1-bを実行すると、ツリーの同じ(最上位)レベルでw2w1-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-aw1-bの上に配置するには、もう一度上に移動する必要があります。

2レベル上に移動

垂直分割でw1-aが物理的にw1-bの上にあり、水平分割でw2w1の右側にある場合:

. (horizontal split)
├── w1 (vertical split)
│   ├── w1-a
│   └── w1-b
└── w2

その後、w1-ainw1および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 leftw1-aを実行すると、「1レベル上の階層に移動する」シナリオに似た結果が得られます。

1
Syphdias

この問題に対する私の答えは、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

シーケンスを直接バインドすることも可能ですが、他のコマンドの重要な前処理も行うので、これはより適しています。

1
karel