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

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

w1、w2ウィンドウとw1を親ウィンドウとするサブウィンドウw1-a、w1-bを開くとしましょう。 w1-aを親ウィンドウレベルに移動する方法はありますか?

答え1

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

Shift+ $mod+Up

興味のある親:

$mod+a

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

答え2

著者の答えを広げたいです。 Shift+$mod+Upmove upfor 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-bw1-a移動します。いいえトップトップレベルに。これでコンテナツリーは次のようになります。

. (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-aw1-bw2上にある場合w1

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

move upその後、オンを実行した後は、w1-bツリーの同じ(最上位)レベルに達することになりますが、それはw2まだそこにあります。これは、特にそれ自体が見えないコンテナにすぎないことを考慮すると、非常に混乱する可能性があります。w1-bw1-aw1w1

これでコンテナツリーは次のようになります。

.
├── 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

2つのレベルのアップグレード

垂直分割ではw1-a物理的に上にあり、水平分割では右にある場合:w1-bw2w1

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

それからあなたは結局こうw1-aなるでしょう存在するw1とのコンテナと同じコンテナです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つ上のレベルに移動」シナリオに似た結果が表示されます。

答え3

focus parentこの質問に対する私の答えは、レイアウトパスやマークアップとは別にこれを行うことができるi3helper bashスクリプトを持つことです。抽出コマンドは次のとおりです。

#!/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

シーケンスを直接バインドすることも可能ですが、他のコマンドの重要な前処理も実行するため、この方法がより適切です。

関連情報