w1, w2 창과 w1을 상위 창으로 하는 하위 창 w1-a, w1-b를 연다고 가정해 보겠습니다. w1-a를 상위 창 수준으로 이동하는 방법이 있습니까?
답변1
i3 웹사이트에서 비디오 튜토리얼을 보고 답을 찾았습니다.
Shift+ $mod+Up
관심 있는 학부모:
$mod+a
이것이 i3wm을 처음 접하는 다른 사람들에게 유용하길 바랍니다.
답변2
저자의 답변을 확장하고 싶습니다.
Shift+$mod+Up
( move up
for 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-b
과 w2
위쪽 에 있는 경우 w1
:
. (vertical split)
├── w1 (horizontal split)
│ ├── w1-a
│ └── w1-b
└── w2
move up
그런 다음 on 을 수행한 후에 w1-b
는 tree 의 동일한(최상위) 수준에 도달하게 되지만 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
될 것이다존재하다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
시퀀스를 직접 바인딩하는 것도 가능하지만 다른 명령의 중요한 전처리도 수행하므로 이 방법이 더 적합합니다.