如何在 i3wm 中将窗口移动到其父窗口的级别?

Nic*_*ick 22 i3 window-management

假设我打开了窗口 w1、w2 和子窗口 w1-a、w1-b,其中 w1 作为它们的父窗口。有没有办法将 w1-a 移动到其父窗口级别?

Nic*_*ick 23

我通过观看 i3 网站上的视频教程找到了答案:

Shift+ $mod+Up

焦点家长:

$mod+a

我希望这对其他同样不熟悉 i3wm 的人有用。

  • Downvote - 答案描述了特定的 i3 配置,但不包括配置文本。 (4认同)

小智 7

我想扩展作者的答案。\n Shift+$mod+Up( move upfor w1-a) 非常依赖于您当前的布局。

\n\n

假设容器树的初始状态是:

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 w1\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 w1-a\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 w1-b\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 w2\n
Run Code Online (Sandbox Code Playgroud)\n\n

(请注意,w1 不是直接可见的 - 只有它的两个子容器/窗口是。)

\n\n

然而,虽然这指定了任何给定父级的子级的顺序,但它没有指定每个容器是否使用水平或垂直分割,这将影响操作的结果move up

\n\n

在容器树的同一级别内重新排序

\n\n

例如,如果您在垂直分割中将其与w1-b物理下方一起使用:w1-a

\n\n
. (horizontal split)\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 w1 (vertical split)\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 w1-a\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 w1-b\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 w2\n
Run Code Online (Sandbox Code Playgroud)\n\n

那么它只会将它们切换到w1-b上方w1-a不是父顶层。\n容器树现在看起来像这样:

\n\n
. (horizontal split)\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 w1 (vertical split)\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 w1-b\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 w1-a\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 w2\n
Run Code Online (Sandbox Code Playgroud)\n\n

从视觉上看,变化将如下所示:

\n\n
+------------------------------------------+      +------------------------------------------+\n| +-----------------+  +-----------------+ |      | +-----------------+  +-----------------+ |\n| | w1              |  | w2              | |      | | w1              |  | w2              | |\n| | +-------------+ |  |                 | |      | | +-------------+ |  |                 | |\n| | | w1-a        | |  |                 | |      | | | w1-b        | |  |                 | |\n| | |             | |  |                 | |      | | |             | |  |                 | |\n| | |             | |  |                 | |      | | |             | |  |                 | |\n| | |             | |  |                 | |      | | |             | |  |                 | |\n| | +-------------+ |  |                 | |      | | +-------------+ |  |                 | |\n| | +-------------+ |  |                 | | ---> | | +-------------+ |  |                 | |\n| | | w1-b        | |  |                 | |      | | | w1-a        | |  |                 | |\n| | | (move up)   | |  |                 | |      | | |             | |  |                 | |\n| | |             | |  |                 | |      | | |             | |  |                 | |\n| | |             | |  |                 | |      | | |             | |  |                 | |\n| | |             | |  |                 | |      | | |             | |  |                 | |\n| | +-------------+ |  |                 | |      | | +-------------+ |  |                 | |\n| +-----------------+  +-----------------+ |      | +-----------------+  +-----------------+ |\n+------------------------------------------+      +------------------------------------------+\n
Run Code Online (Sandbox Code Playgroud)\n\n

提升一级(可能是提问者的意图)

\n\n

另一方面,如果w1-a位于 的左侧w1-bw2上方w1

\n\n
. (vertical split)\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 w1 (horizontal split)\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 w1-a\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 w1-b\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 w2\n
Run Code Online (Sandbox Code Playgroud)\n\n

move up然后执行on后,您最终将在树的同一(顶层)级别上w1-b得到w2和,但仍然会处于其中 ,这可能会非常令人困惑,特别是考虑到它本身只是一个不可见的容器。w1-bw1-aw1w1

\n\n

容器树现在看起来像这样:

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 w1-b\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 w1\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 w1-a\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 w2\n\n+------------------------------------------+      +------------------------------------------+\n| +--------------------------------------+ |      | +--------------------------------------+ |\n| | w1                                   | |      | | w1-b                                 | |\n| | +---------------+  +---------------+ | |      | |                                      | |\n| | | w1-a          |  | w1-b          | | |      | +--------------------------------------+ |\n| | |               |  | (move up)     | | |      | +--------------------------------------+ |\n| | |               |  |               | | |      | | w1                                   | |\n| | |               |  |               | | |      | | +----------------------------------+ | |\n| | +---------------+  +---------------+ | |      | | | w1-a                             | | |\n| +--------------------------------------+ |      | | |                                  | | |\n| +--------------------------------------+ | ---> | | +----------------------------------+ | |\n| | w2                                   | |      | +--------------------------------------+ |\n| |                                      | |      | +--------------------------------------+ |\n| |                                      | |      | | w2                                   | |\n| |                                      | |      | |                                      | |\n| |                                      | |      | |                                      | |\n| +--------------------------------------+ |      | +--------------------------------------+ |\n+------------------------------------------+      +------------------------------------------+\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您随后尝试w1-a向上移动,视觉上不会发生明显变化,但树会发生变化并且w1不再存在:

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 w1-b\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 w1-a\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 w2\n\n+------------------------------------------+      +------------------------------------------+\n| +--------------------------------------+ |      | +--------------------------------------+ |\n| | w1-b                                 | |      | | w1-b                                 | |\n| |                                      | |      | |                                      | |\n| +--------------------------------------+ |      | +--------------------------------------+ |\n| +--------------------------------------+ |      | +--------------------------------------+ |\n| | w1                                   | |      | | w1-a                                 | |\n| | +----------------------------------+ | |      | |                                      | |\n| | | w1-a                             | | |      | |                                      | |\n| | |                                  | | |      | |                                      | |\n| | +----------------------------------+ | | ---> | |                                      | |\n| +--------------------------------------+ |      | +--------------------------------------+ |\n| +--------------------------------------+ |      | +--------------------------------------+ |\n| | w2                                   | |      | | w2                                   | |\n| |                                      | |      | |                                      | |\n| |                                      | |      | |                                      | |\n| +--------------------------------------+ |      | +--------------------------------------+ |\n+------------------------------------------+      +------------------------------------------+\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,您需要再次将其向上移动以在顶层重新排序并放置w1-aw1-b.

\n\n

提升两级

\n\n

如果在垂直分割中w1-a物理上位于上方,并且在水平分割中位于右侧:w1-bw2w1

\n\n
. (horizontal split)\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 w1 (vertical split)\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 w1-a\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 w1-b\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 w2\n
Run Code Online (Sandbox Code Playgroud)\n\n

那么您最终将与和的容器w1-a位于同一个容器w1w2

\n\n

容器树:

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 w1-a\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 container\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 w1\n    \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 w1-b\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 w2\n\n+------------------------------------------+      +------------------------------------------+\n| +-----------------+  +-----------------+ |      | +--------------------------------------+ |\n| | w1              |  | w2              | |      | | w1-a                                 | |\n| | +-------------+ |  |                 | |      | |                                      | |\n| | | w1-a        | |  |                 | |      | |                                      | |\n| | | (move up)   | |  |                 | |      | +--------------------------------------+ |\n| | |             | |  |                 | |      | +--------------------------------------+ |\n| | |             | |  |                 | |      | | container (former root)              | |\n| | |             | |  |                 | |      | | +---------------+ +----------------+ | |\n| | +-------------+ |  |                 | |      | | | w1            | | w2             | | |\n| | +-------------+ |  |                 | | ---> | | | +-----------+ | |                | | |\n| | | w1-b        | |  |                 | |      | | | | w1-b      | | |                | | |\n| | |             | |  |                 | |      | | | |           | | |                | | |\n| | |             | |  |                 | |      | | | |           | | |                | | |\n| | |             | |  |                 | |      | | | +-----------+ | |                | | |\n| | +-------------+ |  |                 | |      | | +---------------+ +----------------+ | |\n| +-----------------+  +-----------------+ |      | +--------------------------------------+ |\n+------------------------------------------+      +------------------------------------------+\n
Run Code Online (Sandbox Code Playgroud)\n\n

结论

\n\n

在 i3 中移动容器/窗口一开始可能有点不直观,但如果您了解哪个容器容纳哪个容器以及它们的位置,您就可以预测移动容器的行为。请记住,移动操作可能并不总是会导致可见的更改。

\n\n

PS:小思想实验:如果您move left w1-a在“容器树中同一级别内重新排序”示例中,您会得到类似于“向上移动一级”场景的内容。

\n