i3wm에서 창을 상위 ​​창 수준으로 이동하는 방법은 무엇입니까?

i3wm에서 창을 상위 ​​창 수준으로 이동하는 방법은 무엇입니까?

w1, w2 창과 w1을 상위 창으로 하는 하위 창 w1-a, w1-b를 연다고 가정해 보겠습니다. w1-a를 상위 창 수준으로 이동하는 방법이 있습니까?

답변1

i3 웹사이트에서 비디오 튜토리얼을 보고 답을 찾았습니다.

Shift+ $mod+Up

관심 있는 학부모:

$mod+a

이것이 i3wm을 처음 접하는 다른 사람들에게 유용하길 바랍니다.

답변2

저자의 답변을 확장하고 싶습니다. Shift+$mod+Up( move upfor w1-a)는 현재 레이아웃에 따라 크게 달라집니다.

컨테이너 트리의 초기 상태는 다음과 같다고 가정합니다.

.
├── w1
│   ├── w1-a
│   └── w1-b
└── w2

(w1은 직접적으로 표시되지 않습니다. 두 개의 하위 컨테이너/창만 표시됩니다.)

그러나 이는 특정 상위 항목의 하위 항목 순서를 지정하지만 각 컨테이너가 작업 결과에 영향을 미치는 가로 또는 세로 분할을 사용하는지 여부는 지정하지 않습니다 move up.

컨테이너 트리의 동일한 수준 내에서 재정렬

예를 들어, 수직 분할에서 w1-b물리적 아래와 함께 사용하는 경우:w1-a

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

그런 다음 전환 w1-b하여 w1-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-a왼쪽 w1-bw2위쪽 에 있는 경우 w1:

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

move up그런 다음 on 을 수행한 후에 w1-b는 tree 의 동일한(최상위) 수준에 도달하게 되지만 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.

두 가지 레벨 업그레이드

수직 분할에서는 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에서 컨테이너/창을 이동하는 것은 처음에는 다소 직관적이지 않을 수 있지만, 어떤 컨테이너가 어떤 컨테이너를 보유하고 있는지, 어디에 위치하는지 이해하면 컨테이너 이동 동작을 예측할 수 있습니다. 이동 작업으로 인해 눈에 보이는 변화가 항상 나타나는 것은 아니라는 점을 명심하세요.

추신: 약간의 사고 실험: move left w1-a"컨테이너 트리의 동일한 수준 내에서 재정렬" 예제를 수행하면 "한 수준 위로 이동" 시나리오와 유사한 결과가 나타납니다.

답변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

시퀀스를 직접 바인딩하는 것도 가능하지만 다른 명령의 중요한 전처리도 수행하므로 이 방법이 더 적합합니다.

관련 정보